打印
[APM32F0]

Boot软件跳转APP软件函数极海APM32F072

[复制链接]
619|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
泡椒风爪|  楼主 | 2023-1-29 17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//定义一个函数类型的参数.这里iapfun是一个函数指针
typedef  void (*iapfun)(void);                               

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

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

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

}


/**
  \brief   Set Main Stack Pointer
  \details Assigns the given value to the Main Stack Pointer (MSP).
  \param [in]    topOfMainStack  Main Stack Pointer value to set
*/
__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
{
  register uint32_t __regMainStackPointer     __ASM("msp");
  __regMainStackPointer = topOfMainStack;
}/**


使用特权

评论回复
沙发
bartonalfred| | 2023-6-10 15:37 | 只看该作者
这个的源代码在哪里下载的              

使用特权

评论回复
板凳
averyleigh| | 2023-6-10 15:47 | 只看该作者
如何使用APM32F072的BootLoader和APP程序

使用特权

评论回复
地板
bestwell| | 2023-6-10 15:52 | 只看该作者
在嵌入式系统中,通常会使用Bootloader程序来完成系统的初始化和应用程序(APP)的加载。

使用特权

评论回复
5
jonas222| | 2023-6-10 16:07 | 只看该作者
当APP下载完成后,需要通过Bootloader跳转到APP的起始地址,以实现系统的正常运行。

使用特权

评论回复
6
eefas| | 2023-6-10 16:12 | 只看该作者
如何实现从bootloader到APP的跳转

使用特权

评论回复
7
beacherblack| | 2023-6-10 16:17 | 只看该作者
boot跳转到app怎么判断是否成功

使用特权

评论回复
8
ulystronglll| | 2023-6-10 16:24 | 只看该作者
先写bootloader程序用ST-LINK烧进去,然后就可以用串口烧写APP了

使用特权

评论回复
9
jtracy3| | 2023-6-10 16:32 | 只看该作者
在Bootloader程序中编写函数,实现跳转到APP程序入口地址

使用特权

评论回复
10
ulystronglll| | 2023-6-10 17:04 | 只看该作者
在嵌入式系统中,Bootloader是一个独立的程序,用于在系统启动时加载和运行其他应用程序

使用特权

评论回复
11
kkzz| | 2023-6-10 17:14 | 只看该作者
在使用Bootloader跳转APP时,需要确保Bootloader和APP之间的接口和数据传输方式一致,以保证程序能够顺利地运行。

使用特权

评论回复
12
adolphcocker| | 2023-6-10 17:22 | 只看该作者
boot flash分两个app区一个flash区怎么用

使用特权

评论回复
13
backlugin| | 2023-6-10 17:29 | 只看该作者
bootloar和app怎么一起烧进去

使用特权

评论回复
14
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();
}

使用特权

评论回复
15
chenjun89| | 2023-6-10 22:30 | 只看该作者
IAP跳转到APP就是更高程序运行地址

使用特权

评论回复
16
chenqianqian| | 2023-6-11 15:32 | 只看该作者
跳转到APP后最好把在IAP中使能的外设在重新初始化一下。

使用特权

评论回复
17
dspmana| | 2023-6-13 21:20 | 只看该作者
跳转到boot后还能响应app的中断么

使用特权

评论回复
18
beacherblack| | 2023-6-13 21:23 | 只看该作者
当需要更新APP或执行特定功能时,可以通过Bootloader实现跳转到目标地址并运行对应的应用程序。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

253

帖子

0

粉丝