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

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

[复制链接]
STMCU小助手 发布时间:2022-5-15 14:51
定时器PWM波实验
- u- j; A% b' z/ S( |实验说明
7 D* Y& C/ G2 Q9 _: b* \- W芯片:STM32F103RCT6
5 F& s) k! V7 E0 \' `' Q) y6 e# @! T# y/ B3 A( r1 }' ?, d
实验内容:使用定时器2的通道1输出PWM波控制LED灯的亮度。
% H  M: i: x5 P3 d1 j/ `' D3 \0 t& n- X0 t2 z/ @" v
实验操作9 [  n9 s9 m! P8 O8 F( D5 f2 _
1、基础配置# F8 Z$ k5 _' d, D( @6 Y
1)sys中,选好调试方式,例如jtag-4pin。! t7 N4 r6 S3 f: D1 G; B( n+ `

. D' }3 Z5 ^, l7 U- N; U9 W: v2)RCC时钟,晶振选择。: y. f# R3 i; k& K% T
4 L% W* \  `" s% ]3 M2 d9 @0 P7 b$ h, Y
3)时钟树配置。# H" A+ O8 ~8 y$ ?3 [
4 p5 a2 S: d, }4 u5 ~8 e
4)中断分组配置。+ j+ L' c( T9 Z
& }& y" B/ z- G
以上步骤可以参考之前的实验。2 O% u, i; i4 o6 ^2 ?

: r6 E- N$ U+ s/ L* t2、外设配置—PWM波配置+ m1 w" N5 N# x7 e- R& |+ ^
本次实验使用的是TIM2的通道1来输出PWM波。
% u6 C$ b/ k8 k2 E( I/ S* ?7 i$ H
) s" e7 g  Y# y* q, b1) 如下图打开TIM2功能配置视图。( A7 h$ R3 D* f3 d6 {( ]* `0 L& N7 u, U
​​​​​​ ]@V62%VE1)6W8{3PWZRO~Z0.png
8 s8 c( Q7 D$ ?7 K* d  v' h0 |) I! k6 R5 ^/ Z; m5 F
2)选择时钟,并且选择通道1的PWM模式。$ c, D, y: l! Q7 {% d
0 X' u4 c1 I# X, t
G2(64V%LUY3VD6]CBME8.png 7 d' p( J+ E- \& t6 ]

' j( U4 f. r! W4 t6 y0 z( h( t+ a $]Q)5HD0}%)H`CLG7)0~A3C.png ' P! f' s3 E, l1 ?

$ z- _$ w; H/ z/ M- \6 Q注意载芯片示意图上 会看到下图 PA0 就是TIM2 的通道1 PWM波输出口。
" V3 j2 K/ w4 K- b# W7 [$ |: {( }/ z' X! V/ U9 ~8 f
G%]MRP{HO}AAX){}P36W7QH.png
& |# g% E, c4 n/ c2 _+ f: S
- d) k9 A' s0 ^. s9 V  Z2 O3)配置PWM波的参数0 [5 g6 b, T1 q  S/ l( }

" S& A/ }3 M! X/ G5 w6 t, {2 d ~A2Z@SY%KXXVVO1VVVY6{H6.png
4 j, |/ F+ ]/ ^, W/ E- j2 [/ O5 U
: h3 T7 i) w- y3 T. ?. }+ o上图中需要理解两个点,
5 O' H& {) J# b5 s2 M! z' B! F/ h# I7 Y1 [( |
PWM 的频率 :
2 m1 w, ~2 P9 H3 l/ J7 {6 S9 \: {: B
' k% W* E7 `. W0 F4 w8 z* Z" @) U3 c 9)U1A(_GRR2@97H$V~9C]3D.png
3 S5 L9 N- c4 a6 k8 a5 m( ?' B5 s  l$ k4 D
PWM模式和极性:
) A; Y+ c4 Z% J4 CPWM模式1,在向上计数时,一旦TIMx_CNT < TIMx_CCR1(就是上图中的6,计数比较值)。时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。& x' \5 Z# j9 g- }. x5 ]( I
, k3 i0 k2 w) m: d
PWM模式2- 在向上计数时,一旦TIMx_CNT < TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT > TIMx_CCR1时通道1为有效电平,否则为无效电平
" ~/ s; e# m, U7 o- Y6 p% _+ W! c; Q6 G! F& e# D  s8 V
输出比较极性的指的是你在比较匹配之后输出口输出的极性。 这个函数就是让你设置有效极性,也就是设置比较输出的有效电平。你可以设置为高电平有效或者低电平有效。如果设置为高电平有效,那么当定时器比较匹配之后,输出口输出高电平,否则就反一下。
$ W) }8 w1 ^$ Q2 B- X这里我自己的理解是,如果是PWM模式1,且向上计数,如果极性设置为低,那么 TIMx_CNT < TIMx_CCR1 时,输出低电平,更简单就是占空比为1 – TIMx_CCR1/(ARR+1). 如果极性为高,占空比就是TIMx_CCR1/(ARR+1)、! G! r; }9 c( R( W
: L" M0 N6 Y8 {
3 生成代码
- J2 @, m2 C; f2 _由于这里不用中断,所以不用配置中断优先级。所以写好工程的名字和路径后,直接生成代码即可。
$ u5 E  [; p! E; M/ B) {' l8 s4 u& v1 @
4 在工程中开启PWM$ K+ a( @( y0 S2 `8 A9 o; J
在完成以上设置之后,我们需要使能 TIM2 并且使能 TIM2_CH1 输出。在 HAL 库中,函数 HAL_TIM_PWM_Start 可以用来实现这两个功能,函数声明如下:2 Q1 A& C5 i2 t( u, B1 p  V, q

  z0 Y7 F- V, w. _2 B9 g9 T  f4 P2 X3 `4 Q
  1.                     HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
复制代码

0 h" f9 ~( X- `/ _" @该函数第二个入口参数 Channel 是用来设置要使能的通道号。
' p$ B: p' Z* \- v
( k3 H* S: @9 _7 h# r B0)F(A~S[GML5CMJY@PW(DC.png : m8 ~1 ]- n6 i) X2 }: t2 t
( J1 l3 F" F2 S: _6 t
5 修改占空比

1 k' @" w8 ?7 K4 _推荐使用寄存器的方式
: R' }& H9 }  c% U# m+ \
2 c3 y8 ^! W. ]3 \  B7 C% L: T
  1.                               TIMx->CCRx = NUM;   (x为数字。 NUM 为一个数字 范围0 - ARR)
复制代码
& u/ a, k! ]! _7 F9 v$ q
6 测试0 z. Z, D5 P' c0 O: P5 `. p" {
下载程序,然后可以使用万用表测试PA0口的电压值,为0.54~0.55V
+ s0 Z$ x, e0 R& }. I4 f
, _6 V) D: c+ }% n `T{7JU4KQ]HII_79PDX@D)6.png
6 p6 B, H7 b5 @5 H( `2 e. }6 [6 c4 g) l8 {# l5 {
(PWM模式1,极性为高 所以占空比为 150/900 * 3.3 为0.55V。
0 c, a' m/ u; r0 `
1 ^, j5 N" Q: H5 D8 l6 M  y
4 l, n3 ?/ j' O" R% Z
  n# ]# I5 C( U6 p: H0 g
收藏 评论0 发布时间:2022-5-15 14:51

举报

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