OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3761|回复: 8

原子的步进电机例程TIM8是怎么判断是哪个通道产生的中断

[复制链接]

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
发表于 2017-6-1 10:38:54 | 显示全部楼层 |阅读模式
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,&#207;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);
     }        
        }
}


0UP}BBGNWQFMIF(X9T]L7MD.png
C~@$QI5)Q[~V1]{N{OFJHKI.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-6-1 11:17:08 | 显示全部楼层
好像你的中断函数出问题了!
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-6-1 11:30:35 | 显示全部楼层
wmaxwell 发表于 2017-6-1 11:17
好像你的中断函数出问题了!

这是原子的TIM8更新中断程序
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-6-1 13:11:56 | 显示全部楼层
rindy 发表于 2017-6-1 11:30
这是原子的TIM8更新中断程序

TIM8是高级定时器  仔细看看手册
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-6-1 13:48:12 | 显示全部楼层
wmaxwell 发表于 2017-6-1 13:11
TIM8是高级定时器  仔细看看手册

这个程序我验证过是可以正常运行啊,不知道你说的是什么意思,请提点
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-6-1 14:30:36 | 显示全部楼层
谁知道怎么弄啊
回复

使用道具 举报

9

主题

101

帖子

0

精华

高级会员

Rank: 4

积分
532
金钱
532
注册时间
2017-3-5
在线时间
74 小时
发表于 2017-6-1 14:31:26 | 显示全部楼层
rindy 发表于 2017-6-1 13:48
这个程序我验证过是可以正常运行啊,不知道你说的是什么意思,请提点

我觉得他应该是想说TIM8是高级定时器,用它就浪费了,你可以选用两个普通定时器控制。
回复

使用道具 举报

35

主题

181

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1115
金钱
1115
注册时间
2016-8-1
在线时间
235 小时
 楼主| 发表于 2017-6-1 14:40:15 | 显示全部楼层
openedvxiaowang 发表于 2017-6-1 14:31
我觉得他应该是想说TIM8是高级定时器,用它就浪费了,你可以选用两个普通定时器控制。

哈哈,我想在原子的基础上改,这个浪不浪费的问题我现在不考虑,因为只是实验,我只是想知道程序该怎么改呢,网上找了好多,感觉得不到答案,所以需要高手来指点一下
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-12-11
在线时间
3 小时
发表于 2018-4-17 22:50:44 | 显示全部楼层
我也想通过修改原子哥的程序来控制两个步进电机,想利用定时器8的其他三个通道,改了一下根本没有什么效果,有没有大佬修改过或者有个控制两个步进电机的示范程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表