OpenEdv-开源电子网

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

关于定时器的输入捕获,TIM1的一通道进行捕获,TIM4的一通道输出PWM波

[复制链接]

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
发表于 2015-6-13 21:07:21 | 显示全部楼层 |阅读模式
5金钱
这样配置为什么进不了中断呢?PWM输出正常,求解救啊,纠结好几天了。
void TIM_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
    TIM_ICInitTypeDef  TIM_ICInitStruct;
    
    TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInitStruct.TIM_Period=65535;
    TIM_TimeBaseInitStruct.TIM_Prescaler=8400-1;
    TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
    
    TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
    TIM_ICInitStruct.TIM_ICFilter=0;
    TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
    TIM_ICInitStruct.TIM_ICPrescaler=0;
    TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
    TIM_ICInit(TIM1,&TIM_ICInitStruct);
    
    TIM_ClearFlag(TIM1,TIM_IT_CC1);
    TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE);
    TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
    TIM_PWMIConfig(TIM1,&TIM_ICInitStruct);
    TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1);
    TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset);
    TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);
    TIM_Cmd(TIM1,ENABLE);   
}
中断函数
void TIM1_IRQn(void)
{   

TIM_ICInitTypeDef  TIM_ICInitStructure;
   GPIO_SetBits(GPIOA,GPIO_Pin_5);
  if(TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET)
  {
      
     TIM_ClearITPendingBit(TIM1,TIM_IT_CC1);
     if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==SET)//当前为上升沿 改下次触发为下降沿
     {
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
        TIM_ICInit(TIM1, &TIM_ICInitStructure);
        TIM1CH1_U_CAPTURE_VAL= TIM1->CCR1;
     }  
     else
     {
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
        TIM_ICInit(TIM1, &TIM_ICInitStructure);
        TIM1CH1_D_CAPTURE_VAL= TIM1->CCR1;
     }         
    if(TIM1CH1_D_CAPTURE_VAL>TIM1CH1_U_CAPTURE_VAL)
    {
        TIM1CH1_CAPTURE_VAL=TIM1CH1_D_CAPTURE_VAL-TIM1CH1_U_CAPTURE_VAL;
    }
    else
    {
        TIM1CH1_CAPTURE_VAL=0XFFFF-TIM1CH1_U_CAPTURE_VAL+TIM1CH1_D_CAPTURE_VAL;
    }
   }
 }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-13 21:29:09 | 显示全部楼层
求助啊,原子哥!!!
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5757
金钱
5757
注册时间
2013-11-22
在线时间
1208 小时
发表于 2015-6-13 22:07:02 | 显示全部楼层
TIM1 捕获中断函数没有 TIM1_IRQn
只有 TIM1_CC_IRQHandler
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-14 13:43:15 | 显示全部楼层
回复【3楼】lycreturn:
---------------------------------
我试过开启TIM1_CC_IRQHandler,但是错误提示重定义了!不知道怎么回事,我没有用过TIM1_CC_IRQHandler啊!还有你能看看我配置的正确吗?谢谢啦!
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5757
金钱
5757
注册时间
2013-11-22
在线时间
1208 小时
发表于 2015-6-14 16:19:33 | 显示全部楼层
回复【4楼】张晓斌:
---------------------------------
说明这个函数在其他某个地方被调用了
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-14 19:00:27 | 显示全部楼层
不应该呀 !我只开启过一次
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-14 19:01:29 | 显示全部楼层
不应该呀 !我只开启过一次TIM_IT_CC1中断啊,其他地方也没有调用过啊!
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-14 19:21:54 | 显示全部楼层
回复【5楼】lycreturn:
---------------------------------
我真的找不到这个函数在哪被调用了!完全没理由啊,我这是第一次用这个函数,它怎么就会被重定义了呢!
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5757
金钱
5757
注册时间
2013-11-22
在线时间
1208 小时
发表于 2015-6-14 19:37:44 | 显示全部楼层
回复【8楼】张晓斌:
---------------------------------
全局搜索一下TIM1_CC_IRQHandler
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-14 19:40:56 | 显示全部楼层
搜索了,我把所有的关于它的定义都注释了,还是不行啊!
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-14 19:59:52 | 显示全部楼层
回复【9楼】lycreturn:
---------------------------------
这个问题解决了,应该是TIM1_CC_Handler这个函数,但是依然进不了中断是怎么回事啊,是我配置不对吗?麻烦你帮我看看可以吗?
回复

使用道具 举报

3

主题

2164

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5757
金钱
5757
注册时间
2013-11-22
在线时间
1208 小时
发表于 2015-6-14 21:36:11 | 显示全部楼层
回复【11楼】张晓斌:
---------------------------------
你用的什么开发板,F1 就参考战舰的输入捕获实验,F4 就参考探索者的输入捕获实验
回复

使用道具 举报

20

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2015-6-4
在线时间
5 小时
 楼主| 发表于 2015-6-16 11:17:06 | 显示全部楼层
回复【12楼】lycreturn:
---------------------------------
嗯,F1的弄好了,F4的没弄出来,用的ST官方的NucloF411的板子,我如果开TIM3用于捕获,TIM4用于输出PWM波,就不工作,PWM无法输出,如果换成是TIM1捕获,PWM就能输出了,不知道为啥。
回复

使用道具 举报

53

主题

175

帖子

1

精华

高级会员

Rank: 4

积分
516
金钱
516
注册时间
2014-5-16
在线时间
7 小时
发表于 2016-1-11 10:01:39 | 显示全部楼层
我用的也是F411的板子,有个例程在我的帖子里,你可以看看,不过TIM1的输入捕获还没搞定
回复

使用道具 举报

53

主题

175

帖子

1

精华

高级会员

Rank: 4

积分
516
金钱
516
注册时间
2014-5-16
在线时间
7 小时
发表于 2016-1-11 11:14:03 | 显示全部楼层
http://www.openedv.com/thread-66113-1-1.html
搞定TIM1的输入捕获了,可以参考
本人新人,各位多包涵!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 00:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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