实验3: 引导装载程序¶
这个实验的目的是进一步掌握如何在MCU上编写裸机程序,理解bootloader的一般工作原理。
本实验配有 实验指南 。
实验目的¶
- 熟练掌握在STM32F103上编写交互程序的方法;
- 理解bootloader的一般功能和基本工作原理;
- 掌握调整编译链接参数以形成定制的编译结果的方法。
实验器材¶
与实验2相同。
实验步骤¶
此为实验报告的整体步骤,具体的实验步骤请参考 实验指南 。
- 编写一个交互对话程序,能通过串口收到PC的指令,并分离出命令字和参数,将分离的结果返回;
- 写一个简易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开始的程序
- 重新编译链接实验1的按钮控制LED程序(必须没有开任何中断),将目标定位在RAM(或FLASH)中,用步骤2的bootloader下载到RAM(或FLASH)中运行。
扩展内容¶
增加命令print <addr>
,以字符形式输出从addr开始的字节,直到0x00为止,addr不需要是4字节对齐的。
实验报告要求¶
此为实验报告的整体要求,具体的实验步骤请参考 实验指南 。
- 画出你所实际实施的连接示意图;
- 给出所用的器材的列表;
- 描述所做的实验步骤,给出各步操作的命令和结果;
- 给出你的程序的代码,并加以解释;
- 给出测试的结果。
验收要求¶
- 将 bootloader 烧录到MCU中,在验收时使用
load
指令烧录需要执行的 APP,使用run
指令跳转执行 APP; - 现场演示
peek
和poke
指令的使用,并验证其正确性; - 回答与实验内容相关的问题。