目录
前言
作为学习过程中的笔记记录,以便后续的参考。
一、如何测量频率
使用测周法测量频率,即通过测量频率的周期求其倒数就可得到频率值。
二、具体使用
1.初始化
以定时器三作为演示:
配置晶振频率为80MHZ,设置预分频系数为(80 - 1),自动重装载值为最大,则每1us计数器累加1.
2.逻辑代码
代码如下:
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim3)
{
Signal.PA15Counter = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
__HAL_TIM_SetCounter(htim,0);
Signal.PA15FreqCap = 1000000 / Signal.PA15Counter;
HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
}
}
3.注释
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) //捕获中断回调函数。
HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);//获取定时器通道1的CCR1值
其原函数如下:
uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel)
{
uint32_t tmpreg = 0U;
switch (Channel)判断通道
{
case TIM_CHANNEL_1:
{
assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
tmpreg = htim->Instance->CCR1;在此获得CCR1的值
break;
}
省略...............................................
default:
break;
}
return tmpreg;将获得的CCR1值返回
}
__HAL_TIM_SetCounter(htim,0);//将定时器CNT值清零
Signal.PA15FreqCap = 1000000 / Signal.PA15Counter;//获取频率值
频率 = 1s/周期;
HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);//定时器重新捕获