定时器输入捕获测频率
生成待测信号
配置环境

选择如上图所示
代码修改
在main函数中加入
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);测量信号频率
配置环境

如图所示打开TIM3定时器
1. 设置TI1FP1为ResetMode,即清空计数
 
 2.  
 使用内部时钟  
 
 
 3.  
 通道 
 1 
 设置为输入捕获模式  
 
 
 4.  
 设置预分频器为 
 72  
 
 
 5.  
 自动重装寄存器为 
 65535  
 
 
 6.  
 输入捕获上升沿  
 
 
 7.打开NVIC中断 
 
代码修改
 
 重写并计算频率 
 
int32_t freq;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance == TIM3) 
	{
		uint32_t capture =HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1)+1;//这里跟在keil中一样也要加1
		uint32_t aa=HAL_RCC_GetPCLK1Freq();
		uint32_t bb=(htim->Instance->PSC+1);
		uint32_t cc=HAL_RCC_GetPCLK1Freq()/(htim->Instance->PSC+1);
		freq=1000000/capture;
	} 
  在 
  main 
  函数中打开定时器和 
  IC  
 
 
 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);oled显示
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM3_Init();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);
OLED_Init();
OLED_Clear();
OLED_ShowString(1,1,"Freq:000000Hz");
while (1)
{
OLED_ShowSignedNum(1,6,freq,5);
}
}



















