硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2542|回复: 6
收起左侧

[UART] UART DMA RX模式接收数据被分包

[复制链接]

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2019-11-21 16:34:18 | 显示全部楼层 |阅读模式
1,HAL_UART_Receive_DMA 设置DMA 模式接收数据的长度是 67
2,开始每次触发接收完成回调的时候,通过__HAL_DMA_GET_COUNTER 去读取剩余未传输完成的数据,都为0
3,多次拔插通讯线后 再次进入DMA_IT_TC 的时候 __HAL_DMA_GET_COUNTER 读取到还有数据未传输完成,这个数据就被拆包了,这个是什么原因导致的呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2019-11-21 16:54:51 | 显示全部楼层

串口线不支持热插拔,容易造成芯片损坏,之前做实验,实验室几个电脑都被这种方法把串口搞坏了。
具体到你这个问题,没有深究过。
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2019-11-21 17:34:45 | 显示全部楼层
eric2013 发表于 2019-11-21 16:54
串口线不支持热插拔,容易造成芯片损坏,之前做实验,实验室几个电脑都被这种方法把串口搞坏了。
具体到 ...

继续参看手册 6.jpg
通过读取寄存器确实发现是CPU本神对数据进行了 分包
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2019-11-21 17:38:42 | 显示全部楼层
王海靖 发表于 2019-11-21 17:34
继续参看手册
通过读取寄存器确实发现是CPU本神对数据进行了 分包

这个问题的话,如果收发缓冲区数据宽度一样的话,可以关闭DMA FIFO
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2019-11-21 17:43:14 | 显示全部楼层
eric2013 发表于 2019-11-21 17:38
这个问题的话,如果收发缓冲区数据宽度一样的话,可以关闭DMA FIFO
  1. #elif defined(SOC_SERIES_STM32H7)
  2.     DMA_Handle->Init.FIFOMode            = DMA_FIFOMODE_DISABLE;
  3.     DMA_Handle->Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
  4.     DMA_Handle->Init.MemBurst            = DMA_MBURST_SINGLE;
  5.     DMA_Handle->Init.PeriphBurst         = DMA_PBURST_SINGLE;
复制代码

确实没有使用FIFO
回复

使用道具 举报

5

主题

95

回帖

110

积分

初级会员

积分
110
发表于 2019-11-21 19:26:20 | 显示全部楼层

我串口用DMA 接收数据,但是接收到的数据都是0,能正常进DMA接收完成中断,不知道问题出在哪里了
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
 楼主| 发表于 2019-11-22 08:39:31 | 显示全部楼层
xiaomeng 发表于 2019-11-21 19:26
我串口用DMA 接收数据,但是接收到的数据都是0,能正常进DMA接收完成中断,不知道问题出在哪里了

你接收数据保存在哪个RAM ? CACHE 什么策略? 读的时候刷CACAHE了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 00:43 , Processed in 0.242702 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表