硬汉嵌入式论坛

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

[UART] USART DMA 接收数据异常

[复制链接]

5

主题

95

回帖

110

积分

初级会员

积分
110
发表于 2019-11-21 19:19:48 | 显示全部楼层 |阅读模式
串口通过DMA接收数据,数据接收完毕能够正常进入DMA接收完成中断,但是读取数据都为0,有没有遇到相同问题的。串口通过DMA发送数据,一切正常。



中断服务函数

中断服务函数

接收完成后,显示接收的内容

接收完成后,显示接收的内容

串口打印结果

串口打印结果
回复

使用道具 举报

5

主题

95

回帖

110

积分

初级会员

积分
110
 楼主| 发表于 2019-11-21 19:24:17 | 显示全部楼层
debug的时候USARTX->RDR寄存器的值与我通过串口调试助手发送的一样;
而且串口每接收到一个字节,DMA的NDTR寄存器值减1
但是读取的数据就是不对,一直为0
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2019-11-21 19:32:07 | 显示全部楼层
【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://www.armbbs.cn/forum.php?m ... 6271&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

5

主题

95

回帖

110

积分

初级会员

积分
110
 楼主| 发表于 2019-11-21 20:01:53 | 显示全部楼层
eric2013 发表于 2019-11-21 19:32
【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://w ...

多谢硬汉大哥,问题解决了
我现在对cache的理解还是一片空白,现在经常在这块出问题,需要补充补充这块知识了
回复

使用道具 举报

0

主题

68

回帖

68

积分

初级会员

积分
68
发表于 2021-8-20 08:53:37 | 显示全部楼层
cache不是都在cortex核中吗,  DMA怎么会有影响,
我也遇到这种情况了,  
串口收到的数据都对, DMA却是全0
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2021-8-20 08:59:18 | 显示全部楼层
wander 发表于 2021-8-20 08:53
cache不是都在cortex核中吗,  DMA怎么会有影响,
我也遇到这种情况了,  
串口收到的数据都对, DMA却 ...

开启Cache的RAM,CPU和DMA等多主访问的情况,会有数据一致性问题。
回复

使用道具 举报

3

主题

38

回帖

47

积分

新手上路

积分
47
发表于 2021-8-20 14:52:55 | 显示全部楼层
wander 发表于 2021-8-20 08:53
cache不是都在cortex核中吗,  DMA怎么会有影响,
我也遇到这种情况了,  
串口收到的数据都对, DMA却 ...

你可以试试在读取数据之前加上
SCB_InvalidateDCache_by_Addr((uint32_t *)data, data.length);这个函数,data就是你从DMA接收的数据。运行这个函数后 在去读
回复

使用道具 举报

0

主题

68

回帖

68

积分

初级会员

积分
68
发表于 2021-8-20 16:39:45 | 显示全部楼层
我现在直接用SRAM1 , 不开CACHE,不开缓冲,  也能解决,  将就着用吧
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-11-29 22:53:22 | 显示全部楼层
eric2013 发表于 2019-11-21 19:32
【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://w ...

您好,h743 caha没有开启,在中断向量没偏移的时候,串口空闲中断进行DMA读取,可以正确读到数据,。当中断向量进行偏移后(偏移0x20000),DMA收到的数据全为0.但是能争取获取到DMAfifo中数据长度。
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-11-30 08:54:10 | 显示全部楼层
wander 发表于 2021-8-20 08:53
cache不是都在cortex核中吗,  DMA怎么会有影响,
我也遇到这种情况了,  
串口收到的数据都对, DMA却 ...

M7内核的芯片如果开启了cache,需要用户配置内存的使用方式。同时DMA的缓冲区在使用的时候还要注意同步的问题。你要看看硬汉H7文档 cache部分。不然M7内核芯片用起来BUG很多的
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-11-30 08:55:36 | 显示全部楼层
你这HAL库用的...ST不是提供了callback函数吗?你咋还知道在DMA中断里面自己处理了。正常使用ST提供的相关callback函数就可以了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 17:45 , Processed in 0.204841 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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