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

    文章

    577

    浏览量

    105349
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73145
  • HAL
    HAL
    +关注

    关注

    2

    文章

    73

    浏览量

    13548

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32WB1MMC蓝牙低功耗模块技术解析与应用设计

    STMicroelectronics STM32WB1MMC蓝牙® 低功耗模块是一款超低功耗、小尺寸、经过认证的2.4 GHz无线模块。它支持低功耗蓝牙5.3。它基于STM32WB15
    的头像 发表于 10-25 16:20 1129次阅读
    <b class='flag-5'>STM32</b>WB1MMC蓝牙低功耗<b class='flag-5'>模块</b>技术解析与应用设计

    STM32WL5MOC多协议LPWAN模块技术解析与应用指南

    STMicroelectronics STM32WL5MOC多协议LPWAN双核模块采用两个Arm^®^ Cortex ^®^ -M内核(M4和M0+)。这些模块集成了功能强大、超低功耗、符合
    的头像 发表于 10-22 11:20 348次阅读
    ‌<b class='flag-5'>STM32</b>WL5MOC多协议LPWAN<b class='flag-5'>模块</b>技术解析与应用指南

    PCB嵌入式功率模块介绍

    电子发烧友网站提供《PCB嵌入式功率模块介绍.docx》资料免费下载
    发表于 09-09 16:19 2次下载

    【教程】使用STM32F4进行E22-400T22S编程通信教程

    通过本文带大家零基础使用STM32F407VET6单片机进行E22-400T22S模块编程并进行简单的通信,当然如果学会了,也可以举一反三应用于E22、E220、E32所有模块上。一、
    的头像 发表于 08-28 19:32 1496次阅读
    【教程】使用<b class='flag-5'>STM32</b>F4进行E22-400T22S编程通信教程

    【教程】零基础!手把手教你使用STM32F4进行E22-400T22S编程通信

    通过本文带大家零基础使用STM32F407VET6单片机进行E22-400T22S模块编程并进行简单的通信,当然如果学会了,也可以举一反三应用于E22、E220、E32所有模块上。一
    的头像 发表于 07-03 19:32 1046次阅读
    【教程】零基础!手把手教你使用<b class='flag-5'>STM32</b>F4进行E22-400T22S编程通信

    STM32F103驱动LD3320语音识别模块

    本文介绍了如何使用STM32F103微控制器驱动LD3320语音识别模块,该模块具备非特定人语音识别功能,支持动态编辑关键词,且无需额外Flash和RAM。通过SPI接口连接并配置代码
    的头像 发表于 06-28 14:16 1263次阅读
    <b class='flag-5'>STM32</b>F103驱动LD3320语音识别<b class='flag-5'>模块</b>

    蓝牙低功耗模块的原理和应用介绍

    随着物联网技术的快速发展,蓝牙低功耗模块在连接各种设备和传输数据方面发挥着重要作用。今天将为您介绍蓝牙低功耗模块的工作原理以及其广泛的应用领域。 蓝牙低功耗模块的原理 蓝牙低功耗
    的头像 发表于 05-21 15:56 904次阅读

    零基础搭建基于STM32的M系列LoRa模块透传例程(上)

    介绍本文适用于零基础,手把手教你搭建基于STM32单片机控制亿佰特E22-M系列、E220-M系列和E32-M系列模块,旨在降低M系列模块开发难度,帮助大家更快上手M系列的模组。本次教
    的头像 发表于 03-20 19:33 658次阅读
    零基础搭建基于<b class='flag-5'>STM32</b>的M系列LoRa<b class='flag-5'>模块</b>透传例程(上)

    STM32F103×8/STM32F103×B MCU手册

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的订购信息和机械器件特性。有关整个STMicroelectronics STM32F103xx系列的更
    发表于 03-18 16:37 0次下载

    STM32调试神器STM32CubeMonitor介绍

    STM32CubeMonitor除了同样可以提供变量监测的功能,还有非常丰富的组件可以搭建各种风格的图形化界面,以及众多免费的第三方组件可以进行功能扩展。此外,STM32CubeMonito还支持远程监测功能。
    的头像 发表于 03-17 10:45 1499次阅读
    <b class='flag-5'>STM32</b>调试神器<b class='flag-5'>STM32</b>CubeMonitor<b class='flag-5'>介绍</b>

    博世GTM IP模块架构介绍

    上篇文章我们介绍了博世GTM IP模块的核心功能及基础结构模块。本篇文章将继续解析GTM模块架构,重点介绍I/O
    的头像 发表于 03-07 17:50 1984次阅读
    博世GTM IP<b class='flag-5'>模块</b>架构<b class='flag-5'>介绍</b>

    使用STM32H743对外部一个ADC芯片做数据采集,根据CubeMX配置的驱动无法触发SPI,怎么解决?

    HAL_SPI_Receive_DMA也可以进行通信。 但EXTI0事件却无法触发同步SPI DMA传输,请问是否有大神知道,有哪些细节没有配置到位吗? 首次使用STM32H7,对DMAMUX不是很了解。
    发表于 03-07 07:40

    map指令简单介绍

    当然这里写的都是官方文档是已经写过的,我简单抄一下哈。
    的头像 发表于 02-13 09:54 677次阅读

    SiC MOSFET分立器件及工业模块介绍

    BASiC国产SiC碳化硅MOSFET分立器件及碳化硅功率SiC模块介绍
    发表于 01-16 14:32 2次下载

    STM32CubeMX的菜单介绍

    相信初学者打开STM32CubeMX一定是一脸懵逼,里面都是全英文的,不知道从何入手。这里先给大家简单讲解一下。在新建工程这一栏里,我们最常用的是第一个,它会弹出一个芯片列表供你选择,然后就会创建一
    的头像 发表于 12-25 21:03 692次阅读
    <b class='flag-5'>STM32</b>CubeMX的菜单<b class='flag-5'>介绍</b>