最近有一个项目,需要使用到PWM输出电机速度,开发过程中遇到一个PWM输出时有时无的现象,明明已经配置TIM1输出PWM输出,单独测试也有PWM输出了,但项目大了之后,突然发现明明应该启动的电机不启动,莫名其妙的问题, 然后我查找代码,分析,逻辑上应该是没问题,使用仿真+示波器检测,发现本应该输出的,却没有输出PWM,仿真看寄存器值,确实已经赋值了.; n# M" Q" G# L9 G9 m) @
, x& X4 U8 l% p
7 y: W4 |/ K6 e( Q* ^, U 搜索网上的经验,发现是我的初始化有问题,TIM1是高级定时器,功能多样,初始时没有正确初始,就会出现莫名其妙的问题 ~! R6 W4 @$ ]0 G
" z8 z3 h0 ], w5 e2 u" s: Y
9 x+ X; l) A4 b/ A正确的PWM初始化有如下变量:3 P$ f% U6 }/ O5 Y2 }
- TIM_OCInitTypeDef TIM_OCInitStruct;
4 m W: P7 ]$ F1 g: o1 \6 f" g( x - TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; //脉冲宽度调制模式1
3 t9 b7 N: w1 U5 h - //输出极性
0 b0 W" y5 P1 b! b4 P1 x) x ^2 a - TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性
- x: C) @' m% i( G0 K( C( I" g0 r* ` - TIM_OCInitStruct.TIM_OCIdleState = TIM_OCIdleState_Set; //在空闲时输出: H' x! U" Y2 q0 T( }2 n% d1 j
- TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //PWM输出使能(正向通道)
: ^6 E L' S' N! R' I) [, p - TIM_OCInitStruct.TIM_OutputNState = TIM_OutputNState_Disable; //PWM输出失能(互补通道)
. C2 x/ W3 ?* z( I$ K/ e" G - TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High; //必须+ F$ v; l: j' R4 }- n, I0 ^; o0 v4 j4 H
- TIM_OCInitStruct.TIM_OCNIdleState = TIM_OCIdleState_Reset; //必须0 K8 X3 t, w- n6 R7 c( v
- TIM_OCInitStruct.TIM_Pulse = 0; //捕获比较的脉冲值7 K6 J# w1 L( h' ]0 K" {8 }- |
- TIM_OC1Init(TIM1,&TIM_OCInitStruct);
复制代码
, J( a9 S0 r9 z5 l& K2 y7 R# O0 [9 @( m$ }- `: L
————————————————- B" l/ g5 z% n, s
版权声明:wenkic 小琪
$ v2 L. Z+ }0 ]' O4 o3 W如有侵权请联系删除5 e4 a' T% V* | ~
2 M; w% N A5 _$ Y
# z% r7 c7 z1 B1 j% S
|