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