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

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

[复制链接]
STMCU小助手 发布时间:2022-5-2 09:04
在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。
  A% Y5 k9 K) m' {$ N7 V
5 a" D( g. R* M# cPWM的有效输出电平在TIMx_CCER寄存器设置。
& ~  a; ~: q, B: `2 i4 O, i% s( _) t. B  V  k4 j8 H  N* B
D34@M5J}%4OFM[FOO8}2)VP.png 5 {4 V( }' X' M

; l- C/ u, |) }2 q5 @) ?' n; NTIMx_CCER.1为0,OC1高电平有效;TIMx_CCER.1为1,OC1低电平有效。其他通道同理。$ \* H) [/ B) k) K  Y5 ~" e
% b$ Z3 ~. `6 |& e6 u7 V! C8 G
在PWM初始化函数中,通过TIM_OCInitStructure.TIM_OCPolarity设置输出极性,- }5 T# j" [: @9 p3 V) f! m
$ X7 Y  o# u# M8 M5 @# |1 C. \) J
  1.     //配置PWM模式(TIMx_CCMR)
    6 u$ g" t" T$ Z( K
  2.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    1 B/ f7 Y8 \3 m0 _" b
  3.     //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚
    " _+ v4 y8 i4 Q( K% D
  4.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;! p4 j7 m$ i, ~& I/ f
  5.     //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效" n; s, `# o- [. W
  6.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;+ W( J6 Q5 U" }7 i  Z
  7.     //配置CCR寄存器(TIMx_CCRx) 16位宽+ ?4 z; I5 i  I+ @& O7 W, F% M
  8.     TIM_OCInitStructure.TIM_Pulse = 64;
    2 J6 [, H% h, t* C& E! X
  9.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
复制代码

* l" X: g! ^) C& v3 W! V如下代码摘自库函数TIM_OC2Init,说明在PWM初始化过程中确实是通过配置CCER寄存器对应位设置PWM的输出极性。
7 d7 V& [& E! c  a3 `8 e
; a0 L2 w  ?2 I9 S, n
  1.   tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
复制代码

: ]' X0 B2 T7 d# j) U$ c下面通过示波器实验PWM的输出极性控制,
% b8 ?  x) Q" D& |
) B7 P& X# V+ D; `) H! Q2 ~& I
  1.     //配置PWM模式(TIMx_CCMR). i$ A* @( N5 V9 k/ {0 G
  2.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;3 Q3 A( `8 D3 S' p3 S
  3.     //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚( W. X4 R# F) B8 _" b; j  R& h
  4.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    ' B  b; B! ^$ f. B
  5.     //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效9 q& C- r6 \; g6 \6 a& c: m
  6.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    / |( m' t% i( y( v. a, H. `* D4 k' P
  7.     //配置CCR寄存器(TIMx_CCRx) 16位宽
    * E9 ^& V; @8 D9 Z* H
  8.     TIM_OCInitStructure.TIM_Pulse = 64;! K- J( T$ O! g
  9.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    ( e' X. `/ s7 d

  10. ' a$ m! {! K* R- I9 r
  11.     //使能OC2的预装载寄存器(TIMx_CCMR.11)$ Z9 A2 g) I3 j) s
  12.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
    6 R; {7 w  A% E8 l- }
  13.                
    - a, }8 U1 S5 A9 {) A
  14.     //TIM_Cmd(TIM3, ENABLE);
复制代码

% d0 u- F8 B4 |2 E, K) K4 N* A如上代码设置,初始化TIM_OC2Init后,PWM输出即刻接到对应引脚PA7,此时CCR2寄存器内的值64与定时器计数值比较,因为我们没有打开定时器,所以此时CNT寄存器为0,有CNT < CCR2,在PWM Mode2下,输出无效电平,如上代码设置有效电平为低电平(即无效电平为高电平),因此此时应该输出高电平,8 U# Q1 u( `8 L
}]`%Q3JTD@`(BVRN$Z}8.png 6 D% M* K5 b+ B9 ^3 G1 j$ g
5 f5 x8 F! w- R
修改上述代码,将有效电平修改为高电平,4 P5 n: I( _! F" q$ y; O
& O  ~& u5 K& G3 G7 _* r8 G5 N5 X
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/ ^4 j) ?& E. ^1 s* ~

( t0 a6 }; W4 w此时示波器的输出如下,
: f1 B$ l8 E& h+ P
- w% _7 i" `' i XWX`J(9)S[T6JM@KR86[VXQ.png 2 |% Z+ i1 A8 E3 k

& H) g, [2 d2 p6 z1 r7 I1 z, \( i
0 b4 l; e) ]% K' s1 S& f) _
/ x' t5 F% v( p' K- B( u. P% z$ Y( l
; |2 S  B3 h/ _1 G3 e+ P: r$ x' `5 r, B, F) ~) `' w
收藏 评论0 发布时间:2022-5-2 09:04

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版