定时器输入捕获测频率
生成待测信号
配置环境
选择如上图所示
代码修改
在main函数中加入
cs
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
测量信号频率
配置环境
如图所示打开TIM3定时器
- 设置TI1FP1为ResetMode,即清空计数
- 使用内部时钟
- 通道 1 设置为输入捕获模式
- 设置预分频器为 72
- 自动重装寄存器为 65535
- 输入捕获上升沿
7.打开NVIC中断
代码修改
重写并计算频率
cs
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
cs
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);
oled显示
cs
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);
}
}