嵌入式开发中,经常需要bootloader进行程序固件升级和系统维护,所以bootloader是必不可少的功能。STM32系统自带的系统bootloader很方便使用。大量减少了工程师开发bootloader的工作
1. 摘要
本篇笔记主要介绍,STM32系统bootloader的应用,以STM32H743芯片为例介绍,
2. 准备工作
1, IAR 8.32.1
2, STM32CubeProgrammer
3. 系统bootloader介绍
相信用过STM32芯片的童鞋应该都不陌生,在芯片出厂的时候,意法在内部系统固化了bootloader,并且支持多种接口像UART,I2C,SPI,USB,CAN等等,可用于下载升级用户程序,就我使用的H743来讲可支持接口如下:
注意红色框部分地址有误,程序中代码需要注意,目前支持几乎全系列STM32。像F0, F1,F4,F7,H7,包括比较新的G系列也都支持,还有L系列和W系列。此bootloader可配合ST官方的STM32CubeProgrammer上位机使用,这样大大节省了开发时间,当然你如果要做更好的bootloader可以根据这个思路自己在添加更多功能。
就我最近使用的H743来讲,我们今天以H743为例,以USB接口为例来介绍。
4. 硬件连接示意图
将板子通过USB线连入电脑,板子作为USB device
5. Bootloader模式
在使用bootloader时候,需要考虑怎么进入boot模式,而STM32支持通过boot引脚跳转,通过boot引脚跳转需要配置引脚和地址寄存器
通过用户应用程序跳转则不需要配置boot引脚,而一般通过应用程序跳转比较方便,尤其是带有不好拆卸外壳的产品,我们通过应用程序跳转极为方便,固以后者为例来说明。通过boot引脚跳转的配置说明大家可以参考官方文档AN2606.
6. 配置需求
一般来说我们在进入跳转到bootloader时候需要做一些工作,STM32在进入系统bootloader时候需要做以下动作:关闭全局中断,时钟恢复配置为HIS,清除中断挂起标志,使能中断,设置跳转地址,执行跳转,可以是按键检测跳转,或者触摸操作跳转,这个根据自己的应用去实现。
7. 代码实现
通过按照上面的说明我们就可以通过代码实现,只需要在需要跳转动作的地方调用下面的函数。注意ST官方给的系统bootloader系统地址不对,AN2606中给出的地址有误,使用时候要注意,需采用下面的地址,此处参考了安富莱例程,一并感谢。
8. 测试
配合STM32CubeProgrammer完成测试,测试步骤很简单,打开STM32CubeProgrammer,当应用程序中满足跳转条件进入系统bootloader后,就会进入DFU,点击连接,如过连接无误,可以选择要下载的文件,进行下载,下载成功后,有提示。按照图示操作就可以完成。
点击Open file,选择自己要下载的文件
或者可以在菜单里选择第二项进入下面界面更新。
9. 参考文档
序号 |
文献 |
1 |
STM32H743RM |
2 |
AN2606: STM32 microcontroller system memory boot mode |