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

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函数发送数据,串口助手可以正常收到,请问如何解决?

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

举报

3个回答
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相关中断并采用库函数中断服务例程,库代码通常会

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

所属标签

相似问题

官网相关资源

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