OpenEdv-开源电子网

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

F407同时捕获高低电平问题

[复制链接]

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-1-4
在线时间
42 小时
发表于 2016-11-7 17:05:20 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 canghaiwuhen 于 2016-11-7 17:34 编辑

用原子哥的例程捕获高电平时间没问题,将上升沿和下降沿互换捕获低电平时间也没问题
但想同时捕获高低电平时间该怎么做?
TIM2CH1_CAPTURE_VAL1 捕获的高电平时间没问题,但TIM2CH1_CAPTURE_VAL2捕获的低电平时间偏差很大

[mw_shl_code=c,true]                if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
                {
                        if (TIM2CH1_CAPTURE_STA & 0X40)                //捕获到一个下降沿                 
                        {
                                TIM2CH1_CAPTURE_STA |= 0X80;                //标记成功捕获到一次高电平脉宽
                                TIM2CH1_CAPTURE_VAL1 = TIM_GetCapture1(TIM2);//获取当前的捕获值.
                                TIM_SetCounter(TIM2, 0);
                                TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
                        }
                        else                                                                  //还未开始,第一次捕获上升沿
                        {
                                //TIM2CH1_CAPTURE_STA = 0;                        //清空
                                //TIM2CH1_CAPTURE_VAL = 0;
                                TIM2CH1_CAPTURE_STA |= 0X40;                //标记捕获到了上升沿
                                TIM2CH1_CAPTURE_VAL2 = TIM_GetCapture1(TIM2);//获取当前的捕获值.
                                //TIM_Cmd(TIM2, DISABLE);         //关闭定时器2
                                TIM_SetCounter(TIM2, 0);
                                TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Falling);                //CC1P=1 设置为下降沿捕获
                                //TIM_Cmd(TIM2, ENABLE);         //使能定时器2
                        }[/mw_shl_code]
补充:只有一个IO口,不能用双引脚双沿捕获方式


最佳答案

查看完整内容[请看2#楼]

算了 我还是自己研究吧 这个论坛基本没啥有用的回答 提了几个问题 一个有用的都没有
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-1-4
在线时间
42 小时
 楼主| 发表于 2016-11-7 17:05:21 | 显示全部楼层
算了 我还是自己研究吧 这个论坛基本没啥有用的回答 提了几个问题 一个有用的都没有
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13002
金钱
13002
注册时间
2012-11-26
在线时间
3791 小时
发表于 2016-11-7 17:12:50 | 显示全部楼层
什么叫同时捕捉高低电平?时间差为高低电平时间间隔,你这同时捕获高低电平,理解不了
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-1-4
在线时间
42 小时
 楼主| 发表于 2016-11-7 17:15:28 | 显示全部楼层
jermy_z 发表于 2016-11-7 17:12
什么叫同时捕捉高低电平?时间差为高低电平时间间隔,你这同时捕获高低电平,理解不了

就是既要捕获高电平时间,也要捕获低电平时间
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13002
金钱
13002
注册时间
2012-11-26
在线时间
3791 小时
发表于 2016-11-7 17:21:53 | 显示全部楼层
方向改变,需要时间的吧,也许是耗在这上面了,你误差多大?
学无止境
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-11-7 17:24:48 | 显示全部楼层
1.尽量减少处理代码
2.一旦捕获先设置捕获模式等再进行其他数据处理
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-1-4
在线时间
42 小时
 楼主| 发表于 2016-11-7 17:33:07 | 显示全部楼层
jermy_z 发表于 2016-11-7 17:21
方向改变,需要时间的吧,也许是耗在这上面了,你误差多大?

从逻辑上来说,上升沿到下降沿,就是高电平脉宽时间,下降沿到上升沿就是低电平脉宽时间,每次改变捕获边沿,我都将定时器清0,下一次触发时候的时间差就应该是脉宽时间,但实际上高电平脉宽没问题,低电平脉宽偏差将近9100us(脉宽单位350us)
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2016-1-4
在线时间
42 小时
 楼主| 发表于 2016-11-7 17:37:30 | 显示全部楼层
龙之谷 发表于 2016-11-7 17:24
1.尽量减少处理代码
2.一旦捕获先设置捕获模式等再进行其他数据处理

基本没有处理代码
捕获高电平和低电平的代码基本一样,但数据相差非常大
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-11-7 19:04:02 | 显示全部楼层
低电平偏差9100us,9个多毫秒,这个偏差过大,查一下程序吧
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 09:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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