首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32输入捕获精确测频率

STM32输入捕获精确测频率

TM32做PWMI的输入捕获模式,测量20-20Khz的方波,20-1098hz时就不准确,发现时TIM3-CCR2的16位计满溢出了,请问怎么把它的溢出挂在中断上,查询的方式计算,越详细越好。
void Timer3(void)/
{
   TIM_ICMode=TIM_PWMI,输入PWM模式
    TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//通道选择,共四个通道
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//输入活动沿(下降沿,上升沿)
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系 TIM2选择对应和IC1 或 IC2 或 IC3 或 IC4 相连
   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器 ,在捕获输入每检测到一个边沿执行一次,DIV2,3,4每捕获2,3,4个事件执行一次
   TIM_ICInitStructure.TIM_ICFilter = 0x4;//选择输入比较滤波器,滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
   TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
   TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);//选择时钟输入触发源 ,经过滤波定时器输入2
   TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);//TIM2复位模式为从模式,选择触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新
   TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //选择主从模式,主从模式使能,启动定时器的被动触发


   TIM_ITConfig(TIM3, TIM_IT_CC2 , ENABLE); //使能捕获/比较4中断源
   TIM_Cmd(TIM3, ENABLE);  //启动TIM2
  }

void TIM3_IRQHandler(void)
{
      TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);//清除中断挂起位
           if(IC3Value!=0)   
   {
      DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC3Value;
      Frequency=72000000/IC3Value;//捕获时从输入波形的上升沿开始,对主时钟沿进行计数,得到的是主时钟的个数,即为输入脉冲的周期
        }
   else
   {
     Frequency=0;
    DutyCycle = 0;
     }   



}

SYSTICK是72Mhz,其他配置没问题
继承事业,薪火相传
返回列表