STM32之HAL库的Bootloader跳转到APP

本文详细介绍了如何使用cubeMX和keil制作Bootloader程序,用于STM32设备的OTA固件升级。步骤包括配置时钟、启用UART1、设置中断向量表,并提供了关键代码示例。同时提到了APP程序的制作,强调了中断处理和跳转到APP前关闭总中断的重要性。

前言:需要用到OTA固件升级,必须借助Bootloader搬运新固件到旧固件的Flash区,从而完成程序升级

  1. 制作Bootloader程序
    • 使用cubeMX工具,新建Bootloader工程,其中需要打开时钟,打开UART1进行调试信息输出

      1.1、打开RCC

      1.2、打开看门狗

      1.3、打开jlink调试口

      1.4、 打开USART1输出调试信息

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

    1. keil配置
      1. 配置代码区域
      2. 配置输出hex和bin文件
    2. 编写代码
      1. 跳转到APP代码,跳转前一定要关总中断__disable_irq();
      2. __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);
        }

  2. 制作APP程序
    1. 使用cubeMX生成工程,可参考Bootloader生成过程,此处不再重复
    2. 代码中修改APP中断向量表,APP程序从0x3000开始
    3. keil配置
      1. 配置代码区域

    如果对您有帮助,麻烦动一下您发财的小手,帮忙点个赞,谢谢!!! 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值