HC32F460中断使能失能相关疑问
因产品性能需求,在程序中需要调用NVIC中断失能和使能函数对UARTRX、ERR、TXC三个函数的中断失能和使能。在测试时,功能是没有问题的,失能后收发功能暂停,使能后恢复。但是出现了一个很奇怪的现象。在失能UART中断后,如果此时有数据发送到单片机,无论数据长度多少,在使能中断后,就无法接收到新数据也发布出去。
利用LED灯调试,LED_R在接收到一个字节的数据后触发接收中断翻转电平。失能后电脑发送一串四字节的数据,再使能后,LED_R常亮,按照正常功能,收到奇数字节的数据会是亮-灭-亮,收到偶数字节会是亮-灭-亮-灭。所以正常情况下LED_R是出于熄灭状态,但此时是LED_R常亮,此为异常。利用外部按键来发送数据,按一次发送四个字节的数据,并且激活发送完毕中断,在中断内翻转LED_G电平,使能后无法发送数据。
第二个测试是用OLED显示屏显示UART溢出等标志位,显示是在失能后收到数据溢出标志位位1,在使能后有ERR中断清零。也就是说,重新使能后UART并没有溢出等状态。但是结果是串口功能就用不了了。
又没有大佬遇见过这种情况,怎么解决的?谢谢! 可以试下先读取接收BUF寄存器里的数据,在清错误中断,之后重新使能 需要技术支持可以加我微信15001734656 数据接收寄存器应该是存在过载OverRun错误,此时需要清除标志位,并且把数据读取出来,否则下次来了新的数据,还是会进入错误中断。最好在错误中断里,清掉错误后,都读取一下数据寄存器。
淘宝店铺:打开淘宝,搜索“白泽开发板”
各类国产品牌MCU评估板(小华、GD,持续更新中。。。。。。),以及USB转UART_I2C_SPI串行口调试模块:
【淘宝】https://m.tb.cn/h.5NPZFJZ?tk=BViYWUUmKkB CZ3457 「华大开发板 HC32F460PETB 核心板 调试研发」
点击链接直接打开 或者 淘宝搜索直接打开
【淘宝】https://m.tb.cn/h.5m2udJO?tk=10MSWUUnOvW CZ3457 「USB转UART_I2C_SPI串行口模块」
点击链接直接打开 或者 淘宝搜索直接打开 检查UART的寄存器 把代码贴上来看看 尝试简化你的代码和配置,只保留最基本的UART中断功能,看看问题是否仍然存在。
检查你的中断优先级设置 在全局禁用UART中断后,再使能之前,有没有其他的中断正在处理。如果有,可能会导致一些问题。 如果使用了缓冲区来存储接收到的数据,确保在使能UART中断之前,缓冲区是空的或被正确地重置。
清除中断标志位
如果可能的话,尝试在失能和使能UART中断之间对MCU进行软件复位,以确保所有相关的寄存器和状态都被重置。
在失能UART中断后,如果接收到数据,重新使能中断后,系统无法正常接收或发送数据。如果中断被失能,缓存中的数据不会被读取和处理,这可能会导致缓存溢出。 无论数据长度多少,在使能中断后,就无法接收到新数据也发布出去 在失能 UART 中断后,可能没有清除某些状态寄存器或标志位,导致在重新使能中断时,UART 仍然认为存在错误或溢出 大概率是中断的问题,中断有个ORE的错误需要处理 从官网找例程,从开发板找例程 使能中断后,虽然 UART 模块的中断被重新打开,但接收缓冲区中可能残留“无效”或“脏数据”,导致 RX 中断处于不触发或误触发状态,UART 处于“卡死”状态。
页:
[1]