定时器输入捕获测频率
生成待测信号
配置环境
选择如上图所示
代码修改
在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中一样也要加1uint32_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);
}
}