OpenEdv-开源电子网

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

[战舰F103] 分享:战舰(探索者)同一个定时器四路(三路)输入捕获过程

[复制链接]

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-3-12 17:51:20 | 显示全部楼层 |阅读模式
本帖最后由 1208 于 2019-4-22 12:12 编辑

1)看了这个帖子http://www.openedv.com/forum.php?mod=viewthread&tid=51833
一直没人解决,问题点主要是三个通道总是互相干扰,数据一直波动

2)直接用输入捕获来捕获PWM的波形,再输出对应的占空比TIM_SetCompare2(TIM3,TIM_GetCapture2(TIM3)+1);
也是可以输出相应的电平数据,但是输出的电平数据不是很准,并不可靠,不太建议这样做

3)刚开始连调单通道输入捕获一个跑马灯的电平,都遇到很大的问题,说到这里不得不吐槽一下
TIM3_PWM_Init(899,0);         //不分频。PWM频率=72000/(899+1)=80Khz
原来是这句里面LED灯PB5被复用,导致一直捕获不到跑马灯的电平,一直找不到问题点
后来,通过仿真,结果被我屏蔽掉就可以捕获到了,好气呀
找问题,还是要多多通过仿真来找问题,知道那步走不了,然后顺着问题点接着往下找,共勉
成功实现了单通道PA0输入捕获跑马灯的电平,很开心

4)接下来,就是单独调通另外三个输入捕获通道PA1,PA2,PA3,都是输出500ms的电平
四个通道输入捕获加到一起,这时就会出现帖子上所描述的问题数据干扰
我看到帖子里面的程序,如何避免里面出现问题的误区
最主要还是就是每个中断都清中断,感觉很不合理,会影响其它通道数据传输,导致数据干扰
我选择在中断程序里面末尾一起清中断,问题就应然而解,就这样调好两个通道
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update);

5)按道理两通道可以了,调试出来四个通道是没有问题的
就因为不够细心没有配置好,出现数据没有输出
这个可以通过仿真找下有没进入中断里面,进不了检查下配置
如通道4:TIM5CH4_CAPTURE_VAL=TIM_GetCapture4(TIM5);
这时,开启四个通道同时捕获四个电平
PA0--->PB5
PA1--->PB7
PA2--->PB13
PA3--->PB14
完美捕获到四个通道相应设置好的电平数据
配置四个通道很多细节要处理好,建议先一个一个通道务必调通好

6)注意要点:开启四个通道时
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;配置通道1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;捕获中断
TIM_ICInitStructure.TIM_ICFilter = 0x0;不滤波
TIM_ICInit(TIM4, &TIM_ICInitStructure);将配置应用
以上每个通道都需要将整个配置再写一遍,使用与'|'是无效的。
四个通道成功捕获

战舰:四路输入捕获实验.zip

3.13 MB, 下载次数: 568

业精于勤荒于嬉;行成于思毁于随!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-4-12 18:59:20 | 显示全部楼层
探索者用的是u32类型,声明的时候要注意

探索者 3路输入捕获实验.zip

4.39 MB, 下载次数: 167

业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2019-5-30
在线时间
29 小时
发表于 2019-7-20 10:28:43 | 显示全部楼层
不太理解在每个通道捕获到高电平的时候都把定时器的值置零,会不会引响到其他通道的捕获计数???

if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获

{   
  if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
   
  {     
   if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
    {
     TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
     TIM5CH1_CAPTURE_VAL=0XFFFF;
    }else TIM5CH1_CAPTURE_STA++;
   }  
  }
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
  {
   if(TIM5CH1_CAPTURE_STA&0X40)  //捕获到一个下降沿   
   {      
    TIM5CH1_CAPTURE_STA|=0X80;  //标记成功捕获到一次高电平脉宽
    TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
       TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
   }else          //还未开始,第一次捕获上升沿
   {
    TIM5CH1_CAPTURE_STA=0;   //清空
    TIM5CH1_CAPTURE_VAL=0;
     TIM_SetCounter(TIM5,0);//这里每个通道捕获到高电平的时候都把定时器的值置零,会不会引响到其他通道的捕获计数???
    TIM5CH1_CAPTURE_STA|=0X40;  //标记捕获到了上升沿
       TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);  //CC1P=1 设置为下降沿捕获
   }      
  }                     
  }

回复 支持 1 反对 0

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17693
金钱
17693
注册时间
2018-3-3
在线时间
523 小时
发表于 2019-3-12 18:03:00 | 显示全部楼层
谢谢分享~~~
/*
*
*
*
*
*
*/
回复 支持 反对

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14383
金钱
14383
注册时间
2018-8-3
在线时间
1156 小时
发表于 2019-3-12 18:03:20 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2018-7-10
在线时间
11 小时
发表于 2019-3-26 20:27:17 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

