你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32 DMAMUX DMA同步事件的应用示例

[复制链接]
STMCU小助手 发布时间:2021-8-17 10:25
1.png * R. U; s, c0 U4 _( Q
  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传输的实现需要借助其它同步事件来真正启动。
# h' A3 }6 @- q& o 2.png
7 P- y2 }) p: T3 E3 R  l
9 Q! G# K7 o( @& [

. v$ H% @0 O. @# Z" ?2 E本文就基于STM32G4芯片简单介绍下该话题,这里要实现的功能大致是这样的:片内低功耗定时器LPTIM1的定时输出作为DMAMUX的DMA同步输入事件,该同步事件触发UART的DMA传输,通过UART输出一段字符。
& q7 Y" C3 o$ n4 z! j 3.png
; P+ ?$ _( Y3 e  }2 N# G+ k3 \! j3 M/ Q1 j, X8 {" h
5 q8 B! `$ u1 x
本演示例程基于STM32G4系列的Nucleo板进行。低功耗定时器LPTIM工作在PWM输出模式,DMAMUX基于LPTIM每次的定时输出事件为UART2申请一定数目的DMA请求,然后DMA将数据从内存送到UART的数据寄存器并最终将内容显示在PC串口终端。
7 `4 V6 L2 V" D( ^, J8 E 4.png
/ a% p6 g" B5 V4 P* X; u' [( p9 _6 u: Q$ }
( r9 ]/ I- X% C7 v% I& u3 }4 T: X" W& q2 D
下面就直接使用STM32CubeMx进入配置过程。
, P/ S: u+ I4 B: t* G& N4 p. \# ^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

1 w. R9 B  A, y' }LPTIM1的参考配置如下,具体应用时请结合实际情况来定,这里只需能产生周期性定时输出即可。
6 F9 J9 `. _$ ^$ X; |! Z% q8 S( U 5.png 9 w$ e$ z/ r1 K7 c- C7 P

+ V, C+ n. e1 l: @' f

% b. u+ x3 |# Q' ^8 j  O) N1 NUART2外设没有什么特别要提醒的,这里就不贴截图了。我们重点看看有关UART TX的DMA传输的相关配置。
% }1 @5 v- `9 F9 u* ? 6.png   K9 ~. _3 U) H" u2 b5 b9 ]( K

( ^/ }) i5 b" ~8 G( M
6 t; }" q6 b6 J8 S2 J. ?+ [
上图中蓝色圈里的勾选框对于本应用演示不是必须勾选的,勾选了也没关系,不会对本演示产生影响。DMA请求数设置为21,表示每检测到1个同步事件后DMAMUX为UART传输申请21个DMA请求,以批量传输21个字符“STM32 DMA SYNCDEMO\r\n”。
1 q. m7 P0 A( Q  _
8 f: g$ A; {! {$ L+ X. ?# w! S
1 l# l- L) _2 r- t6 \
完成图形化配置后,生成初始化代码并添加必要的用户代码。
9 Z; Q9 n" D" v" L+ i0 D6 i! L0 D9 w
# X- T1 a7 }! k) V/ ~
#definePeriodValue (1000)
' J( X" N% I3 b% B, R7 V! X) V* y, P& G+ X

7 c7 |3 a! h& e#define  PulseValue (500)
3 @8 c% L4 N: [3 C# E' v( S- T9 B
# O) o" C# M# Y. Y& l# B: G5 c
#define  Size (21)
4 J3 t9 w( z" U- ~% j4 u
1 i& P4 {4 X/ o) A+ H
. K4 s' h; g6 H% e4 U" Y0 {7 h" G0 {
uint8_tpData[Size]={'S','T','M','3','2',' ','D','M','A',' ',\
# e& l0 O- F. A' E6 i" c
( Q3 a  A3 Q: b

0 L2 L+ E* B! |% R: J'S','Y','N','C','','D','E','M','O','\r','\n'};- E: j: @5 z  ?
$ r: W: m. g1 i" i

8 x9 h. L/ p8 v+ y( a1 d- g' P( J$ }HAL_LPTIM_PWM_Start(&hlptim1, PeriodValue, PulseValue) ;+ ?" B$ \, P+ F4 P& n- ?4 F! u

/ s7 o: W) X/ A! W3 q
" m) y- k( r& Y; q" x3 N
HAL_UART_Transmit_DMA(&huart2, pData,  Size);
7 u3 h. `6 x; Y& s2 H) X$ i5 d0 H0 I
, [& g+ Q+ y* i

+ s+ W! Y! X0 b$ O- z编译运行,验证结果。
) n9 y& e4 D+ k$ c, o: Z# | 7.png & f, p9 Q( d" z# W8 r" q( Q$ s
代码运行后,可以通过示波器看到LPTIM的周期性PWM输出,同时PC端也可以看到如上面截图所示的周期性呈现的字符串。
/ i1 e. C9 i9 s# ~9 G6 N" S  b/ Z( ~( |+ t

8 C$ i6 T, e/ Z5 F% M! iOK,本次基于DMAMUX同步事件的应用演示就介绍到这里,供君参考,更多细节还请阅读STM32相关技术手册。& r- V0 _' _( D0 w7 s) _  \( i
' C; A+ k7 Z3 B/ a% \
收藏 评论0 发布时间:2021-8-17 10:25

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版