打印
[STM32G0]

用DMA收串口数据,遇上0x00就断了咋整

[复制链接]
328|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
周半梅|  楼主 | 2025-6-1 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用IDLE方式配了接收,一遇0x00程序就提前触发,数据老是不完整。

使用特权

评论回复
沙发
Clyde011| | 2025-6-1 09:03 | 只看该作者
看下是不是驱动那边截断了数据。

使用特权

评论回复
板凳
公羊子丹| | 2025-6-1 09:04 | 只看该作者
你是不是用字符串函数判断长度了?

使用特权

评论回复
地板
周半梅|  楼主 | 2025-6-1 09:05 | 只看该作者
用0x00作为有效数据的话要小心啊。

使用特权

评论回复
5
帛灿灿| | 2025-6-1 09:05 | 只看该作者
试试用长度定长DMA,不靠结束符。

使用特权

评论回复
6
童雨竹| | 2025-6-1 09:06 | 只看该作者
可以改成环形缓冲区方式。

使用特权

评论回复
7
万图| | 2025-6-1 09:07 | 只看该作者
0x00是合法数据的话只能自己设定帧长。

使用特权

评论回复
8
Wordsworth| | 2025-6-1 09:08 | 只看该作者
IDLE+DMA要自己管头尾很麻烦。

使用特权

评论回复
9
Bblythe| | 2025-6-1 09:08 | 只看该作者
我之前也被0x00卡了半天……

使用特权

评论回复
10
Pulitzer| | 2025-6-1 09:09 | 只看该作者
建议用协议层重新设计一下。

使用特权

评论回复
11
Uriah| | 2025-6-1 09:10 | 只看该作者
接收数据加个校验位会更安全。

使用特权

评论回复
12
江河千里| | 2025-6-7 16:23 | 只看该作者
在STM32G0上使用DMA+IDLE中断接收串口数据时,遇到0x00导致提前触发或数据不完整的问题,通常与DMA配置、串口接收逻辑或IDLE中断处理机制相关

使用特权

评论回复
13
三生万物| | 2025-6-7 17:11 | 只看该作者
若DMA配置为8位数据宽度,但串口接收的是16位数据(如某些特殊协议),会导致数据解析错误。

使用特权

评论回复
14
一秒落纱| | 2025-6-7 17:36 | 只看该作者
IDLE中断在串口接收线空闲(无数据传输)时触发,而非检测到特定字节(如0x00)

使用特权

评论回复
15
光辉梦境| | 2025-6-7 18:44 | 只看该作者
一般来说,如果DMA缓冲区未初始化为0,残留数据可能导致IDLE中断误判

使用特权

评论回复
16
冰春彩落下| | 2025-6-7 19:13 | 只看该作者
若DMA缓冲区未填满,且未正确处理IDLE中断,可能导致数据截断。

使用特权

评论回复
17
夜阑风雨| | 2025-6-7 20:33 | 只看该作者
可能是协议中0x00表示数据结束,需在软件中手动检测,而非依赖IDLE中断

使用特权

评论回复
18
IDLE中断用于检测数据流结束,而非特定字节(如0x00)。配置DMA接收数据到缓冲区。启用IDLE中断,在中断服务函数中标记数据接收完成。在软件中手动检测缓冲区中的0x00(若协议需要)

使用特权

评论回复
19
codingtuzi| | 2025-6-7 21:06 | 只看该作者
这个只能是软件处理吧!
硬件没有办法识别出来吧

使用特权

评论回复
20
远山寻你| | 2025-6-7 22:58 | 只看该作者
IDLE中断用于检测数据流结束,而非特定字节(如0x00)。配置DMA接收数据到缓冲区。启用IDLE中断,在中断服务函数中标记数据接收完成。在软件中手动检测缓冲区中的0x00(若协议需要)

使用特权

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

本版积分规则

95

主题

4989

帖子

1

粉丝