为什么将PWM输出使能设置在定时器中断,而不设置在定时器开始运转TIM8_Startup()函数中?
/******* TIM8更新中断服务程序 *********/
void TIM8_UP_TIM13_IRQHandler(void)
{
if(TIM_GetITStatus(TIM8,TIM_FLAG_Update)!=RESET)//更新中断
{
TIM_ClearITPendingBit(TIM8,TIM_FLAG_Update);//清除更新中断标志位
if(is_rcr_finish==0)//重复计数器未设置完成
{
if(rcr_integer!=0) //整数部分脉冲还未发送完成
{
TIM8->RCR=RCR_VAL;//设置重复计数值
rcr_integer--;//减少RCR_VAL+1个脉冲
}else if(rcr_remainder!=0)//余数部分脉冲 不位0
{
TIM8->RCR=rcr_remainder-1;//设置余数部分
rcr_remainder=0;//清零
is_rcr_finish=1;//重复计数器设置完成
}else goto out; //rcr_remainder=0,直接退出
TIM_GenerateEvent(TIM8,TIM_EventSource_Update);//产生一个更新事件 重新初始化计数器
TIM_CtrlPWMOutputs(TIM8,ENABLE); //MOE 主输出使能
TIM_Cmd(TIM8, ENABLE); //使能TIM8
if(MotorDir==CW) //如果方向为顺时针
CurrentPos+=(TIM8->RCR+1);//加上重复计数值
else //否则方向为逆时针
CurrentPos-=(TIM8->RCR+1);//减去重复计数值
}else
{
out: is_rcr_finish=1;//重复计数器设置完成
TIM_CtrlPWMOutputs(TIM8,DISABLE); //MOE 主输出关闭
TIM_Cmd(TIM8, DISABLE); //关闭TIM8
}
}
}
一周热门 更多>