打印

STM32输入捕获及进入不了中断问题

[复制链接]
7848|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
630511630511|  楼主 | 2012-5-25 15:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
哎 写程序就像大姨妈,有时程序总会来那么几天让你悲催。。。
下面有些问题论坛上也有,但我看都没人回答,现在遇到了,希望有人回答一下。。谢谢
如题 我是用TIME2来检测0-50Hz的方波 ,最开始只能测到1K以上的方波,但是根据网友的提醒,我加了 TIM_TimeBaseStructure.TIM_Period = 65535;         //周期 TIM_TimeBaseStructure.TIM_Prescaler = 1199;      //分频
现在的配置,最高只能测到14hz,再高读出来就是0了,分频系数与测频范围是怎么算的呢?而且我用的IC2 为什么我的配置进不去中断,只有当  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);改成  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP1);时会进入中断,但我配置的就是2啊。。  下面是TIME2配置全部代码,为什么3.5的库里并没有输入模式的配置?还请高手们耐心解答一下 感激不尽 最后再问一下,如果我要计时这段脉冲的时间应该怎么做,期间频率是会变化的。。
void TIM2_Configuration()
{
TIM_ICInitTypeDef  TIM_ICInitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 65535;               //周期 TIM_TimeBaseStructure.TIM_Prescaler = 1199;      //分频
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//  TIM_ICInitStructure.TIM_ICMode = TIM_ICMode_ICAP;   //配置为输入捕获模式   没有输入模式的配置?
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;
  TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
  /* Select the TIM3 Input Trigger: TI2FP2 */
  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);
  /* Select the slave Mode: Reset Mode */
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);
  /* Enable the Master/Slave Mode */
  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
// TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);
  /* TIM enable counter */
  TIM_Cmd(TIM2, ENABLE);
  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
}
另外谁有硬件的I2C程序可供学习,还请共享一下 一并感激
沙发
630511630511|  楼主 | 2012-5-25 16:22 | 只看该作者
真的没人知道么 ,努力顶起来!

使用特权

评论回复
板凳
lkl10800139| | 2012-8-22 12:31 | 只看该作者
本帖最后由 lkl10800139 于 2012-8-22 12:34 编辑

在V3.5.0的库里面有pwm输入捕获的例子,定时器计时是65535,
IC2Value = TIM_GetCapture2(TIM4);  
  IC1Value = TIM_GetCapture1(TIM4);        

  IC2Value > IC1Value时,
    DutyCycle = (TIM_GetCapture1(TIM4) * 100) / IC2Value;    /* 计算占空比*/
    Frequency = (RCC_Clocks.HCLK_Frequency)/2 / IC2Value;   /* 计算频率 TIM4 counter clock = (RCC_Clocks.HCLK_Frequency)/2 */
  IC2Value < IC1Value,
    DutyCycle = (TIM_GetCapture1(TIM4) * 100) / IC2Value;    /* 计算占空比*/
    Frequency = (RCC_Clocks.HCLK_Frequency)/2 / ( 65535 - IC1Value + IC2Value) ;   /* 计算频率 TIM4 counter clock = (RCC_Clocks.HCLK_Frequency)/2 */

可看看这个帖子:http://blog.sina.com.cn/s/blog_63d525fd0100u9o3.html

使用特权

评论回复
地板
小年糕| | 2013-7-24 14:32 | 只看该作者
你好,你给的这个程序进不去中断,只有当  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);改成  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP1);时会进入中断,TIM_TS_TI2FP1在没有这个数值

使用特权

评论回复
5
小年糕| | 2013-7-24 14:35 | 只看该作者
不知道你现在解决了这个问题了吗,我现在也遇到进不去中断的问题

使用特权

评论回复
6
cshaoqian| | 2013-7-24 15:27 | 只看该作者
用外中断捕获脉冲呗

使用特权

评论回复
7
小年糕| | 2013-7-25 14:34 | 只看该作者
cshaoqian 发表于 2013-7-24 15:27
用外中断捕获脉冲呗

能给个程序吗?

使用特权

评论回复
8
cshaoqian| | 2013-7-25 14:35 | 只看该作者
自己写呗 中断应该简单

使用特权

评论回复
9
630511630511|  楼主 | 2013-8-26 09:27 | 只看该作者
很久前的东西  但是赶时间 后来就是用外中断计数脉冲 但是在脉冲频率高以及多路计数的话,系统就会经常在中断运行了

使用特权

评论回复
10
630511630511|  楼主 | 2013-8-26 09:29 | 只看该作者
小年糕 发表于 2013-7-24 14:32
你好,你给的这个程序进不去中断,只有当  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);改成  TIM_Select ...

很久了 我也忘记  你看看数据手册 当时我也是看着手册试出来的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

38

帖子

2

粉丝