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

STM32使用捕获功能,计算输入PWM信号周期,误差很大,求帮忙??

[复制链接]
studentzf972-93 提问时间:2009-6-9 09:24 /
我用的TIMER2的CH1通道,PWM信号接在PA0脚。我输入100Hz信号,根据捕获得到的结果是105Hz,这误差也太大了吧!!求各位高手帮忙解决一下,万分感谢!!
下面是我的初始化程序:
    1:时钟初始化,我的TIMER2上的时钟频率为36M
      RCC_PCLK1Config(RCC_HCLK_Div2);           //设置低速AHB时钟=系统时钟/2
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);    //倍频系数为9  PLLCLK=8*9=72
   
    2:TIMER2初始化
   TIM_DeInit(TIM2);
   TIM_TimeBaseStructure.TIM_Period = 65535;         
   TIM_TimeBaseStructure.TIM_Prescaler = 18;      
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
   TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV4;
   TIM_ICInitStructure.TIM_ICFilter = 0x0;
   TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
  
   TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);
   TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);                       //复位模式为从模式
   TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);          //使能主从模式
 
   TIM_Cmd(TIM2, ENABLE);                           //使能TIM2计数器
   TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);          //使能CC2中断请求
 
   3,中断部分程序
   void TIM2_IRQHandler(void)
{
  /* Clear TIM2 Capture compare interrupt pending bit */
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
 
  /* Get the Input Capture value */
  IC2_Value = TIM_GetCapture2(TIM2);
 
}
 
收藏 评论2 发布时间:2009-6-9 09:24

举报

2个回答
hebsjx 回答时间:2010-7-20 15:20:38

回复:STM32使用捕获功能,计算输入PWM信号周期,误差很大,求帮忙??

回复第 1 楼 studentzf972于2009-06-09 01:24:10发表:
我用的TIMER2的CH1通道,PWM信号接在PA0脚。我输入100Hz信号,根据捕获得到的结果是105Hz,这误差也太大了吧!!求各位高手帮忙解决一下,万分感谢!!
下面是我的初始化程序:
    1:时钟初始化,我的TIMER2上的时钟频率为36M
      RCC_PCLK1Config(RCC_HCLK_Div2);           //设置低速AHB时钟=系统时钟/2
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);    //倍频系数为9  PLLCLK=8*9=72
   
    2:TIMER2初始化
   TIM_DeInit(TIM2);
   TIM_TimeBaseStructure.TIM_Period = 65535;         
   TIM_TimeBaseStructure.TIM_Prescaler = 18;      
   TIM_TimeBaseStructure.TIM_ClockDivision = 0;   
   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
   TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV4;
   TIM_ICInitStructure.TIM_ICFilter = 0x0;
   TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
  
   TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);
   TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);                       //复位模式为从模式
   TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);          //使能主从模式
 
   TIM_Cmd(TIM2, ENABLE);                           //使能TIM2计数器
   TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);          //使能CC2中断请求
 
   3,中断部分程序
   void TIM2_IRQHandler(void)
{
  /* Clear TIM2 Capture compare interrupt pending bit */
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
 
  /* Get the Input Capture value */
  IC2_Value = TIM_GetCapture2(TIM2);
 
}
 
 
hebsjx 回答时间:2010-7-20 15:21:57

回复:STM32使用捕获功能,计算输入PWM信号周期,误差很大,求帮忙??

  
Prescaler = 18:  分频为19 .

所属标签

相似问题

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