From 74d692fdd5c92c6b624391b89f397e4ffcb823cc Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Wed, 19 Nov 2025 15:27:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B4=D0=B5=D1=84=D0=B0=D0=B9=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B8=D0=BD=D1=83=D0=B4=D0=B8?= =?UTF-8?q?=D1=82=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B2=D1=8B=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20ARR,=20PSC?= =?UTF-8?q?=20=D0=B2=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inc/general_tim.h | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) 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 */