中级会员
 
- 积分
- 447
- 金钱
- 447
- 注册时间
- 2013-8-4
- 在线时间
- 69 小时
|
5金钱
最近闲来无事,又拿出自己以前的STM32程序捣鼓了一番,然后与原子的代码进行了对比。
在进行PWM的输出上,与原子的代码出现了较大的差异。
在没有学习原子的代码之前,我输出PWM时,TIM是这样配置的:
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler = psc;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
/* Configures the TIM2 Channel1 in PWM Mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
TIM_OCInitStructure.TIM_Pulse = arr/2;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInit(TIM2, & TIM_OCInitStructure);
原子官方的代码是这样的:
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_TimeBaseInitTypeDef 的配置与原子的一模一样,但是TIM_OCInitTypeDef的配置出现了较大的差异。细心的朋友不难发现,原子的代码与我的代码有几处不同之处,我配置了Channel、Pulse,而原子只配置了TIM_OutputState。
我先说说我配置的这两个参数的作用,Channel的作用就是指明是定时器的通道几产生PWM,而Pulse则配置了PWM的占空比,我在代码中取了arr/2,刚好就为50%占空比。
而原子配置了TIM_OutputState为输出比较使能。
经过验证,两种配置都能产生PWM,但是为什么会出现这两种不同的配置呢?
求各位大神批评指正!!!
[mw_shl_code=c,true][/mw_shl_code]
|
|