Skip to content

实验3: 引导装载程序

这个实验的目的是进一步掌握如何在MCU上编写裸机程序,理解bootloader的一般工作原理。

本实验配有 实验指南

实验目的

  1. 熟练掌握在STM32F103上编写交互程序的方法;
  2. 理解bootloader的一般功能和基本工作原理;
  3. 掌握调整编译链接参数以形成定制的编译结果的方法。

实验器材

与实验2相同。

实验步骤

此为实验报告的整体步骤,具体的实验步骤请参考 实验指南

  1. 编写一个交互对话程序,能通过串口收到PC的指令,并分离出命令字和参数,将分离的结果返回;
  2. 写一个简易bootloader,能通过串口执行四条最简单的指令:
    • peek <addr> 以一个字为单位读取内存中 addr 位置的数据(addr是4字节对齐,十六进制的 形式,长度为8位十六进制,没有引导字符,例如 00008000),并以十六进制的形式输出结果,输出结果为自然序(高位在前)
    • poke <addr> <data> 以一个字为单位修改内存中 addr 位置的数据为 data(addr 是 4 字节对齐,十六进制的形式,长度为8位十六进制, data 也是十六进制的形式,长度为8位十六进制,为自然序高位在前)
    • load <addr> 启动XModem或ZModem协议,从PC接收一段二进制数据,保存在addr开始的RAM(或FLASH)中
    • run <addr> 运行RAM(或FLASH)地址addr开始的程序
  3. 重新编译链接实验1的按钮控制LED程序(必须没有开任何中断),将目标定位在RAM(或FLASH)中,用步骤2的bootloader下载到RAM(或FLASH)中运行。

扩展内容

增加命令print <addr>,以字符形式输出从addr开始的字节,直到0x00为止,addr不需要是4字节对齐的。

实验报告要求

此为实验报告的整体要求,具体的实验步骤请参考 实验指南

  1. 画出你所实际实施的连接示意图;
  2. 给出所用的器材的列表;
  3. 描述所做的实验步骤,给出各步操作的命令和结果;
  4. 给出你的程序的代码,并加以解释;
  5. 给出测试的结果。

验收要求

  1. 将 bootloader 烧录到MCU中,在验收时使用 load 指令烧录需要执行的 APP,使用 run 指令跳转执行 APP;
  2. 现场演示 peekpoke 指令的使用,并验证其正确性;
  3. 回答与实验内容相关的问题。