GD32F407串口空闲中断只能正确触发一次
ST的工程在ST芯片下串口空闲中断配合DMA使用,空闲中断能正确触发,同个代码下载到GD32后空闲中断只能首次正确触发一次,后续都是一帧数据的第一个字节就触发了,在第二次空闲中断开始去读DR寄存器时发现是首字节,尝试清除各种状态及重新初始化都不正常,不知道大家有没有遇到过 中断标志位未正确清除 检查串口硬件的连接是否牢固 更新软件或固件至最新版本 建议联系技术支持 串口硬件可能存在故障或连接问题,导致空闲中断无法被正确触发。 检查并清除中断标志位 串口的配置参数(如波特率、数据位、停止位等)可能不正确 MCU的软件或固件可能存在bug或缺 好想需要读一次就自动清除还是怎么回事,手册上有说 stormwind123 发表于 2024-12-26 11:21中断标志位未正确清除
哪个标志位呢?我尝试过清除串口的相关标志,也读取了DR寄存器,重新设置DMA缓存并重新使能了DMA,比较奇怪的是ST平台下运行正常,所以不知道GD的哪里有区别需要去修改 jcky001 发表于 2024-12-26 19:00
MCU的软件或固件可能存在bug或缺
在STM32下正常,GD的就不正常,所以不知道GD哪里有不一样的地方,代码可能性比较低,目前现象来说是串口空闲中断触发的时机不对,首字节就触发了 在使用GD32F407的串口空闲中断时,如果出现空闲中断只能正确触发一次的问题,通常是由于空闲中断标志位没有被正确清除导致的。 在某些MCU中,读取数据寄存器(DR)的动作可能会自动清除空闲中断标志位。 中断服务函数逻辑问题 合理设置接收缓存大小,确保能够容纳足够的接收数据。同时,在中断服务程序中及时处理接收的数据,避免缓存溢出。 硬件连接问题也可能导致空闲中断无法正确触发 如果使用DMA进行数据接收,确保DMA配置正确,并且在空闲中断中正确处理DMA接收的数据。 如果数据处理逻辑不正确,可能会导致空闲中断在处理完一帧数据后无法正确重新开启。 接触不良或者线路干扰,可能会影响空闲中断的正常触发。