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

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

3天内不再提示

简单介绍有关STM32的DMAMUX模块

单片机 来源:茶话MCU 作者:茶话MCU 2021-08-14 15:10 次阅读

目前STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,另一方面也大大拓展了DMA请求事件,不再局限于外设事件,比方基于GPIO的外部中断事件、或者DMA事件本身来触发DMA传输。

关于DMAMUX的基本结构及功能原理,这里就不说了,这里重点介绍基于STM32G4芯片,使用GPIO的外部中断事件触发DMA传输,通过DMA将内存数据传输到GPIO端口的实现过程,包括基于CubeMx的配置、关键代码及注意点。

本演示例程基于STM32G4系列的Nucleo板进行,按键【PC.13】用来触发中断,该中断事件被配置DMA请求源。板上有个LED灯与PA.5相连。例程中通过DMA传输来修改GPIOA输出寄存器的内容来改变亮灯情况。

要完成的任务很简单,按键产生外部中断事件,外部中断事件与DMAMUX的DMA请求生成器相连,进而产生DMA请求,最后触发相应的DMA控制器完成数据传输。下面就直接进入配置过程。

先通过CubeMx神器做基本的初始化配置【RCC配置就省略不提了】。

注意别忘了使能PC13脚所对应的NVIC控制器配置,即下图所示配置。

798284d0-fc1f-11eb-9bcf-12bb97331649.png

然后,对DMA进行配置。配置也比较简单,见下图。注意DMA请求源并非常规的外设事件,而是DMA请求发生器相关通道,关于它的配置在图中下方的蓝色方框那里。

79a7bcd2-fc1f-11eb-9bcf-12bb97331649.png

EXTI13事件作为DMAMUX的输入请求信号,每次中断事件产生一个DMA请求,请求信号与DMA1的Channel1相连。为了便于演示,我这里将DMA传输配置成了循环模式。

基于上面配置生成初始化代码,然后添加用户代码。基于HAL库的关键用户参考代码如下:

DMA_HandleTypeDef hdma_dma_generator0;

uint16_t DataSource[]={0x5555,0xaaaa,0x5a5a,0xa5a5};

int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_DMA_Init();

/* USER CODE BEGIN 2 */

HAL_DMAEx_EnableMuxRequestGenerator(&hdma_dma_generator0);

HAL_DMA_Start(&hdma_dma_generator0 , (uint32_t)&DataSource,

(uint32_t)&(GPIOA-》ODR),4 );

/* USER CODE END 2 */

while (1)

{

}

}

顺便提醒下,上面红色代码行可能是有些人容易忽视的地方,至少目前库版本需要手动添加这句。

最后,简单验证下。看看按键时是否发生GPIOA输出的数据变化及灯亮暗。

验证过程是没啥问题的,跟预期效果一致。这里特意分享整个实现过程以供有需要的工程师参考。有关STM32的DMAMUX模块的简单介绍可以阅读下面的文章《《STM32芯片中的DMAMUX是干啥用的》》。OK,下次再聊。

编辑:jq

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

    关注

    3

    文章

    535

    浏览量

    99006
  • 代码
    +关注

    关注

    30

    文章

    4554

    浏览量

    66726
  • HAL
    HAL
    +关注

    关注

    2

    文章

    68

    浏览量

    12469

原文标题:通过STM32外部中断触发DMA传输

