新手上路
- 积分
- 42
- 金钱
- 42
- 注册时间
- 2020-7-12
- 在线时间
- 13 小时
|
5金钱
通用定时器3的中断函数应该如何改写???我不会啊。控制步进电机的 。代码如下:
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_FLAG_Update)!=RESET)//更新中断
{
TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);//清除更新中断标志位
if(is_rcr_finish==0)//重复计数器未设置完成
{
if(rcr_integer!=0) //整数部分脉冲还未发送完成
{
TIM3->RCR=RCR_VAL;//设置重复计数值
rcr_integer--;//减少RCR_VAL+1个脉冲
}else if(rcr_remainder!=0)//余数部分脉冲 不位0
{
TIM3->RCR=rcr_remainder-1;//设置余数部分
rcr_remainder=0;//清零
is_rcr_finish=1;//重复计数器设置完成
}else goto out; //rcr_remainder=0,直接退出
TIM_GenerateEvent(TIM3,TIM_EventSource_Update);//产生一个更新事件 重新初始化计数器
TIM_CtrlPWMOutputs(TIM3,ENABLE); //MOE 主输出使能
TIM_Cmd(TIM3, ENABLE); //使能TIM8
if(motor_dir==CW) //如果方向为顺时针
current_pos+=(TIM3->RCR+1);//加上重复计数值
else //否则方向为逆时针
current_pos-=(TIM3->RCR+1);//减去重复计数值
}else
{
out: is_rcr_finish=1;//重复计数器设置完成
TIM_CtrlPWMOutputs(TIM3,DISABLE); //MOE 主输出关闭
TIM_Cmd(TIM3, DISABLE); //关闭TIM8
printf("当前位置=%ld\r\n",current_pos);//打印输出
}
}
}
|
|