硬汉嵌入式论坛

 找回密码
 立即注册
查看: 308|回复: 10
收起左侧

[UART] 请教一个比较邪乎的关于STM32h743的USART1用DMA发送不了数据的问题

[复制链接]

3

主题

21

回帖

30

积分

新手上路

积分
30
发表于 2025-11-26 14:42:39 | 显示全部楼层 |阅读模式
如题,我现在遇到个难题,被折腾了好几天。

用STM32CubeMX创建的IAR工程,USART1使用PA9,PA10,使用DMA收发数据,始终发不出来,如果不用DMA是能正常发送的。

相同的代码用在keil上却能正常发出来。后来干脆把STM32CubeMX创建的工程另存为KEIL的,什么都没改,收发都是正常的。


uint8_t tx[] = "Hello\r\n";
HAL_UART_Transmit(&huart1, tx, sizeof(tx), 100);   //IAR,KEIL都能发送出来

if(HAL_UART_Transmit_DMA(&huart1, tx, sizeof(tx)) != HAL_OK)   //IAR发不出来,KEIL能正常发送出来。
{
  Error_Handler();
}

这个问题折腾了我很久,仿真查了寄存器,执行HAL_UART_Transmit_DMA之前,相关寄存器的设置都是一样的,

一旦执行这个函数,中断标志就会置位(TEIF1和FEIF1是1),数据发不出来。能发出来的keil执行这个函数置位的是TCIF1和HTIF1。

现在很迷茫,实在搞不定,特来求教,帮我看看到底是什么问题。IAR的版本是9.70.1,STM32CubeMX的版本是6.16.0。

DMA使用的是DMA1的DMA1_Stream0接收,DMA1_Stream1发送。





回复

使用道具 举报

12

主题

103

回帖

139

积分

初级会员

积分
139
发表于 2025-11-26 15:55:50 | 显示全部楼层
IAR和Keil的编译优化等级都是0么
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-11-26 16:01:32 来自手机 | 显示全部楼层
让我看看各位 发表于 2025-11-26 15:55
IAR和Keil的编译优化等级都是0么

都是0。我怀疑是9.70.1版本的iar的bug。但是想想也不至于,这么大的软件,不至于出这个问题。
回复

使用道具 举报

5

主题

184

回帖

199

积分

高级会员

积分
199
发表于 2025-11-27 11:01:15 | 显示全部楼层
处理DMA的内存位置,0x24000000之后的数据DMA才能访问
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120448
QQ
发表于 2025-11-27 11:15:55 | 显示全部楼层
方便的话,分享工程代码到百度云看下
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-11-27 16:21:50 | 显示全部楼层
2859932063 发表于 2025-11-27 11:01
处理DMA的内存位置,0x24000000之后的数据DMA才能访问

你这么一说,我好像发现了这个差异。IAR的待发送的数据的缓存确实是在0X24000000之前,而keil的是在0x24000000之后。我这就去验证一下。感谢感谢。
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-11-27 16:22:36 | 显示全部楼层
eric2013 发表于 2025-11-27 11:15
方便的话,分享工程代码到百度云看下

可能真是楼上的兄弟说的原因。
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-11-27 16:27:21 | 显示全部楼层
2859932063 发表于 2025-11-27 11:01
处理DMA的内存位置,0x24000000之后的数据DMA才能访问

请教一下,keil是自动处理了内存的位置吗?IAR在哪里设置也可以自动处理内存的位置?
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120448
QQ
发表于 2025-11-27 16:32:34 | 显示全部楼层
kuyu20 发表于 2025-11-27 16:27
请教一下,keil是自动处理了内存的位置吗?IAR在哪里设置也可以自动处理内存的位置?

不存在自动设置,都是手动设置的。因为H7系列的内存块很多。
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2025-11-27 17:00:41 | 显示全部楼层
eric2013 发表于 2025-11-27 16:32
不存在自动设置,都是手动设置的。因为H7系列的内存块很多。

但是奇怪,为什么keil的是可以的呢?我都不知道这个事,肯定是没有手动设置的。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120448
QQ
发表于 2025-11-27 17:10:36 | 显示全部楼层
kuyu20 发表于 2025-11-27 17:00
但是奇怪,为什么keil的是可以的呢?我都不知道这个事,肯定是没有手动设置的。

把你的工程分享出来看下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-10 17:23 , Processed in 0.051984 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表