STM32H7的系统bootloader基础知识

张开发
2026/6/4 12:57:44 15 分钟阅读
STM32H7的系统bootloader基础知识
STM32BootloaderSTM32H7的系统bootloader基础知识本章为大家介绍STM32H7内置的系统bootloader的基础知识。67.1 初学者重要提示67.2 系统bootloader基础知识67.3 进入系统bootloader的方法67.4 退出系统bootloader的方法67.5 系统bootloader的擦写管理67.6 总结67.1 初学者重要提示本章主要为大家介绍系统bootloader的理论知识下个章节为大家实战。更多系统bootloader的基础知识看本帖的AN2606应用笔记http://www.armbbs.cn/forum.php?modviewthreadtid96573 。67.2 系统bootLoader基础知识STM32的系统存储区自带bootloader此程序是ST在芯片出厂时烧录进去的主要用于将用户应用程序下载到芯片内部Flash。支持USBSPII2CCANUART等接口方式下载。如果大家的应用程序打算采用这种接口方式进行升级可以考虑采用系统bootloader简单易用无需用户自己写bootLoader了。更重要的是使用系统BootLoader可以不依赖硬件boot引脚可以直接从应用程序跳转到系统BootLoader这样灵活性就很大了。67.2.1 系统bootLoader执行流程下面是STM32H7的BootLoader程序执行流程简单了解下即可关于这个执行流程要特别注意一点如果在进入系统BootLoader前就插入了USB线会导致进入系统BootLoader后优先执行USB DFU其它的接口方式将没有机会执行。67.2.2 系统bootLoader使用的引脚STM32H7的Bootloader使用到的引脚分配如下67.3 进入系统bootLoader的方法STM32进入系统BootLoader主要有两种方法一种是设置boot引脚另一种是应用程序直接跳转到系统BootLoader。67.3.1 设置硬件boot引脚进入系统bootLoaderH7的启动方式比较更灵活只需一个boot引脚。但是一个引脚只能区分出两个状态为了解决这个问题H7专门配套了两个option bytes选项字节配置如此以来就可以方便设置各种存储器地址了。BOOT_ADD0和BOOT_ADD1对应32位地址到高16位这点要特别注意。通过这两个选项字节所有0x0000 0000到0x3FFF 0000的存储器地址都可以设置包括所有Flash地址空间。所有RAM地址空间ITCMDTCM和SRAM。设置了选项字节后掉电不会丢失下次上电或者复位后会根据BOOT引脚状态从BOOT_ADD0或BOOT_ADD1所设置的地址进行启动。也就是说是H7可以从0x0000 0000到0x3FFF 0000所有地址进行启动这点与F4完全不同F4系列是固定从0x0000 0000启动的。STM32H7的boot引脚设计使用BOOT功能注意以下几个问题如果用户不慎设置的地址范围不在有效的存储器地址那么BOOT 0时会从Flash首地址0x0800 0000启动BOOT 1时会从ITCM首地址0x0000 0000启动。如果用户使能了Flash Level 2保护那么只能从Flash地址空间进行启动。67.3.2 用户应用程序跳转到系统bootLoader除了使用boot引脚控制运行系统BootLoader也可以上电后跳转跳转前注意以下问题禁止所有外设时钟。禁止使用的PLL。禁止所有中断。清除所有中断挂起标志。如果使用Go命令对于BootLoader中使用的硬件外设寄存器跳转前是不会设置到复位值的如果用户代码中恰好也用到这些寄存器需要重新配置。这里要特别注意的是BootLoader会用到看门狗并且喂狗时间设为最长了如果用户代码里面要用到看门狗请根据需要重新配置并且看门狗一旦开启是无法关闭的。对于具有双bank特性的STM32为了能够从用户代码跳转到系统boot需要将系统boot代码区使用寄存器SYSCFG重映射到0x0000 0000除了F7和H7系列。对于STM32F7系列需要禁止nDBOOT / nDBANK 特性然后跳转到系统boot区。如果用到系统bootloader的DFU/CAN接口需要用到HSE时钟这个时钟的频率是通过内部HSI/MSI检测出具体频率。因此由于外部温度等各种情况内部HSI的精度会受到影响从而影响检测出来的HSE时钟有较大误差最终导致DFU/CAN运行失败。具体实现会在下一章节为大家讲解。67.4 退出系统bootLoader的方法当前主要研究了USB DFU和串口IAP退出bootLoader。USB DFU当芯片工作在系统bootLoader的USB DFU模式更新完毕程序后不会自动退出USB DFU需要重新复位芯片后才会退出。由于DFU模式会用到USB线插拔USB线是难以避免的所以是否支持自动退出并不影响。串口IAP当芯片工作在系统bootLoader的串口升级模式更新完毕程序后可以自动退出。所以基于串口的组网设备使用系统bootloader非常方便。67.5 系统bootLoader的擦写管理注这部分知识点有个了解即可。使用bootloader命令进行的所有写操作都只能字对齐地址应该是4的倍数。要写入的数据数量也必须是4的倍数接受未对齐的半页写地址。有些产品不支持批量擦除操作。使用BootLoader进行批量擦除时有两种方法可用使用扇区擦除命令一个一个删除。将保护级别设置为1然后设置为0使用读保护命令然后使用读非保护命令将导致大批量擦除操作。STM32 L1和L0系列的Bootloader除了支持操作内部Flash内部SRAM可选字节等还支持操作Data Memeory数据存储区貌似是指的EEPROM。数据存储区支持读写操作而不支持擦除命令如果要擦除写0即可。另外对此存储区的写操作必须是4字节对齐写地址并且写入的数据也是4的倍数。F2, F4, F7 和 L4除了支持操作内部Flash内部SRAM可选字节等还支持操作OTP存储区。仅支持读写操作不支持擦除命令。F2, F4 和 F7系列的内部Flash写格式依赖于供电电压范围默认的写操作只支持字节半字字和双字是不支持的为了增加写操作速度用户施加足够的电压范围以允许写操作按半字字或双字并通过虚拟内存位置的boot程序更新此配置。该内存位置不是物理地址但可以根据协议使用常规的BootLoader读写操作。该存储位置包含4个字节分别为如下表所述67.6 总结本章节就为大家讲解这么多更新相关的知识看ST的应用笔记AN2606。

更多文章