/**********************************TIM************************************** Данный файл содержит объявления базовых функции и дефайны для инициализации таймеров. ***************************************************************************/ #ifndef __TIM_GENERAL_H_ #define __TIM_GENERAL_H_ ///////////////////////////////////////////////////////////////////// /////////////////////////---USER SETTINGS---///////////////////////// #define HAL_TIM_MODULE_ENABLED // need to uncomment this define in stm32f4xx_hal_conf.h #define USE_TIM1 #define USE_TIM2 #define USE_TIM3 #define USE_TIM4 #define USE_TIM5 #define USE_TIM6 #define USE_TIM7 #define USE_TIM8 #define USE_TIM9 #define USE_TIM10 #define USE_TIM11 #define USE_TIM12 #define USE_TIM13 #define USE_TIM14 /* note: used uart defines in modbus.h */ /////////////////////////---USER SETTINGS---///////////////////////// #include "periph_general.h" ///////////////////////////////////////////////////////////////////// ////////////////////////////---DEFINES---//////////////////////////// #define TIM_IT_CONF_Pos 0 //#define TIM_PWM_CONF_Pos 1 //#define TIM_CLCK_SRC_CONF_Pos 2 //#define TIM_SLAVE_CONF_Pos 3 //#define TIM_MASTER_CONF_Pos 4 //#define TIM_BDTR_CONF_Pos 5 #define TIM_IT_CONF (1<<(TIM_IT_CONF_Pos)) //#define TIM_PWM_CONF (1<<(TIM_PWM_Pos)) #define TIM_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \ (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \ (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \ (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \ (0)) ////////////////////////////---DEFINES---////////////////////////////] ///////////////////////////////////////////////////////////////////// ///////////////////////---STRUCTURES & ENUMS---////////////////////// typedef enum { TIM_DEFAULT = 0, TIM_IT_MODE = TIM_IT_CONF, // TIM_PWM_MODE = TIM_PWM_ENABLE, // TIM_PWM_IT_MODE = TIM_PWM_ENABLE | TIM_IT_CONF, }TIM_ITModeTypeDef; typedef enum { TIM_Base_Disable = 0, TIM_TickBase_1US = 1, TIM_TickBase_10US = 10, TIM_TickBase_100US = 100, TIM_TickBase_1MS = 1000, TIM_TickBase_10MS = 10000, TIM_TickBase_100MS = 100000, }TIM_MHzTickBaseTypeDef; typedef struct // struct with settings for custom function { TIM_HandleTypeDef htim; TIM_ClockConfigTypeDef sClockSourceConfig; TIM_SlaveConfigTypeDef sSlaveConfig; TIM_MasterConfigTypeDef sMasterConfig; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; TIM_ITModeTypeDef sTimMode; TIM_MHzTickBaseTypeDef sTickBaseMHz; float sTimAHBFreqMHz; float sTimFreqHz; }TIM_SettingsTypeDef; typedef struct // struct with settings for custom function { TIM_HandleTypeDef *htim; TIM_Encoder_InitTypeDef sConfig; GPIO_TypeDef *GPIOx; uint32_t GPIO_PIN_TI1; uint32_t GPIO_PIN_TI2; uint32_t GPIO_PIN_SW; }TIM_EncoderTypeDef; ///////////////////////---STRUCTURES & ENUMS---////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////////---FUNCTIONS---/////////////////////////// /** * @brief Initialize TIM with TIM_SettingsTypeDef structure. * @param stim - указатель на структуру с настройками таймера. * @return HAL status. * @note Данная структура содержит хендл таймера и структуры для его настройки. */ HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef* stim); /** * @brief Initialize PWM Channel and GPIO for output. * @param htim - указатель на хендл таймера. * @param sConfigOC - указатель на настрйоки канала таймера. * @param TIM_CHANNEL - канал таймера для настройки. * @param GPIOx - порт для вывода ШИМ. * @param GPIO_PIN - пин для вывода ШИМ. * @return HAL status. */ HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN); /** * @brief Initialize TIM Encoder functional. * @param htim - указатель на хендл таймера. * @param sConfigOC - указатель на настрйоки канала таймера. * @param GPIOx - порт для приема енкодера. * @param GPIO_PIN1 - первый пин для енкодера. * @param GPIO_PIN2 - второй пин для енкодера. * @param GPIO_PIN_SW - пин для кнопки енкодера. * @return HAL status. */ HAL_StatusTypeDef TIM_Encoder_Init(TIM_EncoderTypeDef *henc1, TIM_HandleTypeDef *htim); /** * @brief Initialize TIMs clock and interrupt. * @param htim - указатель на хендл таймера. * @note Чтобы не генерировать функцию с иницилизацией неиспользуемых таймеров, дефайнами в tim_general.h определяются используемые таймеры. */ void TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode); /** * @brief DeInitialize TIMs clock and interrupt. * @param htim - указатель на хендл таймера. * @note Чтобы не генерировать функцию с деиницилизацией неиспользуемых таймеров, дефайнами в tim_general.h определяются используемые таймеры. */ void TIM_Base_MspDeInit(TIM_HandleTypeDef* htim); ///////////////////////////---FUNCTIONS---/////////////////////////// #endif // __TIM_GENERAL_H_