硬汉嵌入式论坛

 找回密码
 立即注册
查看: 963|回复: 2
收起左侧

[有问必答] 串口DMA+空闲中断如何判断接收完一组数据?

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2025-1-27 17:21:40 | 显示全部楼层 |阅读模式
在学习使用环形缓冲区结合串口DMA+空闲中断接收数据的时候发现,比如我的环形缓冲区大小是10,那么在接收到一个数据的时候,此时触发的是串口的空闲中断,如果再接收4个数据,那么会触发一次DMA半满中断和一次串口空闲中断,再接收5个数据后只触发了一次DMA全满中断,不触发空闲中断。我是判断触发空闲中断的时候就认为接收完一组数据了,但是如果接受完一组数据后刚好触发了DMA全满中断,此时不会触发空闲中断,就丢失一次数据的处理,不知道怎么才能解决这个问题啊?
屏幕截图 2025-01-27 171850.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-1 05:22:29 | 显示全部楼层
空闲中断不适合作为帧结束,只能作为本次数据结束标识,帧结束还是需要做协议判断才合理。

触发空闲后,终止本次DMA接收,下次使用要重新启动DMA+空闲。

新的HAL库程序里面已经封装了对应的API,直接调用即可。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2025-2-18 09:59:52 | 显示全部楼层
我今天也碰到了这个问题,找了一下原因。(在既全满,也空闲时)在触发全满中断时,其实也触发了一次空闲中断,在UART的中断内部对数据长度进行了一次判定,其中有一条约束条件就是需要DMA当前接收的数据小于DMA设置的值,才能进行空闲回调。所以才导致全满时没有触发空闲回调
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:34 , Processed in 0.041239 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表