MyLibs 1.0
Расширенные библиотеки для STM32
Loading...
Searching...
No Matches
general_tim.h
Go to the documentation of this file.
1/**
2**************************************************************************
3* @file general_tim.h
4* @brief Заголовочный файл для модуля инициализации таймеров и работы с ними.
5**************************************************************************
6* @defgroup MY_LIBS_TIM TIM Tools
7* @ingroup MYLIBS_PERIPHERAL
8* @brief Функции и макросы для удобной работы с TIM.
9* @details
10Модуль предоставляет универсальные инструменты для работы с TIM:
11 - @ref MYLIBS_TIM_GENERAL — базовая инициализация таймеров и прерываний.
12 - @ref MYLIBS_TIM_DELAY — функции задержки через таймеры (blocking и non-blocking).
13 - @ref MYLIBS_TIM_OC — настройка каналов Output Compare и PWM.
14 - @ref MYLIBS_TIM_ENCODER — работа с энкодерами, чтение положения и кнопки.
15* @note Требуется подключение модуля TIM в библиотеке HAL
16@code
17#define HAL_TIM_MODULE_ENABLED
18@endcode
19*************************************************************************/
20#ifndef __TIM_GENERAL_H_
21#define __TIM_GENERAL_H_
22
23/////////////////////////////////////////////////////////////////////
24/////////////////////////---USER SETTINGS---/////////////////////////
25/**
26 * @addtogroup TIM_INIT Init defines
27 * @ingroup MYLIBS_TIM_GENERAL
28 * @brief Настройка таймеров
29 * @{
30 */
31#define HAL_TIM_MODULE_ENABLED
32
33#define USE_TIM1 ///< Включить TIM1 в @ref TIM_Base_MspInit
34#define USE_TIM2 ///< Включить TIM2 в @ref TIM_Base_MspInit
35#define USE_TIM3 ///< Включить TIM3 в @ref TIM_Base_MspInit
36#define USE_TIM4 ///< Включить TIM4 в @ref TIM_Base_MspInit
37#define USE_TIM5 ///< Включить TIM5 в @ref TIM_Base_MspInit
38#define USE_TIM6 ///< Включить TIM6 в @ref TIM_Base_MspInit
39#define USE_TIM7 ///< Включить TIM7 в @ref TIM_Base_MspInit
40#define USE_TIM8 ///< Включить TIM8 в @ref TIM_Base_MspInit
41#define USE_TIM9 ///< Включить TIM9 в @ref TIM_Base_MspInit
42#define USE_TIM10 ///< Включить TIM10 в @ref TIM_Base_MspInit
43#define USE_TIM11 ///< Включить TIM11 в @ref TIM_Base_MspInit
44#define USE_TIM12 ///< Включить TIM12 в @ref TIM_Base_MspInit
45#define USE_TIM13 ///< Включить TIM13 в @ref TIM_Base_MspInit
46#define USE_TIM14 ///< Включить TIM14 в @ref TIM_Base_MspInit
47/** TIM_INIT
48 * @}
49 */
50/////////////////////////---USER SETTINGS---/////////////////////////
51#include "mylibs_defs.h"
52#include "general_gpio.h"
53
54/////////////////////////////////////////////////////////////////////
55////////////////////////////---DEFINES---////////////////////////////
56#define TIM_IT_CONF_Pos 0
57//#define TIM_PWM_CONF_Pos 1
58//#define TIM_CLCK_SRC_CONF_Pos 2
59//#define TIM_SLAVE_CONF_Pos 3
60//#define TIM_MASTER_CONF_Pos 4
61//#define TIM_BDTR_CONF_Pos 5
62
63#define TIM_IT_CONF (1<<(TIM_IT_CONF_Pos))
64//#define TIM_PWM_CONF (1<<(TIM_PWM_Pos))
65
66////////////////////////////---DEFINES---////////////////////////////]
67
68
69
70/////////////////////////////////////////////////////////////////////
71///////////////////////---STRUCTURES & ENUMS---//////////////////////
72/**
73 * @brief Режим прерываний таймера
74 * @ingroup MYLIBS_TIM_GENERAL
75 */
76typedef enum
77{
78 TIM_DEFAULT = 0, ///< Прерываний отключены
79 TIM_IT_MODE = TIM_IT_CONF, ///< Прерываний включены
80// TIM_PWM_MODE = TIM_PWM_ENABLE,
81// TIM_PWM_IT_MODE = TIM_PWM_ENABLE | TIM_IT_CONF,
83
84/**
85 * @brief Длительность тика таймера (частота тактирования таймера)
86 * @ingroup MYLIBS_TIM_GENERAL
87 * @details enum дает базовые длительности, но можно выставить другие
88 * (напр 500 - 0.5 мс)
89 */
90typedef enum
91{
92 TIM_Base_Disable = 0, ///< Таймер отключен
93 TIM_TickBase_1US = 1, ///< Таймер тактируется с частотой 1 МГц
94 TIM_TickBase_10US = 10, ///< Таймер тактируется с частотой 100 кГц
95 TIM_TickBase_100US = 100, ///< Таймер тактируется с частотой 10 кГц
96 TIM_TickBase_1MS = 1000, ///< Таймер тактируется с частотой 1 кГц
97 TIM_TickBase_10MS = 10000, ///< Таймер тактируется с частотой 100 Гц
98 TIM_TickBase_100MS = 100000, ///< Таймер тактируется с частотой 10 Гц
100
101/**
102 * @brief Структура инициализации таймера
103 * @ingroup MYLIBS_TIM_GENERAL
104 * @details
105 * Содержит все базовые структуры, которые нужны для инициализации таймера.
106 * Если структуры настроек не заданы, то они заполнятся сами дефолтными параметрами
107 *
108 * Также высокоуровневые настройки частоты работы таймера.
109 * Если какая-либо высокоуровневая настройка не задана, то
110 * по возможности берется низкоуровневая настройка из структур
111 */
112typedef struct // struct with settings for custom function
113{
114 TIM_HandleTypeDef htim; ///< HAL handle таймера
115 TIM_ClockConfigTypeDef sClockSourceConfig; ///< Настройки тактирования таймера
116 TIM_SlaveConfigTypeDef sSlaveConfig; ///< Настройки слейв режима таймера
117 TIM_MasterConfigTypeDef sMasterConfig; ///< Настройки мастер режима таймера
118 TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; ///< Настройки дедтаймов таймера
119
120 TIM_ITModeTypeDef sTimMode; ///< Настройки прерывания таймера
121 TIM_MHzTickBaseTypeDef sTickBaseUS; ///< Длительность одного тика
122 uint8_t sTickBasePrescaler; ///< Дополнительный делитель, для удобного деления @ref sTickBaseUS
123 float sTimAHBFreqMHz; ///< Частота шины тактирования таймера
124 float sTimFreqHz; ///< Желаемая частота таймера
125
127
128
129/**
130 * @brief Структура инициализации енкодера
131 * @ingroup MYLIBS_TIM_ENCODER
132 * @details
133 * Содержит все базовые структуры, которые нужны для инициализации таймера.
134 * Если структуры настроек не заданы, то они заполнятся сами дефолтными параметрами
135 *
136 * Также высокоуровневые настройки частоты работы таймера.
137 * Если какая-либо высокоуровневая настройка не задана, то
138 * по возможности берется низкоуровневая настройка из структур
139 */
140typedef struct // struct with variables for encoder
141{
142 int16_t Encoder_Diff; ///< Считанная разница
143 uint16_t Encoder_Shdw; ///< Последние считанные тики
144
145 TIM_HandleTypeDef *htim; ///< Указатель на HAL handle таймера
146 TIM_Encoder_InitTypeDef sConfig; ///< Указатель на структуру настройки энкодера
147
148 GPIO_TypeDef *GPIOx; ///< Порт, куда подключается энкодер
149 uint32_t GPIO_PIN_TI1; ///< Пин, куда подключается канал TI1
150 uint32_t GPIO_PIN_TI2; ///< Пин, куда подключается канал TI2
151 uint32_t GPIO_PIN_SW; ///< Пин, куда кнопка энкодера (если есть)
152
153 GPIO_SwitchTypeDef Sw; ///< Структура кнопки
154
156///////////////////////---STRUCTURES & ENUMS---//////////////////////
157
158/////////////////////////////////////////////////////////////////////
159///////////////////////////---FUNCTIONS---///////////////////////////
160/**
161 * @addtogroup MYLIBS_TIM_OC PWM/OC Channels tools
162 * @ingroup MY_LIBS_TIM
163 * @brief Функции для инициализации базовых функций каналов таймера
164 * @{
165 */
166/* Initialize PWM Channel and GPIO for output */
167HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN);
168/* Initialize OC Comparator */
169HAL_StatusTypeDef TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL);
170/** MYLIBS_TIM_ENCODER
171 * @}
172 */
173
174/**
175 * @addtogroup MYLIBS_TIM_ENCODER Encoder tools
176 * @ingroup MY_LIBS_TIM
177 * @brief Функции для считывания энкодера
178 * @{
179 */
180/* Initialize TIM Encoder functional */
181HAL_StatusTypeDef TIM_Encoder_Init(TIM_EncoderTypeDef *henc1, TIM_HandleTypeDef *htim);
182/* Считать энкодер */
183HAL_StatusTypeDef TIM_Encoder_Read(TIM_EncoderTypeDef *henc);
184/* Считать кнопку энкодера */
186/** MYLIBS_TIM_ENCODER
187 * @}
188 */
189
190/**
191 * @addtogroup MYLIBS_TIM_DELAY Delay tools
192 * @ingroup MY_LIBS_TIM
193 * @brief Функции для формирования задержек с помощью таймеров
194 * @{
195 */
196/* Start delay via TIM */
197HAL_StatusTypeDef TIM_Delay_Start(TIM_HandleTypeDef *htim);
198/* Delay via TIM */
199HAL_StatusTypeDef TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay);
200/* Wait Delay via TIM without blocking app */
201HAL_StatusTypeDef TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay);
202/** MYLIBS_TIM_DELAY
203 * @}
204 */
205
206/**
207 * @addtogroup MYLIBS_TIM_GENERAL General tools
208 * @ingroup MY_LIBS_TIM
209 * @brief Функции для базовой инициализации таймеров
210 * @{
211 */
212/* Initialize TIM with TIM_SettingsTypeDef structure */
213HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef* stim);
214/* Initialize TIMs clock and interrupt */
215void TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode);
216/* DeInitialize TIMs clock and interrupt */
217void TIM_Base_MspDeInit(TIM_HandleTypeDef* htim);
218/** MYLIBS_TIM_GENERAL
219 * @}
220 */
221///////////////////////////---FUNCTIONS---///////////////////////////
222
223
224#endif // __TIM_GENERAL_H_
Заголовочный файл для модуля инициализации портов и работы с ними.
HAL_StatusTypeDef TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay)
Задержка в тиках таймера (неблокирующая).
HAL_StatusTypeDef TIM_Delay_Start(TIM_HandleTypeDef *htim)
Начать отсчет неблокирующей задержки.
HAL_StatusTypeDef TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay)
Задержка в тиках таймера (блокирующая).
int TIM_Encoder_ReadSwitch(TIM_EncoderTypeDef *henc)
Считать кнопку энкодера.
HAL_StatusTypeDef TIM_Encoder_Init(TIM_EncoderTypeDef *henc1, TIM_HandleTypeDef *htim)
Инициализация режима энкодер у таймера.
HAL_StatusTypeDef TIM_Encoder_Read(TIM_EncoderTypeDef *henc)
Считать энкодер.
HAL_StatusTypeDef TIM_Base_Init(TIM_SettingsTypeDef *stim)
Инициализация таймера.
Definition general_tim.c:34
void TIM_Base_MspDeInit(TIM_HandleTypeDef *htim)
Деинициализация CLK и NVIC таймеров.
TIM_MHzTickBaseTypeDef
Длительность тика таймера (частота тактирования таймера)
Definition general_tim.h:91
void TIM_Base_MspInit(TIM_HandleTypeDef *htim, TIM_ITModeTypeDef it_mode)
Инициализация CLK и NVIC таймеров.
TIM_ITModeTypeDef
Режим прерываний таймера
Definition general_tim.h:77
@ TIM_TickBase_10US
Таймер тактируется с частотой 100 кГц
Definition general_tim.h:94
@ TIM_TickBase_100US
Таймер тактируется с частотой 10 кГц
Definition general_tim.h:95
@ TIM_TickBase_100MS
Таймер тактируется с частотой 10 Гц
Definition general_tim.h:98
@ TIM_TickBase_1US
Таймер тактируется с частотой 1 МГц
Definition general_tim.h:93
@ TIM_TickBase_1MS
Таймер тактируется с частотой 1 кГц
Definition general_tim.h:96
@ TIM_TickBase_10MS
Таймер тактируется с частотой 100 Гц
Definition general_tim.h:97
@ TIM_Base_Disable
Таймер отключен
Definition general_tim.h:92
@ TIM_IT_MODE
Прерываний включены
Definition general_tim.h:79
@ TIM_DEFAULT
Прерываний отключены
Definition general_tim.h:78
HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t PWM_PIN)
Инициализация выхода ШИМ таймера.
HAL_StatusTypeDef TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL)
Инициализация OC компаратора таймера.
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
Структура кнопки
Структура инициализации енкодера
TIM_Encoder_InitTypeDef sConfig
Указатель на структуру настройки энкодера
uint16_t Encoder_Shdw
Последние считанные тики
uint32_t GPIO_PIN_TI1
Пин, куда подключается канал TI1.
uint32_t GPIO_PIN_TI2
Пин, куда подключается канал TI2.
uint32_t GPIO_PIN_SW
Пин, куда кнопка энкодера (если есть)
int16_t Encoder_Diff
Считанная разница
GPIO_SwitchTypeDef Sw
Структура кнопки
GPIO_TypeDef * GPIOx
Порт, куда подключается энкодер
TIM_HandleTypeDef * htim
Указатель на HAL handle таймера
Структура инициализации таймера
uint8_t sTickBasePrescaler
Дополнительный делитель, для удобного деления sTickBaseUS.
TIM_MasterConfigTypeDef sMasterConfig
Настройки мастер режима таймера
TIM_ClockConfigTypeDef sClockSourceConfig
Настройки тактирования таймера
TIM_MHzTickBaseTypeDef sTickBaseUS
Длительность одного тика
float sTimAHBFreqMHz
Частота шины тактирования таймера
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig
Настройки дедтаймов таймера
TIM_SlaveConfigTypeDef sSlaveConfig
Настройки слейв режима таймера
TIM_ITModeTypeDef sTimMode
Настройки прерывания таймера
TIM_HandleTypeDef htim
HAL handle таймера
float sTimFreqHz
Желаемая частота таймера