STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,同时也大大拓展了DMA请求事件,不再局限于外设事件,比方可以基于GPIO的外部中断事件、或者DMA事件本身来触发DMA传输。另外,DMA传输的实现还可以基于其它触发事件来同步其操作,即DMA传输的实现需要借助其它同步事件来真正启动。
本文就基于STM32G4芯片简单介绍下该话题,这里要实现的功能大致是这样的:片内低功耗定时器LPTIM1的定时输出作为DMAMUX的DMA同步输入事件,该同步事件触发UART的DMA传输,通过UART输出一段字符。
本演示例程基于STM32G4系列的Nucleo板进行。低功耗定时器LPTIM工作在PWM输出模式,DMAMUX基于LPTIM每次的定时输出事件为UART2申请一定数目的DMA请求,然后DMA将数据从内存送到UART的数据寄存器并最终将内容显示在PC串口终端。
下面就直接使用STM32CubeMx进入配置过程。
通过CubeMx神器做基本的初始化配置【RCC配置此处就省略了】。
LPTIM1的参考配置如下,具体应用时请结合实际情况来定,这里只需能产生周期性定时输出即可。
UART2外设没有什么特别要提醒的,这里就不贴截图了。我们重点看看有关UART TX的DMA传输的相关配置。
上图中蓝色圈里的勾选框对于本应用演示不是必须勾选的,勾选了也没关系,不会对本演示产生影响。DMA请求数设置为21,表示每检测到1个同步事件后DMAMUX为UART传输申请21个DMA请求,以批量传输21个字符“STM32 DMA SYNCDEMO ”。
完成图形化配置后,生成初始化代码并添加必要的用户代码。
#definePeriodValue (1000)
#define PulseValue (500)
#define Size (21)
uint8_tpData[Size]={‘S’,‘T’,‘M’,‘3’,‘2’,‘ ’,‘D’,‘M’,‘A’,‘ ’,
‘S’,‘Y’,‘N’,‘C’,‘’,‘D’,‘E’,‘M’,‘O’,‘ ’,‘ ’};
HAL_LPTIM_PWM_Start(&hlptim1, PeriodValue, PulseValue) ;
HAL_UART_Transmit_DMA(&huart2, pData, Size);
编译运行,验证结果。
代码运行后,可以通过示波器看到LPTIM的周期性PWM输出,同时PC端也可以看到如上面截图所示的周期性呈现的字符串。
OK,本次基于DMAMUX同步事件的应用演示就介绍到这里,供君参考,更多细节还请阅读STM32相关技术手册。
编辑:jq
-
示波器
+关注
关注
113文章
6303浏览量
186038 -
PWM
+关注
关注
114文章
5203浏览量
215100 -
PC
+关注
关注
9文章
2110浏览量
154806 -
代码
+关注
关注
30文章
4841浏览量
69195
原文标题:基于STM32 DMAMUX DMA同步事件的应用示例
文章出处:【微信号:aidanpianji,微信公众号:单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
氮化镓电源芯片和同步整流芯片介绍
同步电机的主要特性是什么?简单介绍
一文了解同步电动机起动原理是什么
【《大语言模型应用指南》阅读体验】+ 基础篇
TSN时钟同步 | PTP对时案例演示——基于NXP i.MX 8M Plus
【《计算》阅读体验】+一篇内容丰富的介绍计算的科普书
请问STM32L4R5ZI的DMA/DMAMUX是怎么管理请求?
STM32L4R5的DMAMUX异常原因?
STM32G070的DMA功能,如何实现外部中断触发DMA传输数据到IO口上?
关于STM32 DMAMUX模块具体的应用示例代码
![关于STM32 <b class='flag-5'>DMAMUX</b>模块具体的应用示例代码](https://file1.elecfans.com/web2/M00/C5/98/wKgZomYA0KWAXr1uAAActZx-jhs970.png)
GPS卫星同步时钟的工作原理及应用场景介绍
![GPS卫星<b class='flag-5'>同步</b>时钟的工作原理及应用场景<b class='flag-5'>介绍</b>](https://file1.elecfans.com/web2/M00/C4/EE/wKgZomX497uAcpZYAAFvFl9KQ-Y931.png)
评论