硬汉嵌入式论坛

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

[DMA] STM32H743关于DMA概念及双缓冲区的几个小疑问?

[复制链接]
回帖奖励 9 个金币 回复本帖可获得 1 个金币奖励! 每人限 1 次(中奖概率 30%)

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-26 17:42:08 | 显示全部楼层 |阅读模式
本帖最后由 qq1646544 于 2023-8-27 09:20 编辑

1、双缓冲区的使用问题:
<第43章 STM32H7的DMA应用之双缓冲控制任意IO和脉冲数控制> 利用的是“HAL_DMAEx_MultiBufferStart_IT”函数实现双缓冲区效果
而<第45章 STM32H7的ADC应用之定时器触发配合DMA双缓冲>则是利用DMA传输完成中断和半传输完成中断来实现双缓冲区的效果,
那么为什么不可以调用HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength)函数
去实现呢?我感觉只需要把SrcAddress配置为ADC的数据寄存器,DstAddress和SecondMemAddress为两个缓冲区,就可以实现目标功能。
2、对于DMA传输模式,流控制器是如何选择是DMA还是外设的,需要修改哪个寄存器?还是调用哪个函数API?

3、H7的数据封装和数据解封,比如我这里看到F1参考手册(下方右图),如果以红框方式进行不等宽数据类型的传输,会在目标地址数据丢失,比如在0x0读B1B0[15:0],在0x0写B0[7:0],此时丢失了B1位,那么H7参考手册(下方左图)这么传输应该数据也会丢失把?


问题2

问题2

问题三左图

问题三左图

问题三右图

问题三右图
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-8-27 12:58:13 | 显示全部楼层
本帖最后由 qq1646544 于 2023-8-27 16:55 编辑

https://www.armbbs.cn/forum.php? ... 8827&extra=page%3D1 看到了这个帖子,第二个问题明白了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-28 07:58:14 | 显示全部楼层

回帖奖励 +1 个金币

1、都可以,是两种玩法,教程里面都提供了。
HAL_DMAEx_MultiBufferStart_IT需要用户再开一个缓冲区。

2、外设,看SDIO使用DMA就是SDIO控制的,不过这个还不能看H7的,H7自带DMA。你可以看下F4系列的玩法。
3、F1会,H7不会。因为F1不支持不同位宽传输,而H7支持不同位宽传输
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-8-28 09:00:56 | 显示全部楼层
eric2013 发表于 2023-8-28 07:58
1、都可以,是两种玩法,教程里面都提供了。
HAL_DMAEx_MultiBufferStart_IT需要用户再开一个缓冲区。

感谢硬汉哥回复,明白了!
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
 楼主| 发表于 2023-9-6 11:48:13 | 显示全部楼层
eric2013 发表于 2023-8-28 07:58
1、都可以,是两种玩法,教程里面都提供了。
HAL_DMAEx_MultiBufferStart_IT需要用户再开一个缓冲区。

硬汉哥,F1的DMA是不是即使做了缓冲区4字节对齐也不支持不同位宽的传输?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 00:07 , Processed in 0.188696 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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