OpenEdv-开源电子网

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

关于TIM2CH1_CAPTURE_STA 它的设定

[复制链接]

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-8-14
在线时间
8 小时
发表于 2018-8-23 11:39:21 | 显示全部楼层 |阅读模式
  file:///C:\Users\Thinkpad\AppData\Roaming\Tencent\Users\1048921094\TIM\WinTemp\RichOle\P~G6R9ZR]OSC4@_4NAB77JU.pngTIM2_IRQHandler 是 TIM2 的中断服务函数,该函数用到了两个全局变量,用于辅助实现高电平捕获。其中 TIM2CH1_CAPTURE_STA,是用来记录捕获状态,该变量类似我们在 usart.c
里面自行定义的 USART_RX_STA 寄存器(其实就是个变量,只是我们把它当成一个寄存器那样
来使用)。


是否我可以理解为我可以自己设定,比如0-4是溢出次数,然后5-6是捕获高电平 7是捕获完成

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

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2018-8-23 13:08:36 | 显示全部楼层
输入捕获的TIM2CH1_CAPTURE_STA变量完全可以自己设定
但是我觉得原子的程序设置的很好用啊,0-5溢出次数,6是否获得高电平,7是否捕获完成
刚调试过输入捕获,,,路过
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-8-14
在线时间
8 小时
 楼主| 发表于 2018-8-23 14:07:14 | 显示全部楼层
15353920254 发表于 2018-8-23 13:08
输入捕获的TIM2CH1_CAPTURE_STA变量完全可以自己设定
但是我觉得原子的程序设置的很好用啊,0-5溢出次数, ...

if (TIM_GetITStatus(TIM5, TIM_IT_CC4) != RESET) //发生捕获事件
        {
                if((TIM5CH1_CAPTURE_STA&0X20)&&(!(TIM5CH1_CAPTURE_STA&0X40))) //已经捕获到上升沿
                {
                        TIM5CH1_CAPTURE_STA|=0X40; //标记成功捕获一次下降沿
                        TIM5CH1_CAPTURE_VAL1=TIM_GetCapture4(TIM5)+(TIM5CH1_CAPTURE_STA&0X1f)*65536; //获得TIM5捕获通道一的捕获值(对应高电平时间)
                        TIM_SetCounter(TIM5,0);  //清零计数器
                        TIM_OC4PolarityConfig(TIM5,TIM_ICPolarity_Rising); //设置为上升沿捕获
                        TIM5CH1_CAPTURE_STA&=0Xe0;  //溢出次数清零
                }
                else if((TIM5CH1_CAPTURE_STA&0X20)==0)  //未捕获到上升沿
                {
                        TIM5CH1_CAPTURE_STA=0;    //清零标志位及溢出次数
                        TIM5CH1_CAPTURE_VAL1=0;   //清零高电平计数
                        TIM5CH1_CAPTURE_VAL2=0;          //清零低电平计数               
                        TIM_SetCounter(TIM5,0);   //清零TIM5计数寄存器                       
                        TIM5CH1_CAPTURE_STA|=0X20; //置标志位
                        TIM_OC4PolarityConfig(TIM5,TIM_ICPolarity_Falling); //设置为下降沿捕获
                }
                else if((TIM5CH1_CAPTURE_STA&0X40)&&(!(TIM5CH1_CAPTURE_STA&0X80))) //已经捕获到下降沿
                {
                        TIM5CH1_CAPTURE_VAL2=TIM_GetCapture4(TIM5)+(TIM5CH1_CAPTURE_STA&0X1f)*65536;//低电平计数(对应低电平时间)
                        TIM5CH1_CAPTURE_STA|=0X80;  //置标志位
                }                       
        }
看这个它设置的,然后想求周期 不然总觉的他不够用,想听听大佬对这段代码的理解
回复 支持 反对

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2018-8-23 15:15:07 | 显示全部楼层
第一个if,如果出现了一次上升沿,还没有出现下降沿
第二个else if 如果还没有出现上升沿,
第三个else if 如果出现了一次下降沿,还没有出现上升沿

所以执行过程是,第一次扫描到上升沿,进入第二个else if,设置下降沿检测,sta标记获得一次上升沿
然后扫描到下降沿,进入第一个if,读取数据(高电平时间),设置上升沿检测,sta标记获得一次下降沿
然后扫描到上升沿,进入第三个else if,读取数据(低电平时间),sta标记捕获完成


从c语言的角度看了一下,感觉可行
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-8-14
在线时间
8 小时
 楼主| 发表于 2018-8-23 21:43:35 | 显示全部楼层
15353920254 发表于 2018-8-23 15:15
第一个if,如果出现了一次上升沿,还没有出现下降沿
第二个else if 如果还没有出现上升沿,
第三个else  ...

可以加个QQ交流一下吗
回复 支持 反对

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2018-8-24 07:43:54 | 显示全部楼层
椰子皮djc 发表于 2018-8-23 21:43
可以加个QQ交流一下吗

1269808289,加qq记得备注
欢迎一起交流,
回复 支持 反对

使用道具 举报

6

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2018-8-14
在线时间
8 小时
 楼主| 发表于 2018-8-24 09:00:55 | 显示全部楼层
15353920254 发表于 2018-8-24 07:43
1269808289,加qq记得备注
欢迎一起交流,

需要输入你的名字
回复 支持 反对

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2018-8-24 09:09:25 | 显示全部楼层

何仁贵
回复 支持 反对

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6552
金钱
6552
注册时间
2018-6-27
在线时间
551 小时
发表于 2018-10-31 14:48:22 | 显示全部楼层
学习学习,学习学习。
回复 支持 反对

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-10-31 15:46:25 来自手机 | 显示全部楼层
椰子皮djc 发表于 2018-8-23 14:07
if (TIM_GetITStatus(TIM5, TIM_IT_CC4) != RESET) //发生捕获事件
        {
                if((TIM5CH1_CAPTURE_STA&0X20 ...

原子定义的u16型的,你觉得不够用可以定义u32型啊,bit31做捕获完成标志,30上升边沿标志,剩下的29到0做溢出次数啊
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-3-14
在线时间
2 小时
发表于 2019-3-18 15:48:34 | 显示全部楼层
TIM5CH1_CAPTURE_STA  怎么被赋值的  我只找到初始化了  
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 00:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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