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

[复制链接]
5574|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段执行了
 楼主| jgphu 发表于 2012-2-6 15:31 | 显示全部楼层
解决了
香水城 发表于 2012-2-6 15:38 | 显示全部楼层
LZ思路敏捷,刚好20分钟就解决了一个问题,不错! :handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

642

帖子

2

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