不管怎么改变脉宽值,波形都不变
void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM2_TimeBaseStructure;//定义结构体
TIM_OCInitTypeDef TIM2_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA及功能复用IO时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能TIM2时钟
//GPIOA配置为:定时器2的PWM4个通道复用功能输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//I/O时钟为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);//根据上面指定参数初始化GPIO结构体
//定时器基本配置
TIM2_TimeBaseStructure.TIM_Period =1000-1;//计数值为1000
TIM2_TimeBaseStructure.TIM_Prescaler = 1440-1;//1440分频
TIM2_TimeBaseStructure.TIM_ClockDivision = 0;//采样分频0
TIM2_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure);
TIM2_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//定时器配置为PWM1模式
TIM2_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM输出比较极性高
// PWM1模式通道1
TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//通道1输出使能
TIM2_OCInitStructure.TIM_Pulse =200;//脉宽值为200
TIM_OC1Init(TIM2,&TIM2_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化TIM2
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR1上的预装载寄存器
// PWM1模式通道2
TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM2_OCInitStructure.TIM_Pulse =50;//脉宽值为400
TIM_OC2Init(TIM2, &TIM2_OCInitStructure);
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能TIM2在CCR2上的预装载寄存器
// PWM1模式通道3
TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM2_OCInitStructure.TIM_Pulse =75;
TIM_OC3Init(TIM2, &TIM2_OCInitStructure);
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
// PWM1模式通道4
TIM2_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM2_OCInitStructure.TIM_Pulse =100;
TIM_OC4Init(TIM2, &TIM2_OCInitStructure);
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE);//使能TIM2在ARR上的预装载寄存器
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4);//预先清除所有中断位
/* 配置输出比较通道1中断*/
TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
TIM_Cmd(TIM2, ENABLE);//使能定时器2
|