打印
[STM32H7]

STM32H7,USART,DMA,接收数据包异常,一包接收的数据出现两包发送的内容?

[复制链接]
369|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
内政奇才|  楼主 | 2023-12-14 09:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1、函数:

HAL_UARTEx_ReceiveToIdle_DMA(&huart1,usart1_dma_rx.RX_Data,USART_DMA_RX_LEN_MAX); __HAL_UART_DISABLE_IT(&huart1, DMA_IT_HT);

2、发送数据包1:be2803036de1000000000000000001000000000000000200000000000000030000000000000082ed

发送数据包2:be1c010146020100000100015000b400141e011e1e281408000020ed

发送间隔50ms以内;

3、接收到的数据包:be1c01016de1000000000000000001000000000000000200000000000000030000000000000082ed

前4个字节:be1c0101属于发送数据包1的;

剩余其他字节:属于发送数据包2的;

问题困扰很久了,请大家帮忙处理下,急急急!!!!!!!!!!

使用特权

评论回复
沙发
香水城| | 2023-12-14 14:35 | 只看该作者
这个应该是接收处理方面的问题。
接收处理代码尽量简洁点;基于DMA接收的话可以考虑分别基于半传输和完成传输中断两次接收处理。

看你好像开启了空闲中断,基于空闲中断来处理,甚至可以可以考虑开辟2个缓冲区,切换着来。

使用特权

评论回复
板凳
两只袜子| | 2023-12-14 15:40 | 只看该作者
USART和DMA的初始化设置是否正确的,特别是波特率、数据位、停止位和奇偶校验等设置。

使用特权

评论回复
地板
jcky001| | 2023-12-14 15:40 | 只看该作者
检查DMA的循环模式是否启用

使用特权

评论回复
5
cr315| | 2023-12-14 15:41 | 只看该作者
检查USART和DMA的中断处理函数

使用特权

评论回复
6
elephant00| | 2023-12-14 15:41 | 只看该作者
如果发送方和接收方之间没有明确的数据包界定符(例如特定的起始和结束字符),可能会出现数据包粘连的情况。

使用特权

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

本版积分规则

163

主题

1003

帖子

0

粉丝