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

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

[复制链接]
STMCU小助手 发布时间:2022-5-15 14:51
定时器PWM波实验  p( D5 M$ M0 Q. r+ V1 Q% g5 U) H5 T
实验说明0 B& @9 m" V7 m  I& ]5 t; l  u
芯片:STM32F103RCT6
9 [& w& C4 ]% O$ ]. T9 ?+ x
/ q4 b! R1 \$ K& O; e2 x1 m% ]; b实验内容:使用定时器2的通道1输出PWM波控制LED灯的亮度。
& O4 ^$ p6 u. D( m3 a) @+ _
9 {$ V) {, E! L, j实验操作7 M, _% I  J5 B2 D
1、基础配置
6 p; _* @$ h* Q2 @( l( N1)sys中,选好调试方式,例如jtag-4pin。
. q7 i0 R- `$ t
% R6 @& j6 n9 P) J7 Q  F- F2)RCC时钟,晶振选择。
% k- u5 J* @: f# z6 O5 u
0 n: d+ v+ |: f+ R3)时钟树配置。
! s# {( ~. g$ O& ^/ L& e1 c( P5 n4 R3 r6 L8 R8 {( R
4)中断分组配置。
7 n' D7 Z& L( V- v! n$ U
/ A" v. i' m1 g- A) \. l% A5 j. A以上步骤可以参考之前的实验。; ^2 W8 j$ y+ ~: A5 e- P% T

: O/ \' o# D9 ^/ A* o8 G2、外设配置—PWM波配置
- b) a& R( z) F. w' b: M本次实验使用的是TIM2的通道1来输出PWM波。6 ^, A& y. f% b# b- G( }

4 A: q5 \  A- }; h. X. Z8 Q, Z2 m" Q1) 如下图打开TIM2功能配置视图。2 E$ s6 N) ?1 A1 G" O- Z
​​​​​​ ]@V62%VE1)6W8{3PWZRO~Z0.png & S. Q9 z* t8 `8 K# q
( ^- ?) y9 J2 T5 E* J0 L( \2 g
2)选择时钟,并且选择通道1的PWM模式。
& E: r" m# q. f6 h$ I2 ?
7 i" L4 a( D# j( Q/ ^3 K1 f2 _9 R G2(64V%LUY3VD6]CBME8.png
$ A: E' n- B) U3 H3 l6 c3 Q% ?* r/ Z! ?/ C0 s4 u9 e
$]Q)5HD0}%)H`CLG7)0~A3C.png
% X' G7 @" A0 d
- V9 C" v9 ~. p7 n; \. N' p注意载芯片示意图上 会看到下图 PA0 就是TIM2 的通道1 PWM波输出口。/ b8 p6 j+ S6 R& E: B  z4 C3 M# u/ Y
1 \5 ~; ]9 Q- P  V7 F2 r, q
G%]MRP{HO}AAX){}P36W7QH.png + i% E. A+ M) ]0 T5 Q
  @  r% p: Y( \  o  p$ C4 X0 H$ c
3)配置PWM波的参数( F0 \! f. c4 T& {. W% z

9 \+ a% k0 i- u' {. \5 ^/ J' y; n# b0 u ~A2Z@SY%KXXVVO1VVVY6{H6.png 4 j" d& {3 ~% C. _/ Y$ J% ^" R3 I
) d1 d4 _+ y1 q, C) V7 m: D
上图中需要理解两个点,
' D$ ^  Q4 t! ^7 a- K. N5 T6 x2 m6 M9 a6 a6 s6 Q
PWM 的频率 :1 A' C5 i6 v* }' ^3 m; k. U0 l

: Z! d5 [6 M( \* o1 Q 9)U1A(_GRR2@97H$V~9C]3D.png
% T# v- Z* h# [7 z4 ^. [( s/ v: h& s' d4 ]) b' b6 J
PWM模式和极性:1 w( \1 r- C( E4 x+ k3 H
PWM模式1,在向上计数时,一旦TIMx_CNT < TIMx_CCR1(就是上图中的6,计数比较值)。时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。5 S# k$ P. e" \, L

. W0 a5 h5 r- l/ k' e+ f- kPWM模式2- 在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为有效电平,否则为无效电平
5 X1 h+ u! e5 }- U' T) G: V9 U& i( S
输出比较极性的指的是你在比较匹配之后输出口输出的极性。 这个函数就是让你设置有效极性,也就是设置比较输出的有效电平。你可以设置为高电平有效或者低电平有效。如果设置为高电平有效,那么当定时器比较匹配之后,输出口输出高电平,否则就反一下。
& s1 L7 e9 E; w$ I- }, Y5 H这里我自己的理解是,如果是PWM模式1,且向上计数,如果极性设置为低,那么 TIMx_CNT < TIMx_CCR1 时,输出低电平,更简单就是占空比为1 – TIMx_CCR1/(ARR+1). 如果极性为高,占空比就是TIMx_CCR1/(ARR+1)、' i0 Q4 L% J$ Q4 ^

' F% y( ]: v) Z3 J' ^: P5 h3 生成代码
9 c9 e( D: C' M( _! P/ g: v! h由于这里不用中断,所以不用配置中断优先级。所以写好工程的名字和路径后,直接生成代码即可。# _$ U- E* v" i5 p+ L
2 O) b7 |% J6 h3 c6 C5 A/ M! ^
4 在工程中开启PWM) ~% D5 N* f& J  k8 F, `+ R
在完成以上设置之后,我们需要使能 TIM2 并且使能 TIM2_CH1 输出。在 HAL 库中,函数 HAL_TIM_PWM_Start 可以用来实现这两个功能,函数声明如下:
& y6 G0 `7 o$ f, K, c' B# C, D$ y+ `5 c& o9 q
  1.                     HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
复制代码
+ |9 |- T) W6 X/ p: M
该函数第二个入口参数 Channel 是用来设置要使能的通道号。
0 X" u, P: D9 e% P- ^9 b3 v0 Z) |# U! R2 n$ h% M" x4 j2 v
B0)F(A~S[GML5CMJY@PW(DC.png
* v+ z" i0 ]  c! N5 F* Q0 {$ M- B7 `
5 修改占空比
+ j# M. h- o! E- z
推荐使用寄存器的方式& C7 {+ q8 ^$ }& D
2 o% {% S. k4 x, A
  1.                               TIMx->CCRx = NUM;   (x为数字。 NUM 为一个数字 范围0 - ARR)
复制代码
, X, _3 x, A8 b
6 测试0 F& u9 P8 _  ]7 L7 I
下载程序,然后可以使用万用表测试PA0口的电压值,为0.54~0.55V! q+ |  b' e, P  s- ~, }) N
9 {) ^# f4 T  r/ H  S: W
`T{7JU4KQ]HII_79PDX@D)6.png 8 ^) ~% b! m. u& l3 w

! H! a  W5 B; P& E8 C6 D) z2 u(PWM模式1,极性为高 所以占空比为 150/900 * 3.3 为0.55V。
; x* d' J2 m! v! c# Q! }3 R* V" |2 [' m& N
. `+ a9 G4 r4 ]! k' U% a

0 m; u4 c6 ~! h! O7 V3 ~$ O
收藏 评论0 发布时间:2022-5-15 14:51

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版