STM32 IAP工程和APP工程中两份各自中断向量表的解释

引述网友关于STM32 IAP工程和APP工程中两份各自中断向量表的解释:

1、开机——进入0X08000004固定地址——进入IAP工程的中断向量表——main——跳转APP工程的代码位置(包含中断向量表)

2、APP工程中断向量表——main——通过SCB->VTOR改变MCU的中断向量表位置,此时IAP工程中的中断向量表已经被重映射,因此被这次运行抛弃了不会再执行了,要再执行需要复位让SCB->VTOR重新指回默认位置

3、APP工程中产生中断时依旧会到0X08000004固定地址(硬件决定无法修改),但是会立即跳到APP工程中的中断向量表位置。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32IAP(In-Application Programming)是一种通过软件在应用程序对MCU进行编程的方式。在IAP过程,我们需要跳转到APP中断向量表,以便程序能够正确地运行。下面是一个简单的流程和示例代码: 1. 在APP的代码定义中断向量表: ```c /* APP中断向量表 */ __attribute__((section(".isr_vector"))) const uint32_t app_vector_table[] = { /* Cortex-M3 core exceptions */ (uint32_t)&_estack, /* Stack pointer */ (uint32_t)&Reset_Handler,/* Reset handler */ (uint32_t)&NMI_Handler, /* NMI handler */ (uint32_t)&HardFault_Handler,/* Hard Fault handler */ ... /* Other interrupts */ (uint32_t)&TIMER1_IRQHandler,/* Timer1 interrupt handler */ (uint32_t)&TIMER2_IRQHandler,/* Timer2 interrupt handler */ ... } ``` 2. 在IAP的代码定义跳转函数并加载APP中断向量表: ```c /* 跳转到APP的函数 */ void jump_to_app(void) { uint32_t app_start_address = APP_START_ADDRESS; // APP起始地址 uint32_t *p_app_vector_table = (uint32_t *)app_start_address; /* 关闭所有断 */ __disable_irq(); /* 更新中断向量表 */ SCB->VTOR = app_start_address; /* 跳转到APP的Reset_Handler */ void (*p_app_reset_handler)(void) = (void (*)(void))(p_app_vector_table[1]); p_app_reset_handler(); } int main(void) { /* 判断是否需要跳转到APP */ if (need_jump_to_app()) { jump_to_app(); } ... } ``` 需要注意的是,`APP_START_ADDRESS`是APP的起始地址,需要根据实际情况进行修改。`need_jump_to_app()`函数可以根据外部条件(如按键按下)判断是否需要跳转到APP。 以上是一个简单的示例代码,实际应用可能需要根据具体情况进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值