OpenEdv-开源电子网

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

怎么输入捕获低电平脉宽

[复制链接]

6

主题

8

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2016-7-26
在线时间
10 小时
发表于 2016-8-22 23:28:46 | 显示全部楼层 |阅读模式
5金钱
有原子哥的输入捕获高定平,改为捕获低电平脉宽,小弟觉得配置TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising        改为falling;
再者,中断函数其中两行改一下:
void TIM5_IRQHandler(void)
{

        if((TIM5CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ       
        {          
                if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
                 
                {            
                        if(TIM5CH1_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½¸ßμçÆ½áË
                        {
                                if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//¸ßμçÆ½ì«3¤áË
                                {
                                        TIM5CH1_CAPTURE_STA|=0X80;//±ê¼Ç3é1|2¶»ñáËò»′Î
                                        TIM5CH1_CAPTURE_VAL=0XFFFF;
                                }else TIM5CH1_CAPTURE_STA++;
                        }         
                }
        if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//2¶»ñ1·¢éú2¶»ñê¼t
                {       
                        if(TIM5CH1_CAPTURE_STA&0X40)                //2¶»ñμ½ò»¸öϽμÑØ                
                        {                                 
                                TIM5CH1_CAPTURE_STA|=0X80;                //±ê¼Ç3é1|2¶»ñμ½ò»′θßμçÆ½Âö¿í
                                TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
                                   TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);//改为Falling
                        }else                                                                  //»1Î′¿aê¼,μúò»′Î2¶»ñéÏéyÑØ
                        {
                                TIM5CH1_CAPTURE_STA=0;                        //Çå¿Õ
                                TIM5CH1_CAPTURE_VAL=0;
                                 TIM_SetCounter(TIM5,0);
                                TIM5CH1_CAPTURE_STA|=0X40;                //±ê¼Ç2¶»ñμ½áËéÏéyÑØ
                                   TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//改为Rising
                        }                    
                }                                                                                   
        }

    TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ

}

大家觉得如何?

最后小弟说一下应用场景:一个光敏传感模块接受光线,可输出高电平,到某输入端口PA1,开始配置PA1为IPD,现在要检测输入端口(PA1)高电平来之前的低电平时间,
我这样考虑没有问题吧?谢啦,我刚学习。

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

使用道具 举报

3

主题

144

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7344
金钱
7344
注册时间
2016-2-6
在线时间
1863 小时
发表于 2016-8-22 23:38:59 | 显示全部楼层
时间长了记得不是很清楚了。以前干过笨办法,用双沿触发,在下降沿中断打开定时器计数,用上升沿停止,定时器的计数值便是脉冲宽度。
STM32定时器应该有外部控制计数功能,最准确的方法是使用外部引脚控制定时器的启停,这样准确性可以达到一个时钟周期。
嵌入式系统控制程序设计无非是对cpu本身和外设的掌控,遇到问题参考数据手册,详细了解cpu和外设结构才是正途。
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2016-8-23 08:07:41 | 显示全部楼层
定时器有一个pwm输入模式    你看下   需要两个引脚
回复

使用道具 举报

0

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2015-10-15
在线时间
39 小时
发表于 2017-5-3 10:24:35 | 显示全部楼层
楼主试验过没有,看起来没问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 17:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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