0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32H7 BDMA应用示例及实现过程分析

茶话MCU 来源:茶话MCU 作者:茶话MCU 2022-11-06 21:32 次阅读

有人利用STM32H743系列芯片做开发,他想使用片内BDMA将GPIO的数据读到内存,并通过LPTIM触发DMA传输时却遇到点麻烦,发现总是实现不了。这里我简单介绍下实现过程,并做些提醒。

STM32H7系列的时钟系统以及内部总线、功能框架相比其它M3/M4内核的STM32芯片要负责不少。整个芯片根据运行时钟高低及总线架构大致分为3个区域,其中BDMA位于区域3即D3域。

在STM32H7系列参考手册中有下面的一副系统功能框图:

0572414c-5ce1-11ed-a3b6-dac502259ad0.png

我们在上图的右下角可以看到BDMA,而且BDMA只能访问AHB4APB4总线上的外设和SRAM4及备份SRAM. 另外,我们还可以从手册上进一步了解到,GPIO外设都是挂在AHB4总线上的。

05a7040e-5ce1-11ed-a3b6-dac502259ad0.png

结合上面介绍可知,现在既然使用BDMA,内存RAM就不能选择SRAM4和备份RAM以外的区域,否则BDMA鞭长莫及而访问不到他们。这是要注意的地方。

另外,这里需要用到LPTIM2的输出事件来触发DMA请求,要使用DMAMUX并完成相关配置。

062af656-5ce1-11ed-a3b6-dac502259ad0.png

配置LPTIM2让它可以产生周期性输出事件即可,实际参数视具体应用而拟定。

066311ee-5ce1-11ed-a3b6-dac502259ad0.png

现在对BDMA做些配置,如下图示。LPTIM2的每次输出事件申请一个DMA请求。

0998bfee-5ce1-11ed-a3b6-dac502259ad0.png

另外,我还配置了GPIOC的几个管脚,以便做测试。这里就不贴配置截图了。

把时钟系统配置完后就可以基于STM32CubeIDE和STM32Cube库的工程。

再添加几行用户代码就可以着手测试。添加的函数代码分别是关于开启DMAmux、启动DMA传输和启动LPTIM2的操作。

LPTIM_HandleTypeDefhlptim2;

DMA_HandleTypeDefhdma_bdma_generator0;

09d967ec-5ce1-11ed-a3b6-dac502259ad0.png

这里我把GPIO_INData[]数组地址指定到了BDMA可以访问到的SRAM4.,它对应STM32CubeIDE链接文件里的RAM_D3。

09fe7fb4-5ce1-11ed-a3b6-dac502259ad0.png

0a3208ac-5ce1-11ed-a3b6-dac502259ad0.png

最后验证结果,我们可以看到BDMA从GPIOC端口读到的数据。

0a5f127a-5ce1-11ed-a3b6-dac502259ad0.png

整体来讲,实现起来比较简单,重点注意BDMA可以访问哪些地方弄清楚,在指定内存地址这个地方不同IDE环境操作上略有差异。再就是要用到LPTIM周期性事件申请DMA请求来实现传输。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    453

    文章

    50387

    浏览量

    421783
  • 总线
    +关注

    关注

    10

    文章

    2866

    浏览量

    87981

原文标题:STM32H7 BDMA应用示例

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32H7 HAL库中存在的bug

    stm32H7 hal 库里面的以太网代码,坑了鱼鹰很多次(不知道最新版是否已经修复了这些bug),这里分享一篇网上的文章,因为鱼鹰也遇到过,靠它解决了其中一个编译优化问题,在此感谢作者。不过hal
    的头像 发表于 08-12 17:37 851次阅读

    请问stm32h7系列怎么跑linux呢?

    stm32h7系列怎么跑linux?
    发表于 07-03 08:04

    STM32H7系列芯片发不出去的hello问题

    有人使用STM32H7系列芯片,用到UART做字符串输出时遇到点小问题。这里一起聊聊该问题,并分析问题原因。
    的头像 发表于 07-01 09:56 1354次阅读
    <b class='flag-5'>STM32H7</b>系列芯片发不出去的hello问题

    STM32H7的HRTIM可以生成12路的PWM吗?

    STM32H7的HRTIM可以生成12路的PWM吗,想做数字电源,控制三相NPC逆变器
    发表于 05-23 07:19

    请问STM32H7的硬件I2C fast mode速度不能到400K?

    STM32H7的硬件I2C HAL库 cubemx配置的400K的速度 逻辑分析仪实测只有大约280K左右 这是什么鬼?
    发表于 04-26 06:02

    请问STM32H7是否支持Trace功能?

    报 “Trace HW not present”这个错误。stm32H7的dataSheet是明确表示该内核是有Trace功能的,是不是哪里设置有问题?
    发表于 04-25 07:38

    STM32H7系列上的DMA, MDMA, BDMA的异同是什么?

    STM32H7上面有好多类型的DMA,大概看了一下功能都差不多呀!有没有谁了解的,来讲讲这几个DMA都有什么区别,有什么特别之处?实际使用可以用来干嘛
    发表于 04-17 08:09

    STM32H7系列目前有没有支持h264编解码?fps大概为多少?

    STM32H7系列目前有没有支持h264编解码,fps大概为多少?
    发表于 04-07 06:06

    使用LL库生成STM32H7代码时存在报错是什么原因导致的?

    使用LL库生成STM32H7代码时存在的BUG
    发表于 04-03 07:33

    STM32H7读外部SRAM首次成功,之后保持不变是为什么?

    STM32H743读外部SRAM 芯片,首次读成功后,无法再次读取新的数据,使用示波器对STM32H7引脚进行测量,发现无波形输出。调试过程中,在程序中打个断点,就每次可以正常读取。
    发表于 03-27 06:13

    Stm32H7 spi会带来更大的adc噪声,导致小信号异常值的原因?

    [Stm32H7]spi会带来更大的adc噪声,导致小信号异常值
    发表于 03-25 06:10

    能用stm32h7为主做绝大部分的功能实现,用stm32f1为辅实现一个小功能吗?

    请问能用stm32h7为主做绝大部分的功能实现,用stm32f1为辅实现一个小功能吗?
    发表于 03-20 07:09

    STM32H7配置FileX时,开关“Enable data cache maintenance”的作用是什么?发生HardFault_Handler的原因?

    我在STM32H7上基于AzureRTOS的FileX实现向TF卡写入数据,在CubeMX配置FileX页面里有Enable data cache maintenance开关,这个选项默认是打开
    发表于 03-13 06:23

    使用STM32H7的AD进行了7M频率的采集信号,采集进去后可以实现实时处理吗?

    使用STM32H7的AD进行了7M频率的采集信号,采集进去后可以实现实时处理吗?
    发表于 03-08 08:10

    STM32H7的工程出现找不到rtconfig.h的错误如何解决?

    旧工程是能正常编译和运行的。在拉取最新代码后,编译出错,提示有些宏定义缺失。进入menuconfig配置后,AT32的工程是能正常编译的,STM32H7的工程出现找不到rtconfig.h的错误
    发表于 03-05 07:12