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

CubeMX 生成的 STM32H7 CMake 工程打开串口 DMA 无法正常发送数据,如何解决?

[复制链接]
ljt20030312@Out 提问时间:2025-9-16 19:20 / 未解决

通过 CubeMX 生成的 stm32h743iit6 的 cmake 工程(根据 starm-clang 编译器的版本修改至使用 ATfE 编译器,仅使用 picolibc),启用 ICache 和 DCache,启用 USART1 以及 tx DMA,在程序中,使用 HAL_UART_Transmit_DMA函数发送数据,在电脑的串口助手上无法接收到数据,使用 HAL_UART_Transmit函数发送数据,串口助手可以正常收到,请问如何解决?

收藏 评论4 发布时间:2025-9-16 19:20

举报

4个回答
butterflyspring 回答时间:2025-9-17 10:46:27
有可能和DMA的设置有关系。


HAL库里有例程,可以参考一下。

STM32Cube_FW_H7_V1.11.1\Projects\STM32H743I-EVAL\Examples\UART\UART_HyperTerminal_DMA
ljt20030312@Out 回答时间:2025-9-17 20:22:35

butterflyspring 发表于 2025-9-17 10:46
有可能和DMA的设置有关系。</p>
<p>

应该不是 DMA 设置的问题,我尝试在 .ld 文件里将所有段都改到了 RAM 中(对应内存 0x24000000 后),串口 DMA 可以正常传输一次,但是第二次时,HAL_UART_Transmit_DMA 函数会返回 HAL_BUSY,并且无法发送数据

xmshao 回答时间:2025-9-18 17:23:31

ljt20030312@Out 发表于 2025-9-17 20:22
应该不是 DMA 设置的问题,我尝试在 .ld 文件里将所有段都改到了 RAM 中(对应内存 0x24000000 后) ...

[md]你注意下 有些状态标志的管理。比方调用UART发送前手动加句:

huart1.gState = HAL_UART_STATE_READY

当然,如果按照库代码逻辑,开启UART相关中断并采用库函数中断服务例程,库代码通常会

自行处理好。有时我们可能并不完全按照库代码的逻辑在走,有时就需手动做些调整。

Eagle123 回答时间:5 小时前

找到解决方法了吗?我知道原因是cmake工程默认全局变量定义到DTCM区域了,该区域无法使用DMA访问,但是没有找到解决方法

所属标签

相似问题

官网相关资源

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