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

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

3天内不再提示

使用STM32U5系列的GPDMA的burst传输功能

茶话MCU 来源:茶话MCU 作者:茶话MCU 2022-07-31 13:24 次阅读

有人想使用STM32U5系列的GPDMA的burst【分组、节拍、突发】传输功能,似乎遇到了点阻碍。我这里尝试下,稍作演示,仅供参考。

我用TIMER1更新事件触发DMA, DMA工作在非循环模式,DMA将数据从源内存区传输到目的内存区。我先准备下面两个数组。

7f73f59e-0fe3-11ed-ba43-dac502259ad0.png

7f85bcac-0fe3-11ed-ba43-dac502259ad0.png

当两端访问数据宽度设置一样,burst大小始终为1时,传输是很顺畅的,不会有啥问题,结果符合预期。

7fa470c0-0fe3-11ed-ba43-dac502259ad0.png

基于上面配置,结果就很正常。结果如下图,也正是我期望的结果。

7fd4fda8-0fe3-11ed-ba43-dac502259ad0.png

当我们尝试使用DMAburst功能时,发现结果就不对劲了,比方我希望源端按字节读取,然后基于BURST功能打包,目的端按半字来提取,发现结果跟预期不一样。我们一起看看:

7fe5daf6-0fe3-11ed-ba43-dac502259ad0.png

显然,每半个字的高字节都是填充的0。那是怎么回事呢?

我们再看看源端按字节读取,然后基于BURST功能打包,目的端按字来提取,看看结果又会怎么样?

80037c3c-0fe3-11ed-ba43-dac502259ad0.png

结果变成了上面的那个样子,显然结果严重不符合预期。

那是怎么回事呢? 经过反复修改参数,结合我之前之前玩过F4系列DMA burst传输功能以及对STM32 DMA burst功能的理解,感觉这里的BUSRT传输应该是工作了。对DMA burst的基本配置以及我的用户实现代码还是比较自信的。而且目前结果上来看,有数据传输,且数据结果是有规律的,数据并不混乱,程序也没跑飞,就是感觉数据好像在DMABURST传输过程中被处理过。

刚好这两天也就随机性瞄了下这块,隐约记得它是有数据处理功能的。【说实话,U5系列DMA好复杂,比其它M4核STM32的DMA复杂很多。要沉下心来细看真不易!!】

想到这里,不禁自我怀疑。难道配置哪里还有问题,没做到位?

继续查看CubeMx界面下有关GPDMA的配置,嗯?我看到了一直被我无视的一个地方:

80219b4a-0fe3-11ed-ba43-dac502259ad0.png

难道问题是在这里?此处有乾坤?

。。。。。。其实,问题真的就在这里。

当我将那个DataHandling 配置由Disable转为Enable基本恍然大悟了。

我们回过头去查看手册,手册里面对GPDMA的数据处理功能也做了描述。下图是相关描述里的一个表格截图。

8032c1cc-0fe3-11ed-ba43-dac502259ad0.png

关于GPDMA的数据处理功能,这里就不解读了,需要时我们可以自行研读手册。对STM32U5的DMA功能,我只能说:哇塞!功能真强大!

我们还是继续回到上面的测试。当我使能Datahandling功能,并选中满足我当前需求的一个选项后,一切便拨云见日。

8053b030-0fe3-11ed-ba43-dac502259ad0.png

注意上面截图中那个关于数据对齐的选项。意思还是比较简单明了,当源数据宽度小于目的端数据宽度时,按照目的端数据宽度打包摆放。

当我在前面BURST配置的前提下,再加上这个Data Handling配置就能输出符合预期的结果了。

换句话说,我前面的DMA Burst基本配置是没有问题的,只是没有选择合适的Data Handling方式导致没有呈现我们预期的效果,这也正是它跟其它系列不一样的地方。

这里涉及的用户代码很简单,也干脆贴过来,供有需要的参考【初始化配置使用CubeMx】:

80687a88-0fe3-11ed-ba43-dac502259ad0.png

最后顺便提醒一点,上面那个DMA启动函数里的size变量【箭头所指的地方】,是按照字节数来算的,这点要注意,这也是跟其它系列不一样的地方。

审核编辑 :李倩

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

    关注

    2265

    文章

    10859

    浏览量

    354537
  • dma
    dma
    +关注

    关注

    3

    文章

    558

    浏览量

    100384

原文标题:基于STM32U5片内GPDMA Burst传输应用示例

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

