你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
小坦克 提问时间:2023-12-13 20:18 / 未解决

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的;

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

收藏 评论6 发布时间:2023-12-13 20:18

举报

6个回答
butterflyspring 回答时间:2023-12-14 10:48:30
看看be1c0101后面是不是有空闲帧导致。
或者用另一个STM32模拟个数据调试一下,看看哪里导致的接收对不上。
小坦克 回答时间:2023-12-14 13:34:02

空闲帧好像是没有的,感觉是上一帧数据还没有处理完,下一帧数据就把他覆盖了,导致我们拿到的就是两包叠加的数据;

xmshao 回答时间:2023-12-14 13:55:14

小坦克 发表于 2023-12-14 13:34
空闲帧好像是没有的,感觉是上一帧数据还没有处理完,下一帧数据就把他覆盖了,导致我们拿到的就是两包 ...

[md]这是程序逻辑问题。

之前的数据没处理完又来新的数据了发生覆盖,想办法接收处理弄快点;发送是否可以放慢点;

接收可以考虑基于DMA半传输完成和传输完成来实现。。

butterflyspring 回答时间:2023-12-14 14:18:45
小坦克 发表于 2023-12-14 13:34
[md]空闲帧好像是没有的,感觉是上一帧数据还没有处理完,下一帧数据就把他覆盖了,导致我们拿到的就是两包 ...

通常串口不会很快,如果怀疑中间没有idle帧,可以将接收的buffer和数量扩大,验证一下是不是都能收到。
小坦克 回答时间:2023-12-15 13:28:51

xmshao 发表于 2023-12-14 13:55
这是程序逻辑问题。</p>
<p>之前的数据没处理完又来新的数据了发生覆盖,想办法接收处理弄快点;发送是否可 ...

[md]已经解决,采用三个buf可接受数据,buf1接收到数据,然后使用buf2接收数据,接受完成在使用buf3接收,buf3接收完成再使用buf1接,这样循环接受下去;接收到的数据buf在任务里处理

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版