金牌会员
 
- 积分
- 1115
- 金钱
- 1115
- 注册时间
- 2016-8-1
- 在线时间
- 235 小时
|
5金钱
本帖最后由 rindy 于 2017-6-1 10:52 编辑
最近需要控制两个步进电机运动,看了原子的步进电机程序,是使用定时器8的通道2产生指定数量的占空比为50%的pwm波,然后我想定时器8有四个通道,我要用其中两个通道来独自产生指定数量的pwm波形,然后我看了程序的中断函数,里面好像没有看到对通道的判断,然后网上查了一下,说只要判断TIM8->SR就可以了,然后我就写if(TIM8->SR&(1<<2)),但是好像都不起作用,用了库函数if(TIM_GetITStatus(TIM8,TIM_FLAG_CC2)!=RESET)判断好像也没作用,这个进入中断函数,如果要判断是哪个通道产生的中断呢,怎么写呢?
void TIM8_UP_IRQHandler(void)
{
if(TIM_GetITStatus(TIM8,TIM_FLAG_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM8,TIM_FLAG_Update);
if(TIM_GetITStatus(TIM8,ÏTIM_FLAG_CC2)!=RESET)//自己添加的,用来测试是否是通道2触发的中断
{
printf("5454\r\n");
TIM_ClearITPendingBit(TIM8,TIM_FLAG_CC2);
}
if(is_rcr_finish==0)
{
if(rcr_integer!=0)
{
TIM8->RCR=RCR_VAL;
rcr_integer--;
}else if(rcr_remainder!=0)
{
TIM8->RCR=rcr_remainder-1;
rcr_remainder=0;
is_rcr_finish=1;
}else goto out;
TIM_GenerateEvent(TIM8,TIM_EventSource_Update);
TIM_CtrlPWMOutputs(TIM8,ENABLE);
TIM_Cmd(TIM8, ENABLE);
if(motor_dir==CW)
current_pos+=(TIM8->RCR+1);
else
current_pos-=(TIM8->RCR+1);
}else
{
out: is_rcr_finish=1;
TIM_CtrlPWMOutputs(TIM8,DISABLE);
TIM_Cmd(TIM8, DISABLE);
}
}
}
|
-
-
|