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

【经验分享】STM32 PWM输出极性的实验

[复制链接]
STMCU小助手 发布时间:2022-5-2 09:04
在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。; `4 I! o9 ~2 z+ t4 k
) _% X+ q" T- T# h5 V! [3 K
PWM的有效输出电平在TIMx_CCER寄存器设置。
, t$ l4 ^% ]/ k0 ]  [5 q1 o! W
D34@M5J}%4OFM[FOO8}2)VP.png 2 \* l) l: H8 A" Q  x! O0 W

, U* `* ]2 N7 C( E  bTIMx_CCER.1为0,OC1高电平有效;TIMx_CCER.1为1,OC1低电平有效。其他通道同理。
0 f) _! c% O4 L  }4 c6 R, o' b/ G! A& O- ^+ @
在PWM初始化函数中,通过TIM_OCInitStructure.TIM_OCPolarity设置输出极性,
. E! f, B2 l: q6 p  o$ H
/ L1 e2 l2 V7 S$ B* y! D
  1.     //配置PWM模式(TIMx_CCMR)+ ?! _0 Q- Z9 s+ x6 J
  2.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;* o4 I6 F2 J/ H+ M% x; ?2 @9 @
  3.     //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚7 C+ O6 K; v1 ?7 f! {# V& y
  4.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    ( h& B: `; [5 ~8 D5 b% l1 Y
  5.     //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效
    : V8 A$ E, n% f3 \# L/ T
  6.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    0 N* S  o" W9 ^- h. S
  7.     //配置CCR寄存器(TIMx_CCRx) 16位宽& B0 [, Y6 O5 M- t0 P$ s+ O
  8.     TIM_OCInitStructure.TIM_Pulse = 64;- z1 }: Z$ |2 R) i& m
  9.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
复制代码
4 Z! j( V+ Y5 i
如下代码摘自库函数TIM_OC2Init,说明在PWM初始化过程中确实是通过配置CCER寄存器对应位设置PWM的输出极性。
3 h7 `% v5 P# H3 v
% K4 a: ]" g! V$ o! f' K) N
  1.   tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
复制代码
7 n4 x; s) l. ?2 |) d; V
下面通过示波器实验PWM的输出极性控制,4 |( ~1 G' z9 M: }. n) _0 t+ ~
4 O. |, r1 i6 ]) b/ r
  1.     //配置PWM模式(TIMx_CCMR)/ n& \7 _1 w. t; P- _/ S
  2.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;0 o; ^3 f# Z, c  ^
  3.     //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚3 O8 X* ]% j# R3 H! Z
  4.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;" i0 V# _2 a2 b
  5.     //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效- J1 T& a/ U, E- T' v" p" R1 X
  6.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    3 B5 n! l2 z1 N8 I4 q6 ^( O
  7.     //配置CCR寄存器(TIMx_CCRx) 16位宽
    ( {; q( q- w; \. U% S$ Q, e4 b
  8.     TIM_OCInitStructure.TIM_Pulse = 64;8 y- d$ N: l* `8 a
  9.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    ; Q3 j+ ], ~7 S4 U. n
  10. & Z$ t) u) V( w2 S7 R) L2 V& W
  11.     //使能OC2的预装载寄存器(TIMx_CCMR.11)
    $ r" K4 j* z2 n9 x
  12.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
      q, P# u0 ~, P" k
  13.                
    * d2 M9 O7 ?/ R8 M! @; b9 A
  14.     //TIM_Cmd(TIM3, ENABLE);
复制代码

$ t4 J/ U( ~9 K7 o如上代码设置,初始化TIM_OC2Init后,PWM输出即刻接到对应引脚PA7,此时CCR2寄存器内的值64与定时器计数值比较,因为我们没有打开定时器,所以此时CNT寄存器为0,有CNT < CCR2,在PWM Mode2下,输出无效电平,如上代码设置有效电平为低电平(即无效电平为高电平),因此此时应该输出高电平,5 G( R! R/ C% k
}]`%Q3JTD@`(BVRN$Z}8.png 1 g2 F' L& Z  k5 O" r
& M6 y; d7 z# d- l# `
修改上述代码,将有效电平修改为高电平,
' r) b% M# d4 q, ^- J5 @3 d1 V, T+ G6 b. f
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;: V" K" e6 W) W# f% [5 R% Y' U

& V0 P( d6 O3 P# G. s  B( {" V此时示波器的输出如下,! F8 Y- V6 |7 `

& i3 g5 T1 s) d* Z XWX`J(9)S[T6JM@KR86[VXQ.png 3 s) j1 I8 B& B
3 {2 p8 U2 E5 }2 P6 y4 \" D$ I- L
/ a% j- t+ J0 _3 o2 j8 L
* X. F( S. R0 K! }: }. \: j
5 L: q; S% a+ }8 G! c7 ]4 t

3 @$ Y3 C8 j' w' H4 u$ _
赞 收藏 评论0 发布时间:2022-5-2 09:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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