关于STM32F4自带ATK电机驱动程序疑问

2019-07-20 11:20发布

为什么将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                               
                }       
        }
}

0条回答

一周热门 更多>