硬汉嵌入式论坛

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

[DMA] DMA收发,发送一帧数据后就会死机问题

[复制链接]

4

主题

19

回帖

31

积分

新手上路

积分
31
发表于 2021-8-30 16:57:16 | 显示全部楼层 |阅读模式
最近在调试H743的DMA收发,目的是实现DMA模式接收和DMA模式的发送,单向都已经调通,发现DMA发送部分一旦开启对应通道的中断,就会触发DMA发送一帧数据后主程序就不运行,全部卡死的问题,但是加入SCB_CleanInvalidateDCache();函数后就会发送4-6帧之后才卡死的现象,有大佬遇到过这种问题吗?能否解答下呢?
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-8-30 17:21:06 | 显示全部楼层
。。。。。自问自答吧,通过keil仿真发现死在了发送完成标志检测函数那里,为了确保数据准确性,写了一个死循环检测函数,开启中断后,就会死在这个函数。目前还没想明白为什么会死到这个死循环里,正常触发发送完成标志后就会置位然后正常运行,
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-8-30 17:24:05 | 显示全部楼层
。。。很尴尬的来埋自己挖的坑,为了保证数据准确性,写了一个检测发送完成标志的死循环检测函数,然后开启中断后就会死在这个死循环里,目前没想明白原因。那么开中断后,在发送完成回调函数里去清标志位预计就会实现DMA收发,不过我还没测,只是猜想
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2021-8-31 08:45:47 | 显示全部楼层
你这个收发跟数据一致性没什么关系,Cache不会影响到你的DMA运行不正常。

参考我的试试,我的收发没问题。

基于STM32H7的CMSIS-Driver驱动实现串口DMA和串口中断两种方式案例【已发布】
http://www.armbbs.cn/forum.php?m ... 9211&fromuid=58
(出处: 硬汉嵌入式论坛)

【STM32H743实验例程】实验14:STM32H743串口DMA方式收发,DMA方式问题比较多,要注意数据一致性
http://www.armbbs.cn/forum.php?m ... 6271&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-9-1 13:53:07 | 显示全部楼层
eric2013 发表于 2021-8-31 08:45
你这个收发跟数据一致性没什么关系,Cache不会影响到你的DMA运行不正常。

参考我的试试,我的收发没问题 ...

好的,谢谢,那个问题已经解决了,但随之而来的就是第二个更头疼的问题,我目前想做一个DMA接收和DMA发送,都是存入缓存区和取出缓存区的操作,但随着数据量的提高和高频率的收发大概,发现DMA发送通道会偶尔发出错误数据,大佬有没有什么能保证数据准确性的办法呢?
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-9-1 16:38:08 | 显示全部楼层
你是开了cache和MPU?串口DMA发送和接收很正常啊?
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-9-1 16:54:24 | 显示全部楼层
旮旯旭 发表于 2021-9-1 16:38
你是开了cache和MPU?串口DMA发送和接收很正常啊?

DMA接收很正常,DMA的发送偶尔会数据出错,比如发一个包20个字节,四五个字节出错的样子
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-9-1 18:50:01 | 显示全部楼层
497356044 发表于 2021-9-1 16:54
DMA接收很正常,DMA的发送偶尔会数据出错,比如发一个包20个字节,四五个字节出错的样子

我回去试试看,不过我在 F7 上不开Dcache和MPU是很正常的,H7不开 D cache和MPU应该也可以。
MPU用的不熟悉,晚上回去看看开启cache和MPU和不开现象是啥
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-9-2 15:42:22 | 显示全部楼层
好的,我又来填自己挖的坑了。经过大量实测,发现DMA通道本身并未问题,数据出错是封装函数的问题。DMA通道还是很可靠的,不过要记得在中断或者回调函数做标志位清零,不然DMA发送容易只发一帧的。
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-9-2 17:06:08 | 显示全部楼层
497356044 发表于 2021-9-2 15:42
好的,我又来填自己挖的坑了。经过大量实测,发现DMA通道本身并未问题,数据出错是封装函数的问题。DMA通道 ...

我测试了开cache MPU和不开,除了开cache需要cache和SRAM的同步,
DMA收发很正常啊,看来上天待我不薄
回复

使用道具 举报

4

主题

19

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2021-9-3 11:24:25 | 显示全部楼层
旮旯旭 发表于 2021-9-2 17:06
我测试了开cache MPU和不开,除了开cache需要cache和SRAM的同步,
DMA收发很正常啊,看来上天待我不薄

是的,我那部分也找到原因了,不是DMA通道本身的问题
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-2-28 15:57:51 | 显示全部楼层
eric2013 发表于 2021-8-31 08:45
你这个收发跟数据一致性没什么关系,Cache不会影响到你的DMA运行不正常。

参考我的试试,我的收发没问题 ...

有SPI的DMA中断方式收发例程吗
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2022-3-1 10:53:44 | 显示全部楼层
cjsxisc 发表于 2022-2-28 15:57
有SPI的DMA中断方式收发例程吗

V6 的板子有
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:02 , Processed in 0.320107 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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