收藏 人收藏

    评论

    相关推荐

    STM32项目实战:基于STM32U5的智能大棚温控系统(LVGL),附项目教程/源码

    《智能大棚温控系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取https://s.c1ns.cn/F5XyUSTM32项目实战之“智能大棚温控系统
    的头像 发表于 11-13 17:08 203次阅读
    <b class='flag-5'>STM32</b>项目实战:基于<b class='flag-5'>STM32U5</b>的智能大棚温控系统(LVGL),附项目教程/源码

    STM32项目实战:基于STM32U5的火灾报警系统(LVGL),附项目教程/源码

    《火灾报警系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取https://s.c1ns.cn/F5XyUSTM32项目实战之“火灾报警系统”(基于STM32U5)今天
    的头像 发表于 11-13 14:18 277次阅读
    <b class='flag-5'>STM32</b>项目实战:基于<b class='flag-5'>STM32U5</b>的火灾报警系统(LVGL),附项目教程/源码

    STM32项目实战:基于STM32U5的智能灯光控制系统(LVGL),附项目教程/源码

    《智能灯光控制系统_STM32U5》项目完整文档、项目源码,点击免费领取。项目资料领取:https://s.c1ns.cn/F5XyUSTM32项目实战之“智能灯光控制系统”(基于STM32U5
    的头像 发表于 11-07 18:50 422次阅读
    <b class='flag-5'>STM32</b>项目实战:基于<b class='flag-5'>STM32U5</b>的智能灯光控制系统(LVGL),附项目教程/源码

    X-CUBE-CLASSB以及生态系统为何如此重要

    ‍‍‍‍‍‍‍‍ X-CUBE-STL目前支持STM32MP1、STM32U5STM32L5STM32H5STM32WL。实
    的头像 发表于 11-07 14:01 177次阅读

    STM32H5STM32U5在trustzone上有哪些不同?

    我要做空调的空中升级FOTA的方案,需要加密,对于trustzone功能,采用那款芯片比较合适?STM32H5STM32U5在trustzone上有哪些不同?
    发表于 07-05 07:03

    STM32U575串口接收+GPDMA波特率不匹配导致失败怎么解决?

    我用CubeMX配置的串口+GPDMA接收,115200波特率正常能用, 然后如果波特率设置错误为9600,再改回来115200,接收就不能用了,调试好像时DMA出错了,然后启用HAL_UARTEx_ReceiveToIdle_DMA函数依然错误,有大神知道怎么解决吗
    发表于 07-04 08:11

    GPDMA0至USIC0,第一个DMA启动后下一 DMA启动后就不一样了,为什么?

    ),因此从站需要接收 16 个 CS 为低电平的 clks。 我注意到,例如当我要求块传输大小等于 10 时,我想我应该在 16 个时钟下看到 5 个芯片选择为低电平。 但是,在我第一次启动 DMA
    发表于 05-28 07:18

    STM32CubeMX创建STM32U5系列工程,DEBUG调试下为什么没有ST-LINK选项?

    通过STM32CubeMx创建生成一个STM32U5xxx 的MDK(keil_v5)工程,打开工程后,想通过ST-LINK进行调试,但在工程的Debug窗口并没有ST-LINK相关的选项。在同一
    发表于 03-27 06:40

    STM32U5,STM32WB及STM32L4开发板,哪个开发板拥有较多数量的ADC?

    请问,我现在需要开发一个项目,在这个项目中需要使用较多数量的传感器(至少8个),这些传感器需要进行信号采集,现在在使用STM32U5,STM32WB及STM32L4芯片的开发板中,哪些开发板拥有较多数量的ADC?
    发表于 03-20 08:01

    STM32H562在使用SAI配置GPDMA时需要特别注意些什么?

    使用STM32H562用CubeMX配置SAI接口,TDM收发正常;但是,当配置使用GPDMA标准请求模式搬运数据时,TDM_Rx/MCU_Tx却起不来,(其他用IIC、SPI、串口配置GPDMA收发都没有问题),请问一下是我在
    发表于 03-07 06:47

    基于STM32U5片内温度传感器正确测算温度实战经验分享

    STM32 在内部都集成了一个温度传感器,STM32U5 也不例外。这个位于晶圆上的温度传感器虽然不太适合用来测量外部环境的温度,但是用于监控晶圆上的温度还是挺好的,以防止芯片过温运行。
    的头像 发表于 02-22 17:27 3904次阅读
    基于<b class='flag-5'>STM32U5</b>片内温度传感器正确测算温度实战经验分享

    盘点那些硬件+项目学习套件:STM32U5单片机开发板及入门常见问题解答

    可穿戴设备。本项目硬件实战平台包含STM32U5核心板、底板、2.8寸显示屏、资源扩展板以及仿真器,智能手表主要功能包括健康监测、运动模式、环境检测、电池电量检测、RTC时钟、状态提醒、模式切换(运行
    发表于 02-19 16:59

    STM32U5系列TIMER+DMA+DAC应用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件触发DMA,并通过DMA传输内存数据到DAC输出寄存器,进而产生相应的DAC输出波形。可他不知如何配置DMA并实现期望的DAC输出,在ST公司提供的HAL库里也
    的头像 发表于 01-24 09:10 1595次阅读
    <b class='flag-5'>STM32U5</b><b class='flag-5'>系列</b>TIMER+DMA+DAC应用演示

    基于LL库实现STM32U5 LPTIM功能

    有人打算使用STM32U5系列片内LPTIM做低功耗模式唤醒。基于STM32 LL库组织代码,折腾几天后似乎连中断都进不了,想找找是否有现存LL库例程可以参考。
    的头像 发表于 01-07 14:12 1431次阅读
    基于LL库实现<b class='flag-5'>STM32U5</b> LPTIM<b class='flag-5'>功能</b>

    实战经验 | STM32U5 ADC 自校准不成功的问题分析

    关键词:STM32U5,ADC 目录预览 1、引言 2、问题 3、问题解决 4、小结 01 引言 很多 STM32 系列中的 ADC 都带有自校准的功能。它提供了一个自动校准的过程,用
    的头像 发表于 12-10 16:45 1880次阅读
    实战经验 | <b class='flag-5'>STM32U5</b> ADC 自校准不成功的问题分析