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

【经验分享】STM32CubeMX—PWM波输出实验

[复制链接]
STMCU小助手 发布时间:2022-5-15 14:51
定时器PWM波实验1 [8 D$ s+ t! k! e
实验说明7 }( T* @& ?0 Z
芯片:STM32F103RCT6: e( T8 t6 E! y7 c& `

( p+ r8 b& i! {实验内容:使用定时器2的通道1输出PWM波控制LED灯的亮度。9 x5 Q1 B2 V8 J( X. H9 I3 G

! t1 `, ^. Y( ^/ g" H* o实验操作7 {* I; h% ?! \3 `" E* O1 s) p
1、基础配置
) a5 n5 _' t5 [; `1)sys中,选好调试方式,例如jtag-4pin。
) N% u% k% T5 D( x3 ^; _) Q1 b8 p+ ?0 m
2)RCC时钟,晶振选择。! u6 e% D  D. R; c+ n" h' ]

# b5 U( ~( K. u3)时钟树配置。5 A; W- F! C4 U& a  I. ]3 b
7 ]; Q2 r9 s9 y. P5 {0 P
4)中断分组配置。8 O/ D1 f1 c' i) |8 s5 |6 n" v

. T& h( k: l+ q- z6 o$ [4 D以上步骤可以参考之前的实验。' x2 c$ x, p7 T* w- c4 s8 y9 g8 f! q

! Z$ b4 p, a, m' O0 V) {2、外设配置—PWM波配置+ @1 G1 W+ y; l( h; s* W+ ~
本次实验使用的是TIM2的通道1来输出PWM波。/ w  |4 M2 C$ H/ j3 r
$ C0 V  Q, i7 \: D
1) 如下图打开TIM2功能配置视图。
6 g! [5 R2 Q3 U​​​​​​ ]@V62%VE1)6W8{3PWZRO~Z0.png ( Y* w. A5 Y5 o7 _3 W
/ o& T- d$ D  A9 N( T7 ~  R
2)选择时钟,并且选择通道1的PWM模式。3 q, i* k* L% E' @% G0 |# c
  {1 n& W! |* a9 h; `
G2(64V%LUY3VD6]CBME8.png , @1 x" R9 }4 X6 U- Z4 o

3 U& ^1 C' \* u* a, l $]Q)5HD0}%)H`CLG7)0~A3C.png
3 z+ @1 |& j- g4 v& M. N# S% Z9 i3 C8 f6 G" o) l8 N# s' F/ x
注意载芯片示意图上 会看到下图 PA0 就是TIM2 的通道1 PWM波输出口。
  M$ f) r* O; e1 i
, ~8 W0 Q4 b5 S G%]MRP{HO}AAX){}P36W7QH.png 7 g3 q; b  @* g: l/ F

0 D$ V7 U" q8 L2 I0 I3)配置PWM波的参数7 v/ d4 ^4 y; D& ?

  w8 x! w3 l9 p0 V ~A2Z@SY%KXXVVO1VVVY6{H6.png 7 k( D* D, h  C2 r: ?

; k% @  c) ~& ]/ p- n$ o上图中需要理解两个点,
2 Z8 J2 {% B& w$ o/ }- g
5 E( E* s# ?) GPWM 的频率 :
+ m; r; E- t5 C8 M/ C$ v. i
& @+ s( }5 T! z: k/ Z 9)U1A(_GRR2@97H$V~9C]3D.png
9 d7 u, a+ ~0 v
' s5 R, x0 e) B( K" X2 B$ z  Q, zPWM模式和极性:( @3 ^. Y; Q8 O2 E6 {- `
PWM模式1,在向上计数时,一旦TIMx_CNT < TIMx_CCR1(就是上图中的6,计数比较值)。时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。; W2 s  s" J# o4 B
1 T! U4 o; E  {
PWM模式2- 在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为有效电平,否则为无效电平( p7 l2 J7 V% x) G4 z
% ?6 d. D+ H2 o2 p6 _! a
输出比较极性的指的是你在比较匹配之后输出口输出的极性。 这个函数就是让你设置有效极性,也就是设置比较输出的有效电平。你可以设置为高电平有效或者低电平有效。如果设置为高电平有效,那么当定时器比较匹配之后,输出口输出高电平,否则就反一下。* f" w! K8 _9 }( l
这里我自己的理解是,如果是PWM模式1,且向上计数,如果极性设置为低,那么 TIMx_CNT < TIMx_CCR1 时,输出低电平,更简单就是占空比为1 – TIMx_CCR1/(ARR+1). 如果极性为高,占空比就是TIMx_CCR1/(ARR+1)、
$ M" k& }3 }# O$ y
& w( ~8 P6 i4 d3 生成代码
$ [- S8 R9 U& f0 q" a" R" H由于这里不用中断,所以不用配置中断优先级。所以写好工程的名字和路径后,直接生成代码即可。
6 j6 E9 Z* i  }' Q' y
$ z  T* _( o  U. V' `% F4 在工程中开启PWM
1 ~) e+ I: i+ n* \+ A在完成以上设置之后,我们需要使能 TIM2 并且使能 TIM2_CH1 输出。在 HAL 库中,函数 HAL_TIM_PWM_Start 可以用来实现这两个功能,函数声明如下:
9 o: N8 H6 @& C% w- z9 a# \! J/ O% _
  1.                     HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
复制代码
+ l& T: X6 a  _
该函数第二个入口参数 Channel 是用来设置要使能的通道号。- @, j4 f' _; v4 B7 h  j' @; T

3 X0 m7 f) y" @; q8 @ B0)F(A~S[GML5CMJY@PW(DC.png + M( M7 l9 [7 }* x+ D7 n

( d. T& \/ V% L6 o  q, v5 修改占空比
7 }( X0 k. x) A2 ~3 `3 B% \
推荐使用寄存器的方式1 I& |- [, n- C! J% Q5 ?4 E

, l  n# I1 z) a7 d- O
  1.                               TIMx->CCRx = NUM;   (x为数字。 NUM 为一个数字 范围0 - ARR)
复制代码
" o: W2 k1 u0 p
6 测试" i( Z* i# O' y8 d
下载程序,然后可以使用万用表测试PA0口的电压值,为0.54~0.55V  K4 X& C( j  A" S( o1 ~( k; C
2 C5 c3 h: C$ y
`T{7JU4KQ]HII_79PDX@D)6.png
+ d  m; N2 d! R8 k( y: G" d8 n$ T' O: U) |; Z+ Q# g
(PWM模式1,极性为高 所以占空比为 150/900 * 3.3 为0.55V。- U( ~6 [' v" C# x* o  r" t
8 _' b! \# N1 k; G6 K
  s0 N2 N5 b1 w0 \8 p

5 e0 v* }+ H5 q% r4 n3 u% J. y/ F4 g
收藏 评论0 发布时间:2022-5-15 14:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

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