用DMA收串口数据,遇上0x00就断了咋整
用IDLE方式配了接收,一遇0x00程序就提前触发,数据老是不完整。看下是不是驱动那边截断了数据。 你是不是用字符串函数判断长度了? 用0x00作为有效数据的话要小心啊。 试试用长度定长DMA,不靠结束符。 可以改成环形缓冲区方式。 0x00是合法数据的话只能自己设定帧长。 IDLE+DMA要自己管头尾很麻烦。 我之前也被0x00卡了半天…… 建议用协议层重新设计一下。 接收数据加个校验位会更安全。 在STM32G0上使用DMA+IDLE中断接收串口数据时,遇到0x00导致提前触发或数据不完整的问题,通常与DMA配置、串口接收逻辑或IDLE中断处理机制相关 若DMA配置为8位数据宽度,但串口接收的是16位数据(如某些特殊协议),会导致数据解析错误。 IDLE中断在串口接收线空闲(无数据传输)时触发,而非检测到特定字节(如0x00) 一般来说,如果DMA缓冲区未初始化为0,残留数据可能导致IDLE中断误判 若DMA缓冲区未填满,且未正确处理IDLE中断,可能导致数据截断。 可能是协议中0x00表示数据结束,需在软件中手动检测,而非依赖IDLE中断 IDLE中断用于检测数据流结束,而非特定字节(如0x00)。配置DMA接收数据到缓冲区。启用IDLE中断,在中断服务函数中标记数据接收完成。在软件中手动检测缓冲区中的0x00(若协议需要) 这个只能是软件处理吧!
硬件没有办法识别出来吧 IDLE中断用于检测数据流结束,而非特定字节(如0x00)。配置DMA接收数据到缓冲区。启用IDLE中断,在中断服务函数中标记数据接收完成。在软件中手动检测缓冲区中的0x00(若协议需要)
页:
[1]