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

关于输入捕获问题

[复制链接]
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

求解答,或者分享下程序我参考参考
那就地方iv 回答时间: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
应该不是,频率大一些的时候占空比测又得准了,小了反而测不准。前提是频率都测得准(也就是周期测得准) ...

那就不清楚了
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版