用于Nucleo STM32L4R5开发板。我遇到了向量表不正确的问题,具体原因尚不明确。以下是详细说明: 该项目启用了若干外设和FreeRTOS。我使用了默认生成的main.c,并在默认任务函数中添加了一些调用。除了在默认任务函数中添加一些功能外,我完全没有修改生成的代码(如HAL等)。当添加“过多”代码时,通过STMCubeIDE编程设备(即调试/运行)时,设备会在HAL_Init()中卡住,此时HAL滴答定时器中断触发。我发现向量表中填充了指向系统内存(0x1fffxxxx)的指针,导致MCU在那里陷入无限循环。需要注意的是,二进制/映射编译输出中的向量表绝对正确,IRQ函数指针并未指向系统内存,而是指向了IRQ函数条目。 如果我注释掉默认任务函数中的部分代码,它突然又能正常工作。向量表会填充IRQ函数指针,MCU也不会在HAL_Init()中卡住。这一点通过使用板载ST-link调试器读取地址0x0处的向量表得到了确认。 此外,如果我使用一个会导致卡住的二进制文件,断开并重新连接ST-link USB线并进行硬复位后,MCU不会卡住。 最后我注意到,与我拥有的其他Nucleo开发板不同,如果给STM32L4R5 Nucleo开发板上电,MCU不会执行程序,直到按下复位按钮。 我不确定为什么会发生这些现象。无法使用调试器,因此我想找到解决向量表错误问题的原因,以便重新调试。如何解决呢? 输出二进制/映射文件一切正常。断开连接并硬复位后,不再卡住。
|