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

[复制链接]
1043|12
 楼主| 周半梅 发表于 2025-6-1 08:58 | 显示全部楼层 |阅读模式
用IDLE方式配了接收,一遇0x00程序就提前触发,数据老是不完整。
Clyde011 发表于 2025-6-1 09:03 | 显示全部楼层
看下是不是驱动那边截断了数据。
公羊子丹 发表于 2025-6-1 09:04 | 显示全部楼层
你是不是用字符串函数判断长度了?
 楼主| 周半梅 发表于 2025-6-1 09:05 | 显示全部楼层
用0x00作为有效数据的话要小心啊。
帛灿灿 发表于 2025-6-1 09:05 | 显示全部楼层
试试用长度定长DMA,不靠结束符。
童雨竹 发表于 2025-6-1 09:06 | 显示全部楼层
可以改成环形缓冲区方式。
万图 发表于 2025-6-1 09:07 | 显示全部楼层
0x00是合法数据的话只能自己设定帧长。
Wordsworth 发表于 2025-6-1 09:08 | 显示全部楼层
IDLE+DMA要自己管头尾很麻烦。
Bblythe 发表于 2025-6-1 09:08 | 显示全部楼层
我之前也被0x00卡了半天……
Pulitzer 发表于 2025-6-1 09:09 | 显示全部楼层
建议用协议层重新设计一下。
Uriah 发表于 2025-6-1 09:10 | 显示全部楼层
接收数据加个校验位会更安全。
江河千里 发表于 2025-6-7 16:23 | 显示全部楼层
在STM32G0上使用DMA+IDLE中断接收串口数据时,遇到0x00导致提前触发或数据不完整的问题,通常与DMA配置、串口接收逻辑或IDLE中断处理机制相关
三生万物 发表于 2025-6-7 17:11 | 显示全部楼层
若DMA配置为8位数据宽度,但串口接收的是16位数据(如某些特殊协议),会导致数据解析错误。
一秒落纱 发表于 2025-6-7 17:36 | 显示全部楼层
IDLE中断在串口接收线空闲(无数据传输)时触发,而非检测到特定字节(如0x00)
光辉梦境 发表于 2025-6-7 18:44 | 显示全部楼层
一般来说,如果DMA缓冲区未初始化为0,残留数据可能导致IDLE中断误判
冰春彩落下 发表于 2025-6-7 19:13 | 显示全部楼层
若DMA缓冲区未填满,且未正确处理IDLE中断,可能导致数据截断。
夜阑风雨 发表于 2025-6-7 20:33 | 显示全部楼层
可能是协议中0x00表示数据结束,需在软件中手动检测,而非依赖IDLE中断
暖了夏天蓝了海 发表于 2025-6-7 21:00 | 显示全部楼层
IDLE中断用于检测数据流结束,而非特定字节(如0x00)。配置DMA接收数据到缓冲区。启用IDLE中断,在中断服务函数中标记数据接收完成。在软件中手动检测缓冲区中的0x00(若协议需要)
codingtuzi 发表于 2025-6-7 21:06 | 显示全部楼层
这个只能是软件处理吧!
硬件没有办法识别出来吧
远山寻你 发表于 2025-6-7 22:58 | 显示全部楼层
IDLE中断用于检测数据流结束,而非特定字节(如0x00)。配置DMA接收数据到缓冲区。启用IDLE中断,在中断服务函数中标记数据接收完成。在软件中手动检测缓冲区中的0x00(若协议需要)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

167

主题

6128

帖子

1

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