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

查看: 8967|回复: 2

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

[复制链接]

7

主题

22

回帖

0

蝴蝶豆

新手上路

最后登录
2020-11-14
发表于 2009-6-9 09: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);
 
}
 
回复

使用道具 举报

3

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 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);
 
}
 
 
回复 支持 反对

使用道具 举报

3

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2010-7-20 15:21:57 | 显示全部楼层

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

  
Prescaler = 18:  分频为19 .
回复 支持 反对

使用道具 举报

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