文章出处:【微信号:aidanpianji,微信公众号:单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32L4R5的DMAMUX异常原因?

    __HAL_RCC_DMA1_CLK_ENABLE(); __HAL_RCC_DMAMUX1_CLK_ENABLE(); /*##-3- Configure the DMA
    发表于 04-19 06:36

    步进电机的简单介绍

    步进电机的命名,参数,转速简单介绍
    的头像 发表于 04-17 21:40 75次阅读

    关于STM32 DMAMUX模块具体的应用示例代码

    有人通过公众号微信留言,询问是否有关STM32 DMAMUX模块具体的应用示例代码。同时,个人也发现,虽然STM32片内的
    的头像 发表于 03-25 09:15 873次阅读
    关于<b class='flag-5'>STM32</b> <b class='flag-5'>DMAMUX</b><b class='flag-5'>模块</b>具体的应用示例代码

    STM32U5 LPBAM模式介绍

    STM32U5 LPBAM模式介绍
    的头像 发表于 10-26 17:59 419次阅读
    <b class='flag-5'>STM32</b>U5 LPBAM模式<b class='flag-5'>介绍</b>

    STM32 DCMI 的带宽与性能介绍

    STM32 DCMI 的带宽与性能介绍
    的头像 发表于 10-25 17:34 750次阅读
    <b class='flag-5'>STM32</b> DCMI 的带宽与性能<b class='flag-5'>介绍</b>

    STM32U5介绍

    电子发烧友网站提供《STM32U5介绍.pdf》资料免费下载
    发表于 09-19 15:06 0次下载
    <b class='flag-5'>STM32</b>U5<b class='flag-5'>介绍</b>

    基于STM32H7 EXTI+SPI+DMA双缓冲应用演示

    号分享了有关使用DMAMUX模块通过EXTI同步触发其它DMA请求的文章和关于DMA双缓冲应用原理介绍与参考实现代码。
    的头像 发表于 08-21 09:12 1959次阅读
    基于<b class='flag-5'>STM32</b>H7 EXTI+SPI+DMA双缓冲应用演示

    STM32的加解密硬件模块

    电子发烧友网站提供《STM32的加解密硬件模块.pdf》资料免费下载
    发表于 08-02 09:14 1次下载
    <b class='flag-5'>STM32</b>的加解密硬件<b class='flag-5'>模块</b>

    STM32 USB OTG _FS/HS模块

    电子发烧友网站提供《STM32 USB OTG _FS/HS模块.pdf》资料免费下载
    发表于 08-01 15:40 14次下载
    <b class='flag-5'>STM32</b> USB OTG _FS/HS<b class='flag-5'>模块</b>

    STM32F3产品技术-I2S模块

    电子发烧友网站提供《STM32F3产品技术-I2S模块.pdf》资料免费下载
    发表于 08-01 15:39 1次下载
    <b class='flag-5'>STM32</b>F3产品技术-I2S<b class='flag-5'>模块</b>

    STM32L4直接访问内存模块(DMA)介绍

    电子发烧友网站提供《STM32L4直接访问内存模块(DMA)介绍.pdf》资料免费下载
    发表于 08-01 10:15 1次下载
    <b class='flag-5'>STM32</b>L4直接访问内存<b class='flag-5'>模块</b>(DMA)<b class='flag-5'>介绍</b>

    STM32F7x6外设介绍

    电子发烧友网站提供《STM32F7x6外设介绍.pdf》资料免费下载
    发表于 07-31 11:27 0次下载
    <b class='flag-5'>STM32</b>F7x6外设<b class='flag-5'>介绍</b>

    STM32F1的SPI模块协议介绍

    SPI是是一种高速的,全双工,同步的总线通信方式。STM32F1低中容量设备的SPI模块支持主从两种模式。
    的头像 发表于 07-24 15:32 2151次阅读
    <b class='flag-5'>STM32</b>F1的SPI<b class='flag-5'>模块</b>协议<b class='flag-5'>介绍</b>

    STM32 USB接口介绍

    以下内容基于STM32H7系列进行介绍,同样适用于STM32F4/F7系列芯片。
    的头像 发表于 05-14 15:49 7600次阅读
    <b class='flag-5'>STM32</b> USB接口<b class='flag-5'>介绍</b>

    求助,S32K144 DMAMUX触发源没有TRGMUX,如何使用TRGMUX_IN0触发DMA传输?

    我想通过引脚触发 DMA 传输,但没有 TRGMUX 的 DMAMUX 触发源。 如何使用 TRGMUX_IN0 触发 DMA 传输?
    发表于 05-04 08:19