void TIM_Configuration(void)
{
/* 定义 TIM_TimeBase 初始化结构体 TIM_TimeBaseStructure */
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/* 定义 TIM_OCInit 初始化结构体 TIM_OCInitStructure */
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Period = 65535; //如TIM_Period = 0x3E7则波形频率为TIMCLK/(0x3E7+1)
// 且只要TIM_Period 不为零,则其TIMCLK为系统频率的一半
if (arr > 1000)TIM_TimeBaseStructure.TIM_Prescaler = 0; //分频 TIMCLK/(0x3E7+1)/(TIM_Prescaler+1)
if (arr <= 1000)TIM_TimeBaseStructure.TIM_Prescaler = 999; //分频 TIMCLK/(0x3E7+1)/(TIM_Prescaler+1)
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2 , &TIM_TimeBaseStructure);
//TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
/* 禁止预装载寄存器 */
TIM_OC1PreloadConfig(TIM2 , TIM_OCPreload_Disable);//若没有禁止预装载寄存器,则每次计数至65525过程中
//总在当前固定值处发生计数比较匹配事件,并请求计数比较匹配中断,执行中断服务函数*
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_ITConfig(TIM2 , TIM_IT_CC1, ENABLE);
}
TIM_OCMode_PWM1模式占空比不稳,TIM_OCMode_Toggle稳得很
是不是代码有误
|