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

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

[复制链接]
STMCU小助手 发布时间:2021-8-17 10:25
1.png 1 l2 U! Q7 M' a5 a" j/ T4 W

+ }8 a: w' [$ S: `. c
; g7 g( v" O+ ]; W
STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,同时也大大拓展了DMA请求事件,不再局限于外设事件,比方可以基于GPIO的外部中断事件、或者DMA事件本身来触发DMA传输。另外,DMA传输的实现还可以基于其它触发事件来同步其操作,即DMA传输的实现需要借助其它同步事件来真正启动。# y7 A1 \7 }9 Y8 [+ u
2.png + s  ^; k1 |1 X! I6 [

4 d5 Y: M  ^  B$ H% H: C# G
6 @( k' \0 @* v( r; t& f
本文就基于STM32G4芯片简单介绍下该话题,这里要实现的功能大致是这样的:片内低功耗定时器LPTIM1的定时输出作为DMAMUX的DMA同步输入事件,该同步事件触发UART的DMA传输,通过UART输出一段字符。# o/ k/ I9 p, M  q7 e7 N  v
3.png
0 m+ Z" z. R8 R2 D8 U- _) c+ i% {5 l5 h  T* N
1 t# r9 G% r+ X* t* l! H& ~/ o
本演示例程基于STM32G4系列的Nucleo板进行。低功耗定时器LPTIM工作在PWM输出模式,DMAMUX基于LPTIM每次的定时输出事件为UART2申请一定数目的DMA请求,然后DMA将数据从内存送到UART的数据寄存器并最终将内容显示在PC串口终端。
1 F* U* s6 R4 {6 g) D& i4 G4 l7 A 4.png
' u4 U# {% i: d# W8 |2 H" R! B6 }# H) l$ ^
. e0 w  N5 M) G! N- K! G
下面就直接使用STM32CubeMx进入配置过程。
& l& n) Q) f6 L4 S6 W1 h2 N  n, t) G( X3 H3 i* @8 A% b2 I7 l

+ D" D& k" a% I( R4 E7 Y通过CubeMx神器做基本的初始化配置【RCC配置此处就省略了】。
# W/ x7 }6 D0 V; T, N
/ T4 q2 T* i& \% f4 G
; \5 h: O# Y  }" Z7 q
LPTIM1的参考配置如下,具体应用时请结合实际情况来定,这里只需能产生周期性定时输出即可。4 J1 q6 [- V- r' U
5.png 5 {3 n7 `9 ~5 I3 d* r

! M* a6 o) Z* |- ]" y) F9 {: G

, Q6 U5 v, X: `' E1 O& \' dUART2外设没有什么特别要提醒的,这里就不贴截图了。我们重点看看有关UART TX的DMA传输的相关配置。! H9 N( n6 ]: y
6.png 4 }5 l" B! h9 D9 W, E
' Y" W+ |3 n7 c" G2 q
( P2 ^3 ~% q0 @* C, k1 c: Q
上图中蓝色圈里的勾选框对于本应用演示不是必须勾选的,勾选了也没关系,不会对本演示产生影响。DMA请求数设置为21,表示每检测到1个同步事件后DMAMUX为UART传输申请21个DMA请求,以批量传输21个字符“STM32 DMA SYNCDEMO\r\n”。
' S" \6 ?7 W" s4 `2 x' E# J; f3 m- [/ g# W" f0 e" B
. n' s/ r$ Q& B; w; w
完成图形化配置后,生成初始化代码并添加必要的用户代码。
- V  m+ U% I* X  N' E3 b0 ~" [, r5 p" }3 u* m+ Q- @
# R6 V  Z7 b& R* R
#definePeriodValue (1000), e' q+ Q9 u% k6 z) K- R4 Q
4 u& Y* n3 ~  R, L$ \; V5 ^

0 h! M& x/ ^# x. d#define  PulseValue (500)0 @( F4 ]! m* S; m5 l* J
3 l1 _. H0 e- b; E6 K
  q6 f2 \( U, B8 }1 e
#define  Size (21)
" T' |; s5 c1 d+ m+ I/ j$ t0 `, m8 c; v! @" J1 m+ A

$ v' |* J' P! |) c3 Puint8_tpData[Size]={'S','T','M','3','2',' ','D','M','A',' ',\
# v0 K, ]: K/ n
6 O2 l1 o# o8 z" h6 c

5 Q! L4 {" d/ x0 O& M, I'S','Y','N','C','','D','E','M','O','\r','\n'};
1 M# C2 O( y( A8 \4 g2 v' T
) r2 }( S; G: j& a4 e' ]5 @. N9 S
- c  L1 s7 M4 y: Q' e+ a( q: K, I
HAL_LPTIM_PWM_Start(&hlptim1, PeriodValue, PulseValue) ;. a1 G: V2 J6 _, e8 j
5 S% G0 t* H, S$ E5 S# ~  M

$ Z3 j5 e5 x& G% F9 q, g5 IHAL_UART_Transmit_DMA(&huart2, pData,  Size);
5 j3 ~( s) |5 B/ k/ q3 X0 w3 y
$ B$ q% A. ]. n) W8 |' m

, T: X* U4 `/ u5 D2 A. q编译运行,验证结果。
% H% b, E8 H- `/ s  t0 s2 [ 7.png
& a, Y. {+ T7 t5 [8 ^! u* c0 h" k代码运行后,可以通过示波器看到LPTIM的周期性PWM输出,同时PC端也可以看到如上面截图所示的周期性呈现的字符串。8 t5 s9 ^& v+ [* v; k8 X

& V8 A8 n9 }5 i2 n: ?: M+ t9 P
6 r  ^# K) V( q1 C7 ]) _. R
OK,本次基于DMAMUX同步事件的应用演示就介绍到这里,供君参考,更多细节还请阅读STM32相关技术手册。
- K, o; A8 w$ A- i/ q2 C/ ~3 u( J) i0 d; T/ s; c/ J  p
赞 收藏 评论0 发布时间:2021-8-17 10:25

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版