因产品性能需求,在程序中需要调用NVIC中断失能和使能函数对UARTRX、ERR、TXC三个函数的中断失能和使能。在测试时,功能是没有问题的,失能后收发功能暂停,使能后恢复。
但是出现了一个很奇怪的现象。在失能UART中断后,如果此时有数据发送到单片机,无论数据长度多少,在使能中断后,就无法接收到新数据也发布出去。
利用LED灯调试,LED_R在接收到一个字节的数据后触发接收中断翻转电平。失能后电脑发送一串四字节的数据,再使能后,LED_R常亮,按照正常功能,收到奇数字节的数据会是亮-灭-亮,收到偶数字节会是亮-灭-亮-灭。所以正常情况下LED_R是出于熄灭状态,但此时是LED_R常亮,此为异常。利用外部按键来发送数据,按一次发送四个字节的数据,并且激活发送完毕中断,在中断内翻转LED_G电平,使能后无法发送数据。
第二个测试是用OLED显示屏显示UART溢出等标志位,显示是在失能后收到数据溢出标志位位1,在使能后有ERR中断清零。也就是说,重新使能后UART并没有溢出等状态。但是结果是串口功能就用不了了。
又没有大佬遇见过这种情况,怎么解决的?谢谢! |