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

项目场景:

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

问题描述

通过stm32cubeMX配置串口3,使用DMA发送数据,生成工程后DMA发送数据没问题,但是发送的数据全部为0x00,并不是我发的数据,通过仿真查看发现直到DMA发送函数内部数组的数据都是正确的,但是发出来的数据就变成了0x00,经过各种查找,网上搜索终于发现问题。
参考文章:https://blog.youkuaiyun.com/winnerycy/article/details/119544125
https://blog.youkuaiyun.com/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,后续再研究了。

### Git 主机密钥验证失败的解决方案 当遇到 `Host key verification failed` 错误时,通常是因为本地存储的远程服务器SSH主机密钥与实际符或存在。以下是几种有效的解决方法: #### 方法一:更新 Known_Hosts 文件 如果怀疑是由于主机密钥更改引起的问题,则可以通过刷新 `.ssh/known_hosts` 文件中的记录来解决问题。 ```bash mkdir -p ~/.ssh ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts ``` 上述命令会向用户的 SSH 已知主机列表里追加 GitHub 的最新 RSA 密钥指纹[^3]。 #### 方法二:移除旧有条目并重新添加 有时可能需要先清除原有的冲突项再执行扫描动作: ```bash sed -i '/github\.com/d' ~/.ssh/known_hosts # 删除涉及github.com的所有行 ssh-keyscan -H github.com >> ~/.ssh/known_hosts ``` 这条指令首先利用 sed 命令删除所有关于 `github.com` 的现有记录,接着再次调用 `ssh-keyscan` 来获取最新的密钥信息[^2]。 #### 方法三:临时禁用严格检查模式(推荐) 对于某些特殊情况可以考虑暂时关闭严格的主机密钥校验机制,但这可能会带来安全隐患因此并建议作为长期措施采用: ```bash GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git clone git@github.com:user/repo.git ``` 此方式通过设置环境变量的方式绕过了标准的安全流程,仅适用于测试环境中快速排除其他潜在因素的影响[^1]。 #### 使用图形界面工具处理 还可以借助像 VSCode 这样的集成开发环境所提供的插件功能来进行更便捷的操作。例如,在 Windows 平台上可以直接使用鼠标右键菜单启动 Git GUI 客户端完成相同目的——即确认接受新的主机密钥[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值