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

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

[复制链接]
STMCU小助手 发布时间:2022-5-15 14:51
定时器PWM波实验) S# z: L, e! L/ ?- c
实验说明2 z, z7 q& I. Q# ?) T
芯片:STM32F103RCT6
& i7 Z6 W5 y0 f. E
3 G" q% S# m. N1 e实验内容:使用定时器2的通道1输出PWM波控制LED灯的亮度。
, L% G% M, T5 C: E4 ~3 H" ]# B# e5 E, K8 Y: Y$ j# p$ ^
实验操作) Z9 a  Y9 C1 W# f+ p2 D
1、基础配置
- t3 k  u5 M4 f1)sys中,选好调试方式,例如jtag-4pin。
2 C8 z6 l* c2 E& h1 P) h  z1 \7 D, f8 X
2)RCC时钟,晶振选择。
) m+ {9 E& l- q( p  X4 o! p( h2 N& p/ l/ Q3 Y
3)时钟树配置。2 G4 f/ F: V! ~! y: N( K, h* k
* p" }' u! P- I
4)中断分组配置。
/ Z$ B* e+ ~4 v  D+ ~1 s1 q2 p. h0 v4 b
以上步骤可以参考之前的实验。
5 ]8 L2 \8 U" p, l$ r
* F' S7 Z* K$ a. g, O5 Q+ `2、外设配置—PWM波配置" Q: {4 v  p3 c; m
本次实验使用的是TIM2的通道1来输出PWM波。
' y- l% ^2 J  w5 M* ?( |. _! S  ]/ ?4 k9 x
1) 如下图打开TIM2功能配置视图。3 S9 H& D, @% w
​​​​​​ ]@V62%VE1)6W8{3PWZRO~Z0.png + c$ W  G" c. ?$ N2 e" h
: S9 [7 _5 o6 r; G9 R7 F; }
2)选择时钟,并且选择通道1的PWM模式。
* Y& e" @3 V5 r5 F& B( m& V1 I8 g/ l( X9 E3 N$ o
G2(64V%LUY3VD6]CBME8.png
! M7 m7 E# L( U+ _3 U, t+ o; M+ n2 H; K; \/ |/ x) a1 m
$]Q)5HD0}%)H`CLG7)0~A3C.png
# B/ K# n( [! ~4 H3 }; b! R
' S% e3 C$ y0 {: I# t3 c$ P注意载芯片示意图上 会看到下图 PA0 就是TIM2 的通道1 PWM波输出口。7 W+ T8 |( M& ]( g; I

; @: s2 R$ }3 k! X3 [2 \ G%]MRP{HO}AAX){}P36W7QH.png
' P* ^! \, J! a5 J2 D; @& _; B" q2 w$ W5 {; O
3)配置PWM波的参数
$ C2 F; S$ x2 t. ?1 p
# o% J9 t+ L9 c- o  C* W2 X ~A2Z@SY%KXXVVO1VVVY6{H6.png
- b9 G" K7 N, I
: z3 [* M9 x; T7 Z上图中需要理解两个点,
) A1 G' J+ ^! o% I6 m5 b7 P
% c# n' }( u) ~$ B0 JPWM 的频率 :' e* r) \, C( @0 E2 a& _! |3 f
6 \8 x# {$ A8 [! u( |5 I- Y
9)U1A(_GRR2@97H$V~9C]3D.png ' ]6 t9 G1 a! }' W7 i
& h: z: X" W0 b# o. X8 X" Z
PWM模式和极性:
4 z$ s3 g0 S& v: GPWM模式1,在向上计数时,一旦TIMx_CNT < TIMx_CCR1(就是上图中的6,计数比较值)。时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。6 o8 B6 R$ D8 z5 w2 Z6 @
4 Z2 I9 N* |% y9 i6 c4 `( _6 k
PWM模式2- 在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为有效电平,否则为无效电平, s) m. V( c3 C* z+ }* D* s
1 c8 S2 E+ m2 [
输出比较极性的指的是你在比较匹配之后输出口输出的极性。 这个函数就是让你设置有效极性,也就是设置比较输出的有效电平。你可以设置为高电平有效或者低电平有效。如果设置为高电平有效,那么当定时器比较匹配之后,输出口输出高电平,否则就反一下。- H: \. T6 M# h% m4 j! O* U
这里我自己的理解是,如果是PWM模式1,且向上计数,如果极性设置为低,那么 TIMx_CNT < TIMx_CCR1 时,输出低电平,更简单就是占空比为1 – TIMx_CCR1/(ARR+1). 如果极性为高,占空比就是TIMx_CCR1/(ARR+1)、
5 q( i: |4 a7 Z) D- f& ^
$ h" O/ V! r- f3 p7 S6 p3 }3 生成代码
4 w+ j( S# ]& R2 V/ V& Q: ^由于这里不用中断,所以不用配置中断优先级。所以写好工程的名字和路径后,直接生成代码即可。
  u" g3 |0 C) T( C9 b" D. z8 J
4 在工程中开启PWM& C/ A* r2 u: Z# V
在完成以上设置之后,我们需要使能 TIM2 并且使能 TIM2_CH1 输出。在 HAL 库中,函数 HAL_TIM_PWM_Start 可以用来实现这两个功能,函数声明如下:/ K2 H' ^; H+ M9 Q" |
/ u; A) p) v( R9 G3 s6 [
  1.                     HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
复制代码
& d- D7 ~% ?+ [# x/ f! ~
该函数第二个入口参数 Channel 是用来设置要使能的通道号。% y! m8 E* k9 d) Y
7 }! o/ ?! @4 M. G3 I# I" z$ L
B0)F(A~S[GML5CMJY@PW(DC.png 9 Z; _- e8 W! \" e( i) ]
( L* U* x# O# j3 W. U% O) p4 H
5 修改占空比
1 [" N1 Y, q! v8 q- \
推荐使用寄存器的方式2 Y5 x' J% k# F  l: L0 Z3 P8 U' Q
* J5 U. L" M, r+ D$ j
  1.                               TIMx->CCRx = NUM;   (x为数字。 NUM 为一个数字 范围0 - ARR)
复制代码
4 k! J" t% f. r
6 测试
7 ]1 Q: \! }2 Q  S* @. j3 i" w下载程序,然后可以使用万用表测试PA0口的电压值,为0.54~0.55V4 ?5 ^3 s; k) U1 y

- q  o  R' E/ y1 V `T{7JU4KQ]HII_79PDX@D)6.png
2 |. z7 B& P! V: `; |2 I/ f) j3 f* `6 l3 j8 p
(PWM模式1,极性为高 所以占空比为 150/900 * 3.3 为0.55V。
1 F% ?/ d2 c- C% z4 G7 K
* @; s+ f3 ~6 B8 J
" Y* W, W; w7 X, J9 I$ D4 i9 v2 C# n  M( g6 Y$ ?" r
赞 收藏 评论0 发布时间:2022-5-15 14:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

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