ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1174049
AlexBi (14.02.2022 12:33, просмотров: 5880)
Продолжаю осваивать новый, для меня, STM32 и CubeIDE. Использую HAL , из аппаратуры таймеры и UART. Куб хорошая штука для быстрого старта, буквально за один день я и светодиодом смог мигать, и байты по UART отправлять. Но дальше пошли проблемы. 

У меня несколько UART-ов, работает независимо, мне надо обнаруживать разные паузы между принимаемыми байтами в каждом. Желаемая логика достаточно простая: приняли байт, проанализировали, перезапустили таймер отсчета паузы. Если дошло до прерывания от таймера, значит пауза. Но реализация в рамках функций HAL выглядит весьма коряво. Что бы перезапустить таймер с новым интервалом мне надо его полностью остановить HAL_TIM_Base_Stop_IT(..) деинициализировать HAL_TIM_Base_DeInit(..) изменить интервал в структуре описания таймера, потом опять инициализировать HAL_TIM_Base_Init(..) и запустить с новым интервалом HAL_TIM_Base_Start_IT(..) Для меня это несколько непривычно и долго. Сделал через манипуляцию битами таймера. Все работает, но выглядит как нарушение принципов HAL-а и, возможно, дальнейшее использование HAL будет не корректным. Отсюда возник вопрос, это вообще нормальная практика, инициализировать все HAL-ом, сгенеренным Кубом, а дальше уйти на прямую манипуляцию битами и больше о HAL-е не вспоминать. Или это глупая идея?