我修改定时器中断的例子程序,然后在中断程序中,先关掉定时器,再修改arr和psc值,然后重新启动定时器,但是输出的波形还是高低电平时间一样,求解。
[mw_shl_code=c,true]void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_Cmd(TIM3, DISABLE);
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
if(flag)//用flag做标志,判断是否转换新的计时值
{
LED0 = 0;
flag = 0;
TIM3_Change(8999,7199);
}
else
{
LED0 = 1;
flag = 1;
TIM3_Change(2999,7199);
}
}
}
void TIM3_Change(u16 arr,u16 psc)
{
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_Cmd(TIM3, ENABLE); //使能TIMx外设
}[/mw_shl_code]
|