void TIM14_PWM_Init(void)//PWM配置
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIOF9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //
GPIO_Init(GPIOF,&GPIO_InitStructure); //
TIM_TimeBaseStructure.TIM_Prescaler=83; //
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //
TIM_TimeBaseStructure.TIM_Period=499; //
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//
//
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //
TIM_OC1Init(TIM14, &TIM_OCInitStructure); //
TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); //
TIM_ARRPreloadConfig(TIM14,ENABLE);//
TIM_Cmd(TIM14, ENABLE); //
}
void TIM3_Int_Init(void)//定时器配置
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_TimeBaseInitStructure.TIM_Period = 99; //
TIM_TimeBaseInitStructure.TIM_Prescaler=8399; //
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //
TIM_Cmd(TIM3,ENABLE); //
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
u16 led0pwmval=0;
u8 dir=1;
void TIM3_IRQHandler(void)//定时器中断
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //
{
if(dir)led0pwmval++;//
else led0pwmval--; //
if(led0pwmval>499)dir=0;//
if(led0pwmval==0)dir=1; //
TIM_SetCompare1(TIM14,led0pwmval); //修改占空比的值,达到499重新从0开始计数
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //
}
问题在于对应的的LED灯亮了,但是始终亮度不变,改变led0pwmval的初值,灯的亮度就会变化,这是什么原因?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
循环一次出来后下一次执行中断,led0pwmval的值不会再变化了么
一周热门 更多>