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

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

[复制链接]
STMCU小助手 发布时间:2022-5-2 09:04
在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。$ F& x0 A3 {4 S" ]+ y& m* e
: J9 Z6 T2 D# L9 u, c& _
PWM的有效输出电平在TIMx_CCER寄存器设置。7 ~5 t) j- x* {4 P
6 _9 O. x8 M) \( g# d$ S1 U5 t8 t
D34@M5J}%4OFM[FOO8}2)VP.png
/ e2 k6 v; g' l! u; F* Z: o
1 q3 t# L! [- ?TIMx_CCER.1为0,OC1高电平有效;TIMx_CCER.1为1,OC1低电平有效。其他通道同理。0 B" _& j# i' I& Y( q$ ^) T, [

6 V) l! _! p/ `  F& k/ U9 s: u* X在PWM初始化函数中,通过TIM_OCInitStructure.TIM_OCPolarity设置输出极性,/ o$ s" A9 i. s  Q4 m& m

4 \7 N& y, T* [% A# v  q- n
  1.     //配置PWM模式(TIMx_CCMR)
    1 n0 m! q* d4 H% k
  2.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;$ U0 G& W7 ]' U- P) e
  3.     //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚! A7 k* h$ J" R6 p6 _
  4.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    , \% a' e( F- ]
  5.     //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效
    / r7 D% I$ b! W, d
  6.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    3 Q0 H+ L7 Z  p. \! \: s
  7.     //配置CCR寄存器(TIMx_CCRx) 16位宽$ s; {& l6 p1 N2 i0 [9 @
  8.     TIM_OCInitStructure.TIM_Pulse = 64;
    % n& }2 V+ m, J$ t
  9.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
复制代码

: e3 a" `% Z- t  R* {如下代码摘自库函数TIM_OC2Init,说明在PWM初始化过程中确实是通过配置CCER寄存器对应位设置PWM的输出极性。* o) l( b  N" L! s3 c

: @1 T2 S$ O+ g* s
  1.   tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
复制代码
$ A. U' v) r* o3 Y0 l/ [+ Q* x
下面通过示波器实验PWM的输出极性控制,
4 q% D) u9 W, r9 r, I& `7 j% A; w7 r$ A& |9 Q( b# Y
  1.     //配置PWM模式(TIMx_CCMR)
    ) A6 g2 }! l, c* e3 t3 X
  2.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    7 e6 ]; Z7 `" ?. R6 |; l
  3.     //配置输出使能(TIMx_CCER)  0:禁止输出  1:输出到对应引脚5 e) r/ N: }6 L+ O- T; e( a$ o9 R
  4.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;: K! ~: w' ?( ~
  5.     //配置输出极性(TIMx_CCER)  0:OCx高电平有效  1:OCx低电平有效
    - F. i  Y/ r  F. ?- C. ]/ x8 ?
  6.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    + K7 |, D" x. }. L+ A6 T
  7.     //配置CCR寄存器(TIMx_CCRx) 16位宽' w7 x7 @2 @/ @7 a1 Z
  8.     TIM_OCInitStructure.TIM_Pulse = 64;
    ; [6 D* ~0 U& S; X6 A
  9.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    ) s6 N& o$ `, A8 h% S4 J9 A
  10. ( y" a+ q+ Q! Y( {/ N
  11.     //使能OC2的预装载寄存器(TIMx_CCMR.11)
    7 D- m; O6 Y  ~% v& p4 o
  12.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
    1 ~; _9 m* [, g' V
  13.                
    + Q0 i; F& ^8 T% J5 C
  14.     //TIM_Cmd(TIM3, ENABLE);
复制代码

0 ?, E2 n* K4 s# D/ F6 C8 y) H如上代码设置,初始化TIM_OC2Init后,PWM输出即刻接到对应引脚PA7,此时CCR2寄存器内的值64与定时器计数值比较,因为我们没有打开定时器,所以此时CNT寄存器为0,有CNT < CCR2,在PWM Mode2下,输出无效电平,如上代码设置有效电平为低电平(即无效电平为高电平),因此此时应该输出高电平,
5 {0 J3 w0 P5 i4 A }]`%Q3JTD@`(BVRN$Z}8.png
0 `6 I6 o0 H$ B% M! q. ^# n, j& a
7 K' L$ }" \& ~2 l0 N3 p修改上述代码,将有效电平修改为高电平,( y: G- _5 Q* v: ~7 O8 M
0 [6 |- J4 q* K# H, O
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/ w/ W1 p. Q! \) g* X
/ V/ E, G# V, h* g
此时示波器的输出如下,
8 C! z- F1 Q8 C, o5 @& _! P, c* J/ o. _' v
XWX`J(9)S[T6JM@KR86[VXQ.png
& |: D5 Z, t, w0 |' G1 K3 p/ L
  W0 h/ _& \  ~# `3 Q( a3 `! [$ n/ b. D; `6 m
6 i/ g5 m3 l" v9 g( X6 W/ @8 D

, t- F' W8 I  i, j2 U4 \/ X' l$ R; H) o8 @3 v, w3 ^2 O
赞 收藏 评论0 发布时间:2022-5-2 09:04

举报

0个回答

所属标签

相似技术帖

官网相关资源

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