打印

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

[复制链接]
3678|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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)。

使用特权

评论回复
5
春日负喧| | 2025-5-18 16:52 | 只看该作者
超时时间由波特率和采样间隔决定,通常为1个字符时间(如波特率115200时,1字符时间≈8.7μs)。

使用特权

评论回复
6
故意相遇| | 2025-5-18 18:59 | 只看该作者
局限性,空闲中断的触发间隔是硬件固定的,无法直接通过寄存器或配置动态调整。

使用特权

评论回复
7
将爱藏于深海| | 2025-5-18 20:00 | 只看该作者
DMA的辅助作用,DMA在空闲中断触发后,将接收缓冲区(如RX_BUF)中的数据搬运到内存,减少CPU干预。

使用特权

评论回复
8
公羊子丹| | 2025-5-24 09:05 | 只看该作者
串口空闲中断确实是靠一段时间没数据才触发的,不能主动设置间隔时间。

使用特权

评论回复
9
周半梅| | 2025-5-24 09:06 | 只看该作者
你这种场景可以在空闲中断基础上加个超时定时器,控制包的完整性。

使用特权

评论回复
10
帛灿灿| | 2025-5-24 09:06 | 只看该作者
DMA + 空闲中断只能被动触发,像你说的30ms间隔要靠应用层处理拼包。

使用特权

评论回复
11
童雨竹| | 2025-5-24 09:07 | 只看该作者
我一般会用一个定时器监测间隔,如果在30ms内有新数据就继续收,否则认为一包结束。

使用特权

评论回复
12
万图| | 2025-5-24 09:08 | 只看该作者
空闲中断只是识别“静默”,并不适合协议里“分段”这种逻辑,要配合软件逻辑拼接。

使用特权

评论回复
13
Wordsworth| | 2025-5-24 09:08 | 只看该作者
如果协议分包比较清晰,建议用帧头帧尾识别会更可靠,空闲中断只是辅助工具。

使用特权

评论回复
14
Bblythe| | 2025-5-24 09:09 | 只看该作者
实测确实有遇到数据被分成两段的情况,拼接逻辑很关键。

使用特权

评论回复
15
Pulitzer| | 2025-5-24 09:10 | 只看该作者
看你对实时性要求,如果不高也可以考虑先接收缓存,再统一处理。

使用特权

评论回复
16
Uriah| | 2025-5-24 09:11 | 只看该作者
DMA本身是持续接收的,关键在于空闲中断触发时要看当前DMA计数,别漏了。

使用特权

评论回复
17
Clyde011| | 2025-5-24 09:12 | 只看该作者
最靠谱的方式还是协议设计上定义好帧格式,别依赖间隔来判断包的结束。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

1447

帖子

2

粉丝