Доработна документация в целом - добавелн main page - исправлены ошибки в шапках и коментах - добавлен граф инклюдов
225 lines
11 KiB
C
225 lines
11 KiB
C
/**
|
||
**************************************************************************
|
||
* @file general_tim.h
|
||
* @brief Заголовочный файл для модуля инициализации таймеров и работы с ними.
|
||
**************************************************************************
|
||
* @defgroup MY_LIBS_TIM TIM Tools
|
||
* @ingroup MYLIBS_PERIPHERAL
|
||
* @brief Функции и макросы для удобной работы с TIM.
|
||
* @details
|
||
Модуль предоставляет универсальные инструменты для работы с TIM:
|
||
- @ref MYLIBS_TIM_GENERAL — базовая инициализация таймеров и прерываний.
|
||
- @ref MYLIBS_TIM_DELAY — функции задержки через таймеры (blocking и non-blocking).
|
||
- @ref MYLIBS_TIM_OC — настройка каналов Output Compare и PWM.
|
||
- @ref MYLIBS_TIM_ENCODER — работа с энкодерами, чтение положения и кнопки.
|
||
* @note Требуется подключение модуля TIM в библиотеке HAL
|
||
@code
|
||
#define HAL_TIM_MODULE_ENABLED
|
||
@endcode
|
||
*************************************************************************/
|
||
#ifndef __TIM_GENERAL_H_
|
||
#define __TIM_GENERAL_H_
|
||
|
||
/////////////////////////////////////////////////////////////////////
|
||
/////////////////////////---USER SETTINGS---/////////////////////////
|
||
/**
|
||
* @addtogroup TIM_INIT Init defines
|
||
* @ingroup MYLIBS_TIM_GENERAL
|
||
* @brief Настройка таймеров
|
||
* @{
|
||
*/
|
||
#define HAL_TIM_MODULE_ENABLED
|
||
|
||
#define USE_TIM1 ///< Включить TIM1 в @ref TIM_Base_MspInit
|
||
#define USE_TIM2 ///< Включить TIM2 в @ref TIM_Base_MspInit
|
||
#define USE_TIM3 ///< Включить TIM3 в @ref TIM_Base_MspInit
|
||
#define USE_TIM4 ///< Включить TIM4 в @ref TIM_Base_MspInit
|
||
#define USE_TIM5 ///< Включить TIM5 в @ref TIM_Base_MspInit
|
||
#define USE_TIM6 ///< Включить TIM6 в @ref TIM_Base_MspInit
|
||
#define USE_TIM7 ///< Включить TIM7 в @ref TIM_Base_MspInit
|
||
#define USE_TIM8 ///< Включить TIM8 в @ref TIM_Base_MspInit
|
||
#define USE_TIM9 ///< Включить TIM9 в @ref TIM_Base_MspInit
|
||
#define USE_TIM10 ///< Включить TIM10 в @ref TIM_Base_MspInit
|
||
#define USE_TIM11 ///< Включить TIM11 в @ref TIM_Base_MspInit
|
||
#define USE_TIM12 ///< Включить TIM12 в @ref TIM_Base_MspInit
|
||
#define USE_TIM13 ///< Включить TIM13 в @ref TIM_Base_MspInit
|
||
#define USE_TIM14 ///< Включить TIM14 в @ref TIM_Base_MspInit
|
||
/** TIM_INIT
|
||
* @}
|
||
*/
|
||
/////////////////////////---USER SETTINGS---/////////////////////////
|
||
#include "mylibs_defs.h"
|
||
#include "general_gpio.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))
|
||
|
||
////////////////////////////---DEFINES---////////////////////////////]
|
||
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////
|
||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
|
||
/**
|
||
* @brief Режим прерываний таймера
|
||
* @ingroup MYLIBS_TIM_GENERAL
|
||
*/
|
||
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;
|
||
|
||
/**
|
||
* @brief Длительность тика таймера (частота тактирования таймера)
|
||
* @ingroup MYLIBS_TIM_GENERAL
|
||
* @details enum дает базовые длительности, но можно выставить другие
|
||
* (напр 500 - 0.5 мс)
|
||
*/
|
||
typedef enum
|
||
{
|
||
TIM_Base_Disable = 0, ///< Таймер отключен
|
||
TIM_TickBase_1US = 1, ///< Таймер тактируется с частотой 1 МГц
|
||
TIM_TickBase_10US = 10, ///< Таймер тактируется с частотой 100 кГц
|
||
TIM_TickBase_100US = 100, ///< Таймер тактируется с частотой 10 кГц
|
||
TIM_TickBase_1MS = 1000, ///< Таймер тактируется с частотой 1 кГц
|
||
TIM_TickBase_10MS = 10000, ///< Таймер тактируется с частотой 100 Гц
|
||
TIM_TickBase_100MS = 100000, ///< Таймер тактируется с частотой 10 Гц
|
||
}TIM_MHzTickBaseTypeDef;
|
||
|
||
/**
|
||
* @brief Структура инициализации таймера
|
||
* @ingroup MYLIBS_TIM_GENERAL
|
||
* @details
|
||
* Содержит все базовые структуры, которые нужны для инициализации таймера.
|
||
* Если структуры настроек не заданы, то они заполнятся сами дефолтными параметрами
|
||
*
|
||
* Также высокоуровневые настройки частоты работы таймера.
|
||
* Если какая-либо высокоуровневая настройка не задана, то
|
||
* по возможности берется низкоуровневая настройка из структур
|
||
*/
|
||
typedef struct // struct with settings for custom function
|
||
{
|
||
TIM_HandleTypeDef htim; ///< HAL handle таймера
|
||
TIM_ClockConfigTypeDef sClockSourceConfig; ///< Настройки тактирования таймера
|
||
TIM_SlaveConfigTypeDef sSlaveConfig; ///< Настройки слейв режима таймера
|
||
TIM_MasterConfigTypeDef sMasterConfig; ///< Настройки мастер режима таймера
|
||
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; ///< Настройки дедтаймов таймера
|
||
|
||
TIM_ITModeTypeDef sTimMode; ///< Настройки прерывания таймера
|
||
TIM_MHzTickBaseTypeDef sTickBaseUS; ///< Длительность одного тика
|
||
uint8_t sTickBasePrescaler; ///< Дополнительный делитель, для удобного деления @ref sTickBaseUS
|
||
float sTimAHBFreqMHz; ///< Частота шины тактирования таймера
|
||
float sTimFreqHz; ///< Желаемая частота таймера
|
||
|
||
}TIM_SettingsTypeDef;
|
||
|
||
|
||
/**
|
||
* @brief Структура инициализации енкодера
|
||
* @ingroup MYLIBS_TIM_ENCODER
|
||
* @details
|
||
* Содержит все базовые структуры, которые нужны для инициализации таймера.
|
||
* Если структуры настроек не заданы, то они заполнятся сами дефолтными параметрами
|
||
*
|
||
* Также высокоуровневые настройки частоты работы таймера.
|
||
* Если какая-либо высокоуровневая настройка не задана, то
|
||
* по возможности берется низкоуровневая настройка из структур
|
||
*/
|
||
typedef struct // struct with variables for encoder
|
||
{
|
||
int16_t Encoder_Diff; ///< Считанная разница
|
||
uint16_t Encoder_Shdw; ///< Последние считанные тики
|
||
|
||
TIM_HandleTypeDef *htim; ///< Указатель на HAL handle таймера
|
||
TIM_Encoder_InitTypeDef sConfig; ///< Указатель на структуру настройки энкодера
|
||
|
||
GPIO_TypeDef *GPIOx; ///< Порт, куда подключается энкодер
|
||
uint32_t GPIO_PIN_TI1; ///< Пин, куда подключается канал TI1
|
||
uint32_t GPIO_PIN_TI2; ///< Пин, куда подключается канал TI2
|
||
uint32_t GPIO_PIN_SW; ///< Пин, куда кнопка энкодера (если есть)
|
||
|
||
GPIO_SwitchTypeDef Sw; ///< Структура кнопки
|
||
|
||
}TIM_EncoderTypeDef;
|
||
///////////////////////---STRUCTURES & ENUMS---//////////////////////
|
||
|
||
/////////////////////////////////////////////////////////////////////
|
||
///////////////////////////---FUNCTIONS---///////////////////////////
|
||
/**
|
||
* @addtogroup MYLIBS_TIM_OC PWM/OC Channels tools
|
||
* @ingroup MY_LIBS_TIM
|
||
* @brief Функции для инициализации базовых функций каналов таймера
|
||
* @{
|
||
*/
|
||
/* Initialize PWM Channel and GPIO for output */
|
||
HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN);
|
||
/* Initialize OC Comparator */
|
||
HAL_StatusTypeDef TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL);
|
||
/** MYLIBS_TIM_ENCODER
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @addtogroup MYLIBS_TIM_ENCODER Encoder tools
|
||
* @ingroup MY_LIBS_TIM
|
||
* @brief Функции для считывания энкодера
|
||
* @{
|
||
*/
|
||
/* Initialize TIM Encoder functional */
|
||
HAL_StatusTypeDef TIM_Encoder_Init(TIM_EncoderTypeDef *henc1, TIM_HandleTypeDef *htim);
|
||
/* Считать энкодер */
|
||
HAL_StatusTypeDef TIM_Encoder_Read(TIM_EncoderTypeDef *henc);
|
||
/* Считать кнопку энкодера */
|
||
int TIM_Encoder_ReadSwitch(TIM_EncoderTypeDef *henc);
|
||
/** MYLIBS_TIM_ENCODER
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @addtogroup MYLIBS_TIM_DELAY Delay tools
|
||
* @ingroup MY_LIBS_TIM
|
||
* @brief Функции для формирования задержек с помощью таймеров
|
||
* @{
|
||
*/
|
||
/* Start delay via TIM */
|
||
HAL_StatusTypeDef TIM_Delay_Start(TIM_HandleTypeDef *htim);
|
||
/* Delay via TIM */
|
||
HAL_StatusTypeDef TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay);
|
||
/* Wait Delay via TIM without blocking app */
|
||
HAL_StatusTypeDef TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay);
|
||
/** MYLIBS_TIM_DELAY
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @addtogroup MYLIBS_TIM_GENERAL General tools
|
||
* @ingroup MY_LIBS_TIM
|
||
* @brief Функции для базовой инициализации таймеров
|
||
* @{
|
||
*/
|
||
/* Initialize TIM with TIM_SettingsTypeDef structure */
|
||
HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef* stim);
|
||
/* Initialize TIMs clock and interrupt */
|
||
void TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode);
|
||
/* DeInitialize TIMs clock and interrupt */
|
||
void TIM_Base_MspDeInit(TIM_HandleTypeDef* htim);
|
||
/** MYLIBS_TIM_GENERAL
|
||
* @}
|
||
*/
|
||
///////////////////////////---FUNCTIONS---///////////////////////////
|
||
|
||
|
||
#endif // __TIM_GENERAL_H_
|