Carmen7 发表于 2025-4-18 13:32

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

请问,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

最靠谱的方式还是协议设计上定义好帧格式,别依赖间隔来判断包的结束。
页: [1]
查看完整版本: DMA+串口空闲中断接收数据,是不是不能改接收时间间隔?