本例用的是定時器2,產生脈沖為1KHz
void time2_pwm(int period,int Prescaler)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /*????2??*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); /*GPIO????*/
/*????*/
/*??GPIO*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /*????*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*??TIMER2*/
/*??TIMER2*/
TIM_DeInit(TIM2); /*??????2*/
TIM_TimeBaseStructure.TIM_Period = period; /*??? ??????3600-1 ???0??*/
TIM_TimeBaseStructure.TIM_Prescaler = Prescaler; /*????*/
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; /*????*/
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /*????*/
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*??TIMER2PWM??*/
/*??TIMER2PWM??*/
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; /*PWM2????*/
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /*??????*/
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /*????? ?????*/
/*??1*/
// TIM_OCInitStructure.TIM_Pulse =40*36;
// TIM_OC1Init(TIM2, &TIM_OCInitStructure);
// TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*??2*/
TIM_OCInitStructure.TIM_Pulse =0; /*?????*/
TIM_OC2Init(TIM2, &TIM_OCInitStructure); /*?????TIMx ??*/
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);/*CH1?????*/
/*??3*/
// TIM_OCInitStructure.TIM_Pulse =90*36;
// TIM_OC3Init(TIM2, &TIM_OCInitStructure);
// TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
/*??4*/
// TIM_OCInitStructure.TIM_Pulse =0*36;
// TIM_OC4Init(TIM2, &TIM_OCInitStructure);
// TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE); /*??TIMx?ARR????????*/
TIM_Cmd(TIM2, ENABLE); /*?????2*/
}
產生頻率為72MHz/m 占空比為oxy%,可以視情況自行修改
time2_pwm(m-1,0);
TIM_SetCompare2(TIM2,oxy*m);
|