你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H750VBT6 HAL库串口DMA发送问题

[复制链接]
余火 提问时间:2023-10-17 10:49 / 已解决
单片机使用HAL库提供的接口函数HAL_UART_Transmit_DMA来发送数据,串口助手来接收数据,但是奇怪的是,当我全速运行时候,串口助手接收到的数据全部是0x00,在打断点调试的时候发现,如果在函数HAL_DMA_Start_IT处打上一个断点,程序运行到这里再点击全速运行,串口助手接收到的数据则是正常的,这是什么原因?暂时没有头绪,希望有大佬解答一下
收藏 评论4 发布时间:2023-10-17 10:49

举报

4个回答
butterflyspring 最优答案 回答时间:2023-10-17 15:29:34
有可能是使用了DATA CATCHE , 导致了数据不一致。即CPU将数据拷贝到RAM,但是这时被缓存还没立即执行,这时DMA去搬运的是还没写过的RAM所以导致数据全是0x00。

因此要么执行CACHE 维护操作 SCB_CleanDCache() ,要么将D-CACHE 或者 MPU将 RAM, 配置成write_through 策略来保证数据一致性。
xmshao 回答时间:2023-10-17 11:41:43
你在HAL_DMA_Start_IT处打上一个断点后就正常,你干脆在前面加个小delay看看,是否硬件哪里初始化还未就绪?
watershade 回答时间:2023-10-17 14:01:11

.你是不是开启了CPU的cache?这是H7中DMA应用的突出问题。我记得安富莱有相应的文章。你自己搜一下.

我搜了一下FAQ,自己看:https://community.st.com/t5/stm32-mcus/dma-is-not-working-on-stm32h7-devices/ta-p/49498

DazzlingOkami 回答时间:2023-10-17 14:45:58

1.需要等待DMA传输完成中断,确保传输完数据后再启动下一次传输。

2.如果已经排除第一个用法问题的话,考虑是Cache的问题,使用SCB_CleanDCache_by_Addr接口清理待发送数据的缓存。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版