
![]() y+ g6 A- y. E( Y# w 8 X& l& q/ ]# v+ v* V STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,同时也大大拓展了DMA请求事件,不再局限于外设事件,比方可以基于GPIO的外部中断事件、或者DMA事件本身来触发DMA传输。另外,DMA传输的实现还可以基于其它触发事件来同步其操作,即DMA传输的实现需要借助其它同步事件来真正启动。 ![]() 本文就基于STM32G4芯片简单介绍下该话题,这里要实现的功能大致是这样的:片内低功耗定时器LPTIM1的定时输出作为DMAMUX的DMA同步输入事件,该同步事件触发UART的DMA传输,通过UART输出一段字符。 ![]() 3 M/ Q1 j, X8 {" h 5 q8 B! `$ u1 x 本演示例程基于STM32G4系列的Nucleo板进行。低功耗定时器LPTIM工作在PWM输出模式,DMAMUX基于LPTIM每次的定时输出事件为UART2申请一定数目的DMA请求,然后DMA将数据从内存送到UART的数据寄存器并最终将内容显示在PC串口终端。 ![]() ; u' [( p9 _6 u: Q$ } ( r9 ]/ I- X% C7 v% I& u3 }4 T: X" W& q2 D 下面就直接使用STM32CubeMx进入配置过程。 . \# ^2 n3 G P D # M% J6 f) P' C2 {1 W5 {- ` 通过CubeMx神器做基本的初始化配置【RCC配置此处就省略了】。* z3 G7 w9 t' m8 P2 N% S " Z( k# J7 Y: a- W y LPTIM1的参考配置如下,具体应用时请结合实际情况来定,这里只需能产生周期性定时输出即可。 ![]() UART2外设没有什么特别要提醒的,这里就不贴截图了。我们重点看看有关UART TX的DMA传输的相关配置。 ![]() 6 t; }" q6 b6 J8 S2 J. ?+ [ 上图中蓝色圈里的勾选框对于本应用演示不是必须勾选的,勾选了也没关系,不会对本演示产生影响。DMA请求数设置为21,表示每检测到1个同步事件后DMAMUX为UART传输申请21个DMA请求,以批量传输21个字符“STM32 DMA SYNCDEMO\r\n”。 1 l# l- L) _2 r- t6 \ 完成图形化配置后,生成初始化代码并添加必要的用户代码。 + i0 D6 i! L0 D9 w # X- T1 a7 }! k) V/ ~ #definePeriodValue (1000) ! X) V* y, P& G+ X #define PulseValue (500) 3 C# E' v( S- T9 B # O) o" C# M# Y. Y& l# B: G5 c #define Size (21) . K4 s' h; g6 H% e4 U" Y0 {7 h" G0 { uint8_tpData[Size]={'S','T','M','3','2',' ','D','M','A',' ',\ 'S','Y','N','C','','D','E','M','O','\r','\n'};- E: j: @5 z ? $ r: W: m. g1 i" i HAL_LPTIM_PWM_Start(&hlptim1, PeriodValue, PulseValue) ;+ ?" B$ \, P+ F4 P& n- ?4 F! u " m) y- k( r& Y; q" x3 N HAL_UART_Transmit_DMA(&huart2, pData, Size); 编译运行,验证结果。 ![]() 代码运行后,可以通过示波器看到LPTIM的周期性PWM输出,同时PC端也可以看到如上面截图所示的周期性呈现的字符串。 b/ Z( ~( |+ t OK,本次基于DMAMUX同步事件的应用演示就介绍到这里,供君参考,更多细节还请阅读STM32相关技术手册。& r- V0 _' _( D0 w7 s) _ \( i ' C; A+ k7 Z3 B/ a% \ |
实战经验 | TrustZone应用中串口通信的DMA传输失败问题
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
STM32的DMA双缓冲模式详解
基于STM32的心率计以DMA方式获取传感器数据经验分享
基于STM32利用ADC+DMA采样显示经验分享
【经验分享】STM32使用DMA接收串口数据
基于STM32的DMA经验分享
基于STM32的ADC+DMA采样与板载运放跟随经验分享
基于STM32F407和Cubemx的ADC采集+DMA传输实现简易示波器经验分享