硬汉嵌入式论坛

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

[其它] 使用H7A3的串口+DMA无法发送

[复制链接]

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
发表于 2022-4-6 14:55:44 | 显示全部楼层 |阅读模式
参照了例程stm32cubemx官方里面   NUCLEO_H7A3ZI_Q《UART_TwoBoards_ComDMA》 的例子。

我想要在H7A3ZGTx上使用串口+DMA来通信,配置一样的情况下:
a. 如果仅使用串口(使用"HAL_UART_Transmit"函数)的情况下可以正常工作;
b. 如果使用dma来发送(使用"HAL_UART_Transmit_DMA"函数)那么串口的gstate就会一直处于busy状态,然后一次也发不了;

回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-6 15:08:05 | 显示全部楼层
不知道为什么工程压缩包一直传不上来,一直显示“上传失败,请刷新重试”,只好上网盘链接了,麻烦大佬们帮我看看
链接:https://pan.baidu.com/s/1KvAEdR46vLuJSK342UP6RA?pwd=99dp
提取码:99dp
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2022-4-6 15:32:50 | 显示全部楼层
H7的串口DMA,优先把Cache问题配置了,其它直接调用即可。
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-6 15:39:33 | 显示全部楼层
eric2013 发表于 2022-4-6 15:32
H7的串口DMA,优先把Cache问题配置了,其它直接调用即可。

我不开cache还是有这个问题
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-7 09:31:19 | 显示全部楼层
这个工程还是我用的CubeMx生成的。参考例程没有太大差别,不知道为什么,也会有这个问题
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-7 09:55:32 | 显示全部楼层
进到dma中断以后,进入了错误,不太清除这个错误时怎么产生的
QQ截图20220407095241.png






回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2022-4-7 09:58:53 | 显示全部楼层
直接用stm32cubemx配置一个应该没什么问题吧,我只生成过H743的,没发现什么问题
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-7 10:08:41 | 显示全部楼层
cctv180 发表于 2022-4-7 09:58
直接用stm32cubemx配置一个应该没什么问题吧,我只生成过H743的,没发现什么问题

确实出问题了.不知道是我的问题还是我选的配置
回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2022-4-7 10:46:14 | 显示全部楼层
linminghui 发表于 2022-4-7 10:08
确实出问题了.不知道是我的问题还是我选的配置

我以前有发过帖子可以参考下程序呗。也是stm32cubemx生成的
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-7 15:05:11 | 显示全部楼层
H7A3 好像多了个DMAMUX 会不会和这个有关
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-8 11:53:33 | 显示全部楼层
尝试了一下直接把例程《STM32H7A3ZIQ_Nucleo_UART_TwoBoards_ComDMA》,改到芯片H7A3ZGT6上来用,出现了两个情况:
(1)直接使用默认例程的icf文件(第一张图),dma可以正常发送,串口软件也能收到数据,但是数据的长度和内容都不对;
(2)换成H7A3ZGT6的ICf文件(第二张图),dma没法发送,进入了发送错误中断里去。不知道是怎么回事。

QQ截图20220408114331.png


QQ截图20220408114412.png



回复

使用道具 举报

15

主题

87

回帖

132

积分

初级会员

积分
132
发表于 2022-4-9 11:37:58 | 显示全部楼层
之间没注意,f401出现过,dma 不能收发,uart,后来有人说要 先初始化 dma,再初始化其它,
认真看了初始化代码,确实必须要先初始化 dma ,否则 uart 对dma初始化无效,
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-11 11:10:00 | 显示全部楼层
yuntian 发表于 2022-4-9 11:37
之间没注意,f401出现过,dma 不能收发,uart,后来有人说要 先初始化 dma,再初始化其它,
认真看了初始化 ...

谢谢,不过尝试了一下,还是不行
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-11 16:54:32 | 显示全部楼层
换了一个icf文件就行了,RAM区由0x20000000变到了0x24000000,是什么原因还在找
回复

使用道具 举报

17

主题

84

回帖

135

积分

初级会员

积分
135
QQ
 楼主| 发表于 2022-4-14 15:04:52 | 显示全部楼层
今天看文档的时候,无意间找到了原因,只能说V7开发板的用户手册整理的真好.
image.png

那么现在问题又来了
(1)我怎么设置指定说DMA访问的不会是TCM,通过指定缓冲区数组的地址么?
(2)之前使用F767芯片的时候怎么不会遇上这样的问题?难道是因为TCM区域比较小,所以恰好DMA的缓冲区数组被分在了SRAM区?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 18:06 , Processed in 0.234062 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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