基于MM32F3277单片机上,利用UART1对MCU进行IAP升级。
问题描述:在主机给MCU进行升级时,当boot loader接收完固件跳转到APP中,程序正常运行,串口数据正常打印,但是无法进入中断。重新MCU启动后,正常进入中断,也就是从bootloader直接跳转过去正常得,所以定位原因在bootloader中。
跳转之前也已经关闭全局中断__set_PRIMASK(1);,跳转后,app一开始在SystemInit()函数中使能全局中断__set_PRIMASK(0);。由于不进行固件接收再跳转,是正常得,所以进一步定位是接收固件得问题。
最终排查出,MCU接收固件是在UART1中断服务函数中处理的,表明在跳转之前中断关闭了但是还在执行中断中的程序。所以最终在接收完成时设置标志位,在中断外main函数中进行跳转解决该问题。
————————————————
|