14

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2017-7-19
在线时间
26 小时
发表于 2019-3-27 16:56:16 | 显示全部楼层
你好  我想问一您一个问题。 我有九路外部信号  想通过输入捕获捕获每个信号高电平的时间  但是好像每个定时器只有四个输入捕获通道》?我想问一下这种问题是否有更好的解决方法呢?具体问题在我发的帖子里 希望您能不吝指导一下。
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-3-27 19:58:13 | 显示全部楼层
飞翔的机械人 发表于 2019-3-27 16:56
你好  我想问一您一个问题。 我有九路外部信号  想通过输入捕获捕获每个信号高电平的时间  但是好像每个定 ...

一个定时器只有四路输入捕获,九个只能用三个定时器来做,捕获高电平时间,可以设置一个初始值和末尾值的时间差来弄
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

14

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2017-7-19
在线时间
26 小时
发表于 2019-3-27 20:46:20 | 显示全部楼层
1208 发表于 2019-3-27 19:58
一个定时器只有四路输入捕获,九个只能用三个定时器来做,捕获高电平时间,可以设置一个初始值和末尾值的 ...

我最新发的帖子里有另外一种测试方法 想问您 一下那种方式可行不可行呢?
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-3-28 09:41:41 | 显示全部楼层
飞翔的机械人 发表于 2019-3-27 20:46
我最新发的帖子里有另外一种测试方法 想问您 一下那种方式可行不可行呢?

我这个测试过的,可以捕获IO电平的时间
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-3 08:59:13 | 显示全部楼层
感谢分享!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-4-25
在线时间
10 小时
发表于 2019-4-26 11:38:34 | 显示全部楼层
你好,我想实现测连续的周期,该如何修改?
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-4-26 12:16:06 | 显示全部楼层
xcjxcj 发表于 2019-4-26 11:38
你好,我想实现测连续的周期,该如何修改?

你参考这个看下


超声波测距试验.zip

2.94 MB, 下载次数: 97

业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2019-3-21
在线时间
33 小时
发表于 2019-4-28 18:28:36 | 显示全部楼层
学习一下
回复 支持 反对

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2019-5-6
在线时间
16 小时
发表于 2019-5-11 18:06:48 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

21

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2018-5-17
在线时间
45 小时
发表于 2019-6-7 18:45:24 | 显示全部楼层
1208 发表于 2019-4-12 18:59
探索者用的是u32类型,声明的时候要注意

这个它可以同时计时吗?貌似会把前面通道的数清零。
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-6-10 12:19:31 | 显示全部楼层
XUENV 发表于 2019-6-7 18:45
这个它可以同时计时吗?貌似会把前面通道的数清零。

没有试过,你可以试下
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-4-25
在线时间
10 小时
发表于 2019-7-8 19:10:53 | 显示全部楼层
本帖最后由 xcjxcj 于 2019-7-8 19:18 编辑

void TIM5_IRQHandler(void) {              
if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
       {                                    
          if((TIM5CH1_CAPTURE_STA&0X7F)==0X7F)//                        
            {                                 
               TIM5CH1_CAPTURE_STA|=0x80;                                         
               TIM5CH1_CAPTURE_VAL=0XFFFF;                        
           }                       
              else                                 
             TIM5CH1_CAPTURE_STA++;               
        }                          
if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//
            {                                
                u8 i,Key_Sta=0x00;                       
               for(i=0;i<=7;i++)                        
                   {                                 
                      //delay_ms(8);                                
                      Key_Sta<<=1;                              
                      Key_Sta|=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);                        
                    }                       
                if(Key_Sta==0xFF)                       
                      {                              
                         TIM5CH1_CAPTURE_STA|=0x80;                                
                         TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);                             
                          TIM_SetCounter(TIM5,0);                                
                       }               
}                    
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);        
}
这个周期捕获程序对吗?请教
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-4-25
在线时间
10 小时
发表于 2019-7-8 19:15:31 | 显示全部楼层
1208 发表于 2019-4-26 12:16
你参考这个看下

这个程序是测周期吗?怎么也是上升沿然后下降沿?
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-6-22
在线时间
13 小时
发表于 2019-7-20 15:59:42 | 显示全部楼层
这种方法不行吧
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-7-20 16:51:53 | 显示全部楼层

你自己试下看看
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-6-22
在线时间
13 小时
发表于 2019-7-20 21:28:37 | 显示全部楼层
有问题吧
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-7-26
在线时间
2 小时
发表于 2020-8-19 16:42:53 | 显示全部楼层
周期怎么改代码测呢
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2020-9-29
在线时间
36 小时
发表于 2021-4-3 20:29:46 | 显示全部楼层
请问楼主有hal库的吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-5 10:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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