Частотомер должен точно измерять высокие частоты, низкие, период и длительность импульсов, а это связано с разными режимами таймеров.
На помощь приходит CubeIDE и встроенный туда CubeMX. Идея в том, что бы настроить таймеры в кубе мышкой, написать пару строчек простого кода и всё, что нам нужно, частота, период и др. лежит в переменных, которые выводим куда захотим и процессор при этом не загружаем.
Добавлено after 1 hour 3 minutes 9 seconds:
ВЧ частоту считаем по входу TIM2_ETR за 1сек, которую дает TIM1 в связке по железу. Таймер 5 измеряет период и длительность импульса по входу 1канала. Добавлено after 1 hour 18 minutes 21 second:
Запускаем таймеры
HAL_TIM_Base_Start_IT(&htim1);
HAL_TIM_Base_Start(&htim2);
HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2);
Добавлено after 3 minutes 21 second:
Колбеки.
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM5)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
period = HAL_TIM_ReadCapturedValue(&htim5, TIM_CHANNEL_1)+2;
pulse = HAL_TIM_ReadCapturedValue(&htim5, TIM_CHANNEL_2)+2;
}
}
}
Добавлено after 3 minutes 38 seconds:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim1)
{
count = __HAL_TIM_GET_COUNTER(&htim2);
HAL_TIM_Base_Stop_IT(&htim1);
__HAL_TIM_SET_COUNTER(&htim2, 0x0000);
HAL_TIM_Base_Start_IT(&htim1);
}
}
Добавлено after 3 minutes 33 seconds:
period, pulse, count - это всё, что нам нужно.


