[APM32F0] Boot软件跳转APP软件函数极海APM32F072

[复制链接]
 楼主| 泡椒风爪 发表于 2023-1-29 17:11 | 显示全部楼层 |阅读模式
  1. //定义一个函数类型的参数.这里iapfun是一个函数指针
  2. typedef  void (*iapfun)(void);                               

  3. //跳转到应用程序段
  4. //appxaddr:用户代码起始地址.
  5. void iap_load_app(uint32_t appxaddr)
  6. {
  7.   iapfun jump2app;//定义一个函数指针变量
  8.   
  9.   __disable_irq();

  10.   if(((*(__IO uint32_t*)appxaddr)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
  11.   {
  12.     //HAL_NVIC_DisableIRQ(DMA1_Channel2_3_IRQn);
  13.     //HAL_NVIC_DisableIRQ(DMA1_Channel4_5_6_7_IRQn);
  14.     //HAL_NVIC_DisableIRQ(USART1_IRQn);
  15.     //HAL_NVIC_DisableIRQ(USART2_IRQn);
  16.     //HAL_NVIC_DisableIRQ(USART3_4_IRQn);
  17.     //HAL_NVIC_DisableIRQ(SysTick_IRQn);
  18.       
  19.    
  20.     //函数指针实例化,给指针赋值,APP代码区第二个字内存的数据为程序开始地址(复位地址)
  21.     jump2app=(iapfun)*(__IO uint32_t*)(appxaddr+4);       
  22.        
  23.     //初始化APP堆栈指针(APP代码区的第一个字内存的数据为栈顶地址)
  24.     __set_MSP(*(__IO uint32_t*)appxaddr);

  25.     //跳转到APP.函数指针在前面已经实例化,这里直接用         
  26.     jump2app();                                                                       
  27.   }

  28. }


  29. /**
  30.   \brief   Set Main Stack Pointer
  31.   \details Assigns the given value to the Main Stack Pointer (MSP).
  32.   \param [in]    topOfMainStack  Main Stack Pointer value to set
  33. */
  34. __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
  35. {
  36.   register uint32_t __regMainStackPointer     __ASM("msp");
  37.   __regMainStackPointer = topOfMainStack;
  38. }/**


bartonalfred 发表于 2023-6-10 15:37 | 显示全部楼层
这个的源代码在哪里下载的              
averyleigh 发表于 2023-6-10 15:47 | 显示全部楼层
如何使用APM32F072的BootLoader和APP程序
bestwell 发表于 2023-6-10 15:52 | 显示全部楼层
在嵌入式系统中,通常会使用Bootloader程序来完成系统的初始化和应用程序(APP)的加载。
jonas222 发表于 2023-6-10 16:07 | 显示全部楼层
当APP下载完成后,需要通过Bootloader跳转到APP的起始地址,以实现系统的正常运行。
eefas 发表于 2023-6-10 16:12 | 显示全部楼层
如何实现从bootloader到APP的跳转
beacherblack 发表于 2023-6-10 16:17 | 显示全部楼层
boot跳转到app怎么判断是否成功
ulystronglll 发表于 2023-6-10 16:24 | 显示全部楼层
先写bootloader程序用ST-LINK烧进去,然后就可以用串口烧写APP了
jtracy3 发表于 2023-6-10 16:32 | 显示全部楼层
在Bootloader程序中编写函数,实现跳转到APP程序入口地址
ulystronglll 发表于 2023-6-10 17:04 | 显示全部楼层
在嵌入式系统中,Bootloader是一个独立的程序,用于在系统启动时加载和运行其他应用程序
kkzz 发表于 2023-6-10 17:14 | 显示全部楼层
在使用Bootloader跳转APP时,需要确保Bootloader和APP之间的接口和数据传输方式一致,以保证程序能够顺利地运行。
adolphcocker 发表于 2023-6-10 17:22 | 显示全部楼层
boot flash分两个app区一个flash区怎么用
backlugin 发表于 2023-6-10 17:29 | 显示全部楼层
bootloar和app怎么一起烧进去
bestwell 发表于 2023-6-10 17:47 | 显示全部楼层
void jump_to_app(void)
{
    void (*app_entry)(void);

    // 关闭所有中断
    __disable_irq();

    // 关闭SysTick定时器
    SysTick->CTRL = 0;

    // 设置APP程序堆栈指针为APP程序入口地址
    __set_MSP(*(__IO uint32_t*)APP_ENTRY_ADDRESS);

    // 跳转到APP程序入口地址
    app_entry = (void (*)(void))(*(uint32_t *)(APP_ENTRY_ADDRESS + 4));
    app_entry();
}
chenjun89 发表于 2023-6-10 22:30 来自手机 | 显示全部楼层
IAP跳转到APP就是更高程序运行地址
chenqianqian 发表于 2023-6-11 15:32 来自手机 | 显示全部楼层
跳转到APP后最好把在IAP中使能的外设在重新初始化一下。
dspmana 发表于 2023-6-13 21:20 | 显示全部楼层
跳转到boot后还能响应app的中断么
beacherblack 发表于 2023-6-13 21:23 | 显示全部楼层
当需要更新APP或执行特定功能时,可以通过Bootloader实现跳转到目标地址并运行对应的应用程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

307

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部