STM32H743串口DMA发送数据不正确问题

项目场景:

stm32H743使用串口MDA发送数据,减轻MCU负担

问题描述

通过stm32cubeMX配置串口3,使用DMA发送数据,生成工程后DMA发送数据没问题,但是发送的数据全部为0x00,并不是我发的数据,通过仿真查看发现直到DMA发送函数内部数组的数据都是正确的,但是发出来的数据就变成了0x00,经过各种查找,网上搜索终于发现问题。
参考文章:https://blog.csdn.net/winnerycy/article/details/119544125
https://blog.csdn.net/qq_35862573/article/details/104193991
1、没修改前串口3DMA发送的数据如下图:
异常数据
2、解决bug后正确的数据如下图:
正确的数据

原因分析:

1、stm32h743的DMA比较特别,他有几个内存区,默认的内存区与DMA不相连,所以定义buf的时候要定义到与DMA相连的地址上,否则DMA将传输错误的数据。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

解决方案:

一、使用keil建立的工程解决如下:
1、修改.sct文件
在这里插入图片描述在这里插入图片描述
2、在程序中添加宏和修改变量定义
在这里插入图片描述
在里插入图片描述
3、就这样解决了问题,花了很长时间各种debug,一开始以为是程序问题,因为一下子用了四个串口,有时候屏蔽一些串口数据就正常,有时候又不正常,以为是串口相互影响,后面发现并不是,是因为我删减程序时重新编译了程序,不指定串口buf存储的地址就是随机的,有时候会是DMA可以传输的地址,有时候不是,所以各种怀疑,直到网上搜索到相应参考。

更新问题解决方法:
后面使用还发现有问题,前面的分析是错的,罪魁祸首是开启了CPU DCache,关掉CPU DCache就可以正常使用DMA了,地址的RAM2 DMA也没有问题的。至于CPU DCache开启要怎么才能使用DMA,后续再研究了。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值