本帖最后由 st316 于 2019-4-26 17:59 编辑
Hello,我最近碰到一个非常奇怪的问题,实在没有办法,所以来这里向大家请教。芯片是STM32F101VD。
我有一个应用程序,可以简化看作实现了以下两个功能:
1. LED 周期性闪烁,示意应用程序在跑。
2. 使用 remap 后的USART1(默认是 PA9 和 PA10,remap之后,使用了PB6 和 PB7)收发数据。串口仅使能了 RXNE 中断。
如果不重映射中断向量表,这个应用程序则可以正常工作:LED 周期性闪烁,串口也能正常收发数据。
但是为了实现 IAP 在线升级,我在0x8000000处烧录了一个 bootloader, 所以,上述的应用程序需要进行中断向量表的重映射。(被映射到了 0x8008000处)。
这时,奇怪的事情发生了,现象如下:
1. LED 周期性闪烁,由此可以看出,已经从 bootloader 成功地跳到了应用程序。
2. PC接收不到任何串口发出来的数据。通过仿真我发现,串口可以接收到 PC 发给它的数据,但是串口发送出来的数据,PC收不到。
只要将中断向量的重映射去掉,这个应用程序就能正常工作了。这太奇怪了!
请求大家指点迷津,谢谢!
另外,附上我是如何重映射中断向量表的,看起来没问题啊。
在SystemInit函数之后:
/* Set the Vector Table base address at 0x08008000 */
NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x8000 );
在MDK中配置如下:
|