Доработна документация в целом - добавелн 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_
 |