我用 STM32 通过波形发生器测量频率。开发板:STM32F401RE Nucleo。
在下溢条件下功能正常。
当前参数:参考时钟 25MHz,计数器自动重装载值 65535。因此可测量的最低频率为 382Hz,低于 381Hz 时无法正常工作。
代码中配置的溢出判断逻辑没有生效。
以下是我的参考代码:
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim1)
{
if (! is_capture_done)
{
if (count == 1)
{
input_captures[0] = __HAL_TIM_GET_COMPARE(htim1, TIM_CHANNEL_1);
count=0;
}
else
{
input_captures[1] = __HAL_TIM_GET_COMPARE(htim1, TIM_CHANNEL_1);
count = 1;
is_capture_done = 1;
}
}
}
主函数的操作如下
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(is_capture_done == 1)
{
if (input_captures[1] > input_captures[0])
{
capture_difference = input_captures[1] - input_captures[0];
}
else if (input_captures[1] < input_captures[0])
{
capture_difference = ((0XFFFF - input_captures[0]) + input_captures[1]) + 1;
}
// calculate the frequency by capture difference
float refClock = (HAL_RCC_GetPCLK2Freq());
timer2_cnt_freq = refClock / capture_difference;
printf("%lf\n",timer2_cnt_freq);
is_capture_done = 0;
HAL_Delay(1000);
}
}
我想问的是:else if 部分能处理溢出条件吗?如果不能,那我该怎么处理?
还有,这个控制器能处理的最低频率是多少?
|
|