前言:需要用到OTA固件升级,必须借助Bootloader搬运新固件到旧固件的Flash区,从而完成程序升级
- 制作Bootloader程序
- 使用cubeMX工具,新建Bootloader工程,其中需要打开时钟,打开UART1进行调试信息输出
1.1、打开RCC


1.2、打开看门狗

1.3、打开jlink调试口

1.4、 打开USART1输出调试信息

1.4、设置输出工程文件名,最后点击【GENERATE CODE】


- keil配置
- 配置代码区域

- 配置输出hex和bin文件


- 配置代码区域
- 编写代码
- 跳转到APP代码,跳转前一定要关总中断__disable_irq();
-
__asm void MSR_MSP (uint32_t ulAddr) { MSR MSP, r0 //set Main Stack value BX r14 } typedef void (*Jump_Fun)(void); void IAP_ExecuteApp(uint32_t App_Addr) { Jump_Fun JumpToApp; if (((*(__IO uint32_t *)App_Addr) & 0x2FFE0000) == 0x20000000) { JumpToApp = (Jump_Fun) * (__IO uint32_t *)(App_Addr + 4); MSR_MSP( * (__IO uint32_t *) App_Addr); JumpToApp(); } else { printf("There is None APP to jump,ERROR!!!\r\n"); } } int main() { __disable_irq(); //很重要,跳转之前必须关总中断,否则APP中重新设置中断向量表会出错 printf("> Start Running APP1 ......\r\n\r\n"); IAP_ExecuteApp(OTA_FLASH_APP1_ADDR); }
- 使用cubeMX工具,新建Bootloader工程,其中需要打开时钟,打开UART1进行调试信息输出
- 制作APP程序
- 使用cubeMX生成工程,可参考Bootloader生成过程,此处不再重复
- 代码中修改APP中断向量表,APP程序从0x3000开始

- keil配置
- 配置代码区域


- 配置代码区域
如果对您有帮助,麻烦动一下您发财的小手,帮忙点个赞,谢谢!!!
本文详细介绍了如何使用cubeMX和keil制作Bootloader程序,用于STM32设备的OTA固件升级。步骤包括配置时钟、启用UART1、设置中断向量表,并提供了关键代码示例。同时提到了APP程序的制作,强调了中断处理和跳转到APP前关闭总中断的重要性。



3203

被折叠的 条评论
为什么被折叠?



