最近有一个项目,需要使用到PWM输出电机速度,开发过程中遇到一个PWM输出时有时无的现象,明明已经配置TIM1输出PWM输出,单独测试也有PWM输出了,但项目大了之后,突然发现明明应该启动的电机不启动,莫名其妙的问题, 然后我查找代码,分析,逻辑上应该是没问题,使用仿真+示波器检测,发现本应该输出的,却没有输出PWM,仿真看寄存器值,确实已经赋值了.3 f& _4 L8 W9 D% E* |
2 m( K: `4 [8 ]" ?# ~; e4 {, ?
/ t: N, h0 _4 {, A! K) c: R1 p5 { 搜索网上的经验,发现是我的初始化有问题,TIM1是高级定时器,功能多样,初始时没有正确初始,就会出现莫名其妙的问题
: n* G% l! ~7 y i$ x1 s
% e4 |2 E+ c8 A( i: Y3 E+ E7 y! @) F A8 W
正确的PWM初始化有如下变量:2 g# t, T$ e O9 ~1 \
- TIM_OCInitTypeDef TIM_OCInitStruct;! q0 p( R. q6 r k
- TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; //脉冲宽度调制模式1
7 K9 S) ~+ j$ r: T - //输出极性( }' b, S T/ s) F
- TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性
; G/ I3 V) a5 P8 w, a6 r - TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Set; //在空闲时输出
3 h( {) C" \! W - TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //PWM输出使能(正向通道)0 ?' O. Y9 I& t4 M% z
- TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Disable; //PWM输出失能(互补通道)
& V' T% W" G$ { - TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High; //必须
6 E9 A6 O5 a* @+ W. v# j - TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCIdleState_Reset; //必须
! u* C0 {- d, V. Y# t - TIM_OCInitStruct.TIM_Pulse = 0; //捕获比较的脉冲值
( j( b: N; }$ C) V5 i( ` - TIM_OC1Init(TIM1,&TIM_OCInitStruct);
复制代码 - D: G3 B, G t+ I$ _9 a
3 P" x4 T$ M# M: Z5 w0 z. h- A————————————————
2 ^* A* S0 b2 {# ]" X版权声明:wenkic 小琪
5 q, R! @/ @; H- E/ C" S" b. @+ b如有侵权请联系删除4 X; M( I6 C$ U- y) }
# @( L" F& m$ N' V5 ^ ~& ?8 |0 k1 l* @. }5 |0 T8 \0 o
|