1.将PA7引脚设置为TIMx_CHy

2.激活(Activated)定时器x,让定时器x的通道y为输入捕获模式( Input Capture direct mode )

3.配置定时器x的psc为80-1,使能中断

4.在main函数中打开定时器x中断( HAL_TIM_IC_Start_IT(&htimx,TIM_CHANNEL_y) )

5.设置变量记录频率和CNT的值( uint32_t fre,capture_value )

6.调用捕获输入回调函数

( void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){

if(htim->Instance==TIM17){

}

} )

7.调用读取捕获CNT值的函数(该函数实际上是读取CCR的值,因为在捕获到上升沿时,会将CNT赋值给CCR)读取CNT的值

( capture_value=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_y)+1

或者capture_value=TIMx->CCRy )

8.读完CNT,将CNT重新赋值为0( TIMx->CNT=0 )

9.带入计算频率公式计算频率( fre=80000000/(80*capture_value) )

10.将fre的值显示在LCD中

HAL_TIM_IC_Start_IT(&htimx,TIMx_CHANNEL_y)

uint8_t capture_value,fre;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
  if(htim->Instance==TIMx){
    capture_value=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_y)+1;
    TIMx->CNT=0;
    fre=80000000/(80*capture_value);
  }
}

更多推荐