stm32h7 串口idle_【STM32H7教程】第69章 STM32H7的系统bootloader之串口IAP固件升级

第69章       STM32H7的系统bootloader之串口IAP固件升级

本章节为大家讲解使用系统bootloader做程序升级的方法,即使不依赖外部boot引脚也可以方便升级。

IAP的全称是In Application Programming,即在线应用编程。

69.1 初学者重要提示

69.2 跳转到系统bootloader的程序设计

69.3 STM32CubeProg的安装说明

69.3 STM32CubeProg的程序下载说明

69.4 串口方式系统bootloader驱动移植和使用

69.6 实验例程设计框架

69.7 实验例程说明(MDK)

69.8 实验例程说明(IAR)

69.9 总结

69.1 初学者重要提示

学习本章节前,务必优先学习第67章。

特别注意STM32H7的系统BootLoader地址并不是0x1FFF 0000。

本章节的串口IAP下载软件使用STM32CubeProg,此软件实现了之前的DfuSe,STLINK小软件和Flashloader三合一,并且支持外部EEPROM,NOR Flash,SPI Flash,NAND Flash等烧写,也支持OTA编程。

使用系统bootloader做串口IAP升级时,MicroUSB接口不要接线到电脑端,因为这会导致系统bootloader工作在USB DFU模式,无法再使用串口IAP。

69.2 跳转到系统bootLoader的程序设计

程序设计如下,基本是按照第67章3.2小节的方法进行设计

1. /*2. ******************************************************************************************************

3. * 函 数 名: JumpToBootloader

4. * 功能说明: 跳转到系统BootLoader

5. * 形 参: 无

6. * 返 回 值: 无

7. ******************************************************************************************************

8.*/

9. static void JumpToBootloader(void)10. {11. uint32_t i=0;12. void (*SysMemBootJump)(void); /*声明一个函数指针*/

13. __IO uint32_t BootAddr = 0x1FF09800; /*STM32H7的系统BootLoader地址*/

14.15. /*关闭全局中断*/

16. DISABLE_INT();17.18. /*关闭滴答定时器,复位到默认值*/

19. SysTick->CTRL = 0;20. SysTick->LOAD = 0;21. SysTick->VAL = 0;22.23. /*设置所有时钟到默认状态,使用HSI时钟*/

24. HAL_RCC_DeInit();25.26. /*关闭所有中断,清除所有中断挂起标志*/

27. for (i = 0; i < 8; i++)28. {29. NVIC->ICER[i]=0xFFFFFFFF;30. NVIC->ICPR[i]=0xFFFFFFFF;31. }32.33. /*使能全局中断*/

34. ENABLE_INT();35.36. /*跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址*/

37. SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));38.39. /*设置主堆栈指针*/

40. __set_MSP(*(uint32_t *)BootAddr);41.42. /*在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针*/

43. __set_CONTROL(0);44.45. /*跳转到系统BootLoader*/

46. SysMemBootJump();47.48. /*跳转成功的话,不会执行到这里,用户可以在这里添加代码*/

49. while (1)50. {51.52. }53. }

这里把程序设计中的几个关键地方做个说明:

第12行,声明一个函数指针。

第13行,这个要特别注意,H7的系统Bootloader地址在0x1FF09800。

第19到21行,设置滴答定时器到复位值。

第24行,此函数比较省事,可以方便的设置H7所有时钟到复位值,内部时钟使用HSI。

第27到31行,清除所有中断挂起标志并关闭中断,这里是直接通过一个for循环设置了NVIC所有配置位,共8组。

第37行,将系统bootLoader的中断复位服务程序的入口地址赋给第12行声明的函数,用户执行这个函数时,就会直接跳转过去。

第40行,设置主堆栈指针位置,即系统bootloader的首地址存储的就是栈地址。

第43行,这个设置在RTOS应用程序中比较重要,因为基于Cortex-M内核的RTOS任务堆栈基本都是使用线程堆栈指针PSP。但系统bootLoader使用的是主堆栈指针MSP,所以务必要设置下,同时让M内核工作于特权级。此寄存器的作用:

第46行,跳转到系统bootLoader。

69.3 STM32CubeProg的安装说明

STM32CubeProg的安装比较简单,如果大家的电脑中缺少JAVA环境,会提示安装,按照提示操作即可。

这里特别注意USB DFU驱动的安装,如果大家的电脑上安装了DfuSe软件,那边板子工作在系统bootLoader模式时,电脑端的设备管理器识别出来的标识是这样的:

如果用STM32CubeProg的话,务必要将此驱动删掉,鼠标右击此标识,选择卸载,弹出如下对话框:

卸载完毕后,重启电脑,然后运行STM32CubeProg安装目录里面的STM32Bootloader.bat即可,最后插上设备就可以正常识别了。识别后的标识:

69.4 STM32CubeProg的程序下载说明

这里把两种下载方式都做个说明,一种是设置外部boot引脚进行下载,另一种是设置程序跳转到系统botloader进行下载。<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值