打印

STM32 带IAP程序中断向量的问题??

[复制链接]
4855|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jgphu|  楼主 | 2012-2-6 15:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问一下大家,  现在项目程序要做一个IAP. 用来升级用.

我的BOOT部分程序  中断向量起始为0X8000000
我的AP部分程序     中断向量起始为0X8010000

两部分中断的向量影射不一样,会不会有问题.


BOOT部分程序没有用到外设中断.
在我的AP部分程序, 我只要开启Bsp_NVICInit(); 开启嵌套中断设置, 程序就不能正确往下运行.



void Bsp_NVICInit(void)
{
  NVIC_InitTypeDef   NVIC_InitStructure;
  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  /*
  NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);*/
  
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  /* Enable and set EXTI11 Interrupt to the lowest priority */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
沙发
jgphu|  楼主 | 2012-2-6 15:18 | 只看该作者
我在线访真一下, 发现调用NVIC_Init(&NVIC_InitStructure);这个函数时跳到0x800000-0x00fff段执行了

使用特权

评论回复
板凳
jgphu|  楼主 | 2012-2-6 15:20 | 只看该作者
不知道要不要调用 NVIC_SetVectorTable() 重新设定一下这个向量表

使用特权

评论回复
地板
jgphu|  楼主 | 2012-2-6 15:31 | 只看该作者
在AP部分代码里NVIC_SetVectorTable()之前 增加一条NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);不会跳到0x800000-0x00fff段执行了

使用特权

评论回复
5
jgphu|  楼主 | 2012-2-6 15:31 | 只看该作者
解决了

使用特权

评论回复
6
香水城| | 2012-2-6 15:38 | 只看该作者
LZ思路敏捷,刚好20分钟就解决了一个问题,不错! :handshake

使用特权

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

本版积分规则

7

主题

642

帖子

2

粉丝