DMA+串口空闲中断接收数据,是不是不能改接收时间间隔?

[复制链接]
7569|19
 楼主| Carmen7 发表于 2025-4-18 13:32 | 显示全部楼层 |阅读模式
请问,DMA+串口空闲中断接收数据,是不是不能改接收时间间隔?也就是说,比如主机给从机发送AT+CMD,等了30ms发了一个OK,我想要这两截数据拼成一包做数据解析,这种用DMA+串口空闲中断接收数据是不是接收不全啊?
yangjiaxu 发表于 2025-4-18 13:33 | 显示全部楼层

DMA+串口空闲中断接收数据,是不是不能改接收时间间隔?

对的,我觉得你可以用定时器+串口中断能实现调节接收时间间隔,但你用DMA+串口空闲中断确实不能改变接收每个字节的时间间隔,如果时间间隔不一样,会导致误触发接收一包的问题
llloookkk12 发表于 2025-4-26 13:34 | 显示全部楼层

DMA+串口空闲中断接收数据,是不是不能改接收时间间隔?

可以用DMA接收不定长数据。瑞用环形缓存处理接收的数据,就可以了。
风凉 发表于 2025-5-18 16:21 | 显示全部楼层
空闲中断触发条件,串口接收完一帧数据后,若在设定的超时时间(如UART的IDLE线检测)内未收到新数据,硬件会触发空闲中断(USART_IDLE)。
春日负喧 发表于 2025-5-18 16:52 | 显示全部楼层
超时时间由波特率和采样间隔决定,通常为1个字符时间(如波特率115200时,1字符时间≈8.7μs)。
故意相遇 发表于 2025-5-18 18:59 | 显示全部楼层
局限性,空闲中断的触发间隔是硬件固定的,无法直接通过寄存器或配置动态调整。
将爱藏于深海 发表于 2025-5-18 20:00 | 显示全部楼层
DMA的辅助作用,DMA在空闲中断触发后,将接收缓冲区(如RX_BUF)中的数据搬运到内存,减少CPU干预。
公羊子丹 发表于 2025-5-24 09:05 | 显示全部楼层
串口空闲中断确实是靠一段时间没数据才触发的,不能主动设置间隔时间。
周半梅 发表于 2025-5-24 09:06 | 显示全部楼层
你这种场景可以在空闲中断基础上加个超时定时器,控制包的完整性。
帛灿灿 发表于 2025-5-24 09:06 | 显示全部楼层
DMA + 空闲中断只能被动触发,像你说的30ms间隔要靠应用层处理拼包。
童雨竹 发表于 2025-5-24 09:07 | 显示全部楼层
我一般会用一个定时器监测间隔,如果在30ms内有新数据就继续收,否则认为一包结束。
万图 发表于 2025-5-24 09:08 | 显示全部楼层
空闲中断只是识别“静默”,并不适合协议里“分段”这种逻辑,要配合软件逻辑拼接。
Wordsworth 发表于 2025-5-24 09:08 | 显示全部楼层
如果协议分包比较清晰,建议用帧头帧尾识别会更可靠,空闲中断只是辅助工具。
Bblythe 发表于 2025-5-24 09:09 | 显示全部楼层
实测确实有遇到数据被分成两段的情况,拼接逻辑很关键。
Pulitzer 发表于 2025-5-24 09:10 | 显示全部楼层
看你对实时性要求,如果不高也可以考虑先接收缓存,再统一处理。
Uriah 发表于 2025-5-24 09:11 | 显示全部楼层
DMA本身是持续接收的,关键在于空闲中断触发时要看当前DMA计数,别漏了。
Clyde011 发表于 2025-5-24 09:12 | 显示全部楼层
最靠谱的方式还是协议设计上定义好帧格式,别依赖间隔来判断包的结束。
4y1b3 发表于 2025-5-31 23:48 | 显示全部楼层
用结束符作为包界定依据,而不是靠空闲中断判断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

1489

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部