你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于输入捕获问题

[复制链接]
oh,no 提问时间:2015-8-7 09:11 /
void TIM2_IRQHandler(void)
{

         if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获        
        {         
                if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
                 
                {            
                        if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
                        {
                                if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
                                {
                                        TIM2CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
                                        TIM2CH1_CAPTURE_VAL=0XFFFF;
                                }else TIM2CH1_CAPTURE_STA++;
                        }         
                }
        if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
                {        
                        if(TIM2CH1_CAPTURE_STA&0X40)                //捕获到一个下降沿                 
                        {         
                                TIM2CH1_CAPTURE_STA=TIM2CH1_CAPTURE_STA&0Xbf;
                                num_rise++;
                                HVAL=TIM_GetCapture1(TIM2);
                                HTIME=TIM2CH1_CAPTURE_STA&0X3f;
                                   TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
                        }else                                                                  //还未开始,第一次捕获上升沿
                        {
                                if(num_rise==0){
                                TIM2CH1_CAPTURE_STA=0;                        //清空
                                TIM2CH1_CAPTURE_VAL=0;
                                 TIM_SetCounter(TIM2,0);
                                TIM2CH1_CAPTURE_STA|=0X40;                //标记捕获到了上升沿
                           TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling);                //CC1P=1 设置为下降沿捕获
                                }
                                if(num_rise==1)
                                {
                                        num_rise=0;//为下次测量做准备
                                        TIM2CH1_CAPTURE_STA|=0X80;//周期捕获成功
                                        TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
                                }
                                
                        }                    
                }                                                                                    
         }

    TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位

}
这是中断服务函数,在这边我捕获一个上升沿和一个下降沿来捕获高电平时间,然后再捕获一个上升沿来捕获周期时间,但是我这样好像只能同时测一个范围内的频率和占空比。。。。求解答!!!

收藏 1 评论13 发布时间:2015-8-7 09:11

举报

13个回答
你好我好大家好! 回答时间:2015-8-7 09:34:54
定时器的时钟可以实时调节,这样就可以扩大测量范围了
stary666 回答时间:2015-8-7 09:46:00
这个很简单的
oh,no 回答时间:2015-8-7 11:45:45
你好我好大家好! 发表于 2015-8-7 09:34
定时器的时钟可以实时调节,这样就可以扩大测量范围了

但是我又个疑问,现象是这样的:我测1KHZ以下的频率周期测得准,但是占空比测不准,不知道是什么原因,然后把分频数改到36735才可以测得到2HZ的占空比。这个是什么原因呢???
oh,no 回答时间:2015-8-7 11:47:03

求解答,或者分享下程序我参考参考
那就地方 回答时间:2015-8-7 13:00:02
你用的芯片型号是什么啊?
oh,no 回答时间:2015-8-7 14:52:06
那就地方iv 发表于 2015-8-7 13:00
你用的芯片型号是什么啊?

stm32f103rct6
你好我好大家好! 回答时间:2015-8-7 14:54:39
oh,no 发表于 2015-8-7 11:45
但是我又个疑问,现象是这样的:我测1KHZ以下的频率周期测得准,但是占空比测不准,不知道是什么原因,然 ...

是不是存储占空比变量的那个格式不正确
oh,no 回答时间:2015-8-8 08:23:16
你好我好大家好! 发表于 2015-8-7 14:54
是不是存储占空比变量的那个格式不正确

应该不是,频率大一些的时候占空比测又得准了,小了反而测不准。前提是频率都测得准(也就是周期测得准)。。。
你好我好大家好! 回答时间:2015-8-8 09:15:41
oh,no 发表于 2015-8-8 08:23
应该不是,频率大一些的时候占空比测又得准了,小了反而测不准。前提是频率都测得准(也就是周期测得准) ...

那就不清楚了
oh,no 回答时间:2015-8-8 09:40:34

我已经发现问题了,是HVAL的值位宽设小了,现在已经解决了。
oh,no 回答时间:2015-8-8 09:41:14

谢谢支持
你好我好大家好! 回答时间:2015-8-8 10:29:16
oh,no 发表于 2015-8-8 09:40
我已经发现问题了,是HVAL的值位宽设小了,现在已经解决了。

是不是数据格式太小了?????????
oh,no 回答时间:2015-8-10 09:12:30
对,是我当时疏忽没注意到。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版