diff --git a/Inc/general_tim.h b/Inc/general_tim.h index 234e2fb..919d2f9 100644 --- a/Inc/general_tim.h +++ b/Inc/general_tim.h @@ -185,11 +185,55 @@ typedef struct // struct with variables for encoder @endcode * @{ */ - +/** + * @brief Преобразование частоты в количество тиков таймера. + * @param _freq_ Желаемая частота в Гц. + * @param _timfreqMHz_ Тактовая частота таймера в МГц. + * @return Количество тиков для достижения заданной частоты. + * @details Расчет: (1 000 000 * частота_таймера) / желаемая_частота. + */ #define TIM_FreqToTick(_freq_, _timfreqMHz_) ((1000000*(_timfreqMHz_))/(_freq_)) + +/** + * @brief Преобразование миллисекунд в количество тиков таймера. + * @param _ms_ Время в миллисекундах. + * @param _timfreqMHz_ Тактовая частота таймера в МГц. + * @return Количество тиков для заданного времени. + * @details Расчет: (мс * 1000 * частота_таймера). + */ #define TIM_MillisToTick(_ms_, _timfreqMHz_) ((uint32_t)((_ms_) * 1000UL * (_timfreqMHz_))) + +/** + * @brief Преобразование микросекунд в количество тиков таймера. + * @param _us_ Время в микросекундах. + * @param _timfreqMHz_ Тактовая частота таймера в МГц. + * @return Количество тиков для заданного времени. + * @details Расчет: (мкс * частота_таймера). + */ #define TIM_MicrosToTick(_us_, _timfreqMHz_) ((uint32_t)((_us_) * (_timfreqMHz_))) +/** + * @brief Установка автоперезагрузки (ARR) с принудительным обновлением теневого регистра. + * @param __HANDLE__ Указатель на хендл таймера. + * @param __AUTORELOAD__ Значение автоперезагрузки. + * @details Генерирует событие обновления для немедленного применения нового значения ARR. + * Решает проблему обновления теневых регистров только при переполнении. + */ +#define __HAL_TIM_SET_AUTORELOAD_FORCE(__HANDLE__, __AUTORELOAD__) \ +do{ __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__); \ + HAL_TIM_GenerateEvent(__HANDLE__, TIM_EVENTSOURCE_UPDATE); } while(0); + +/** + * @brief Установка предделителя (PSC) с принудительным обновлением теневого регистра. + * @param __HANDLE__ Указатель на хендл таймера. + * @param __PRESC__ Значение предделителя. + * @details Генерирует событие обновления для немедленного применения нового значения PSC. + * Решает проблему обновления теневых регистров только при переполнении. + */ +#define __HAL_TIM_SET_PRESCALER_FORCE(__HANDLE__, __PRESC__) \ +do{ __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__); \ + HAL_TIM_GenerateEvent(__HANDLE__, TIM_EVENTSOURCE_UPDATE); } while(0); + /* Initialize TIM with TIM_SettingsTypeDef structure */ HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef* stim); /* Initialize TIMs clock and interrupt */