MyLibs 1.0
Расширенные библиотеки для STM32
Loading...
Searching...
No Matches
general_gpio.h
Go to the documentation of this file.
1/**
2**************************************************************************
3* @file general_gpio.h
4* @brief Заголовочный файл для модуля инициализации портов и работы с ними.
5**************************************************************************
6* @defgroup MY_LIBS_GPIO GPIO Tools
7* @ingroup MYLIBS_PERIPHERAL
8* @brief Функции и макросы для удобной работы с GPIO.
9* @details
10Модуль предоставляет универсальные инструменты для работы с GPIO):
11 - @ref MYLIBS_GPIO_GENERAL — инициализация и общие функции работы с портами.
12 - @ref MYLIBS_GPIO_SWITCH — работа с GPIO как с кнопкой: чтение состояния,
13 фильтрация дребезга, настройка активного уровня.
14 - @ref MYLIBS_GPIO_LEDS — работа с GPIO как со светодиодом: включение,
15 выключение, моргание и плавное затухание.
16
17*************************************************************************/
18#ifndef __GPIO_GENERAL_H_
19#define __GPIO_GENERAL_H_
20
21#include "mylibs_defs.h"
22
23/**
24 * @addtogroup GPIO_INIT Init defines
25 * @ingroup MYLIBS_GPIO_GENERAL
26 * @brief Настройка состояний кнопок и количества тиков в периоде ШИМ
27 * @{
28 */
29
30#ifndef local_time
31#define local_time() HAL_GetTick() ///< Локальное время
32#endif
33
34#ifndef LED_PWM_TICKS
35#define LED_PWM_TICKS 15 ///< Количество тиков в периоде ШИМ
36#endif
37
38#ifndef LED_ON
39#define LED_ON 1 ///< Состояние пина для включения светодиода
40#endif
41#ifndef LED_OFF
42#define LED_OFF 0 ///< Состояние пина для выключения светодиода
43#endif
44
45#ifndef SW_ON
46#define SW_ON 1 ///< Состояние пина при нажатой кнопке
47#endif
48#ifndef SW_OFF
49#define SW_OFF 0 ///< Состояние пина при отжатой кнопке
50#endif
51
52/** GPIO_INIT
53 * @}
54 */
55
56
57/**
58 * @brief Режимы работы светодиода
59 * @ingroup MYLIBS_GPIO_LEDS
60 */
61typedef enum
62{
63 LED_IS_OFF = 0, ///< Светодиод выключен
64 LED_IS_ON = 1, ///< Светодиод включен
65 LED_IS_BLINKING = 2, ///< Моргание светодиодом
66 LED_IS_FADING = 3, ///< Плавное моргание светодиодом
68
69/**
70 * @brief Структура светодиода
71 * @ingroup MYLIBS_GPIO_LEDS
72 */
73typedef struct
74{
75 GPIO_LEDStateTypeDef state; ///< Текущий режим работы светодиода
76
77 GPIO_TypeDef *LED_Port; ///< GPIO порт ножки светодиода
78 uint32_t LED_Pin; ///< GPIO пин ножки светодиода
79
80 uint8_t LED_ActiveLvl; ///< Активный уровень ножки (при котором светодиод горит)
81 uint32_t LED_Period; ///< Период моргания светодиода
82
83 uint32_t tickprev;
85
86/**
87 * @brief Структура кнопки
88 * @ingroup MYLIBS_GPIO_SWITCH
89 */
90typedef struct
91{
92 GPIO_TypeDef *Sw_Port; ///< GPIO порт ножки кнопки
93 uint32_t Sw_Pin; ///< GPIO пин ножки кнопки
94
95 uint8_t Sw_ActiveLvl; ///< Активный уровень ножки (при котором кнопка нажата)
96 uint32_t Sw_PrevState; ///< Предыдущее состояние кнопки
97 uint32_t Sw_FilterDelay; ///< Фильтр от дребезга (в мс)
98
99 uint32_t tickprev;
101
102
103/////////////////////////////////////////////////////////////////////
104///////////////////////////---FUNCTIONS---///////////////////////////
105/**
106 * @addtogroup MYLIBS_GPIO_GENERAL General tools
107 * @ingroup MY_LIBS_GPIO
108 * @brief Общие функции/макросы для работы с GPIO
109 * @par Пример использования:
110 @code
111 // Включаем тактирование порта GPIOA
112 GPIO_Clock_Enable(GPIOA);
113 @endcode
114 * @{
115 */
116
117HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx);
118
119/** MYLIBS_GPIO_GENERAL
120 * @}
121 */
122
123/**
124 * @addtogroup MYLIBS_GPIO_SWITCH Switch tools
125 * @ingroup MY_LIBS_GPIO
126 * @brief Функции для работы с GPIO, как с кнопкой
127 * @par Пример использования:
128 @code
129 MX_GPIO_Init(); // инициализация пина аппаратная
130
131 // Инициализация кнопки на порте GPIOB, пин 0, активный уровень 1
132 GPIO_SwitchTypeDef sw1;
133 GPIO_Switch_Init(&sw1, GPIOB, GPIO_PIN_0, 1); // или дефайн SW_ON/SW_OFF
134
135 // Считываем состояние кнопки
136 if(GPIO_Read_Switch(&sw1))
137 {
138 // Кнопка нажата
139 LED_ON();
140 }
141 else
142 {
143 // Кнопка отжата
144 LED_OFF();
145 }
146 @endcode
147 * @{
148 */
149
150/* Инициализировать кнопку (структуру кнопки) */
151HAL_StatusTypeDef GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State);
152/* Считать состоянии кнопки запуска */
154
155/** MYLIBS_GPIO_SWITCH
156 * @}
157 */
158
159
160/**
161 * @addtogroup MYLIBS_GPIO_LEDS LED tools
162 * @ingroup MY_LIBS_GPIO
163 * @brief Функции для работы с GPIO, для управления светодиодом
164 * @par Пример использования:
165 @code
166 MX_GPIO_Init(); // инициализация пина аппаратная
167
168 // Инициализация светодиода на порте GPIOA, пин 5, активный уровень 0
169 GPIO_LEDTypeDef led;
170 GPIO_LED_Init(&led, GPIOA, GPIO_PIN_5, 0); // или дефайн LED_ON/LED_OFF
171
172 // Включение светодиода
173 GPIO_LED_On(&led);
174
175 // Запуск моргания
176 GPIO_LED_Blink_Start(&led, 500); // Период 500 мс
177
178 // В основном цикле
179 while (1) {
180 GPIO_LED_Dynamic_Handle(&led);
181 }
182 @endcode
183 * @{
184 */
185
186/* Инициализировать светодиод (структуру светодиода) */
187HAL_StatusTypeDef GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State);
188/* Включить светодиод */
189HAL_StatusTypeDef GPIO_LED_On (GPIO_LEDTypeDef *led);
190/* Выключить светодиод */
191HAL_StatusTypeDef GPIO_LED_Off (GPIO_LEDTypeDef *led);
192/* Выставить светодиод по переменной */
193HAL_StatusTypeDef GPIO_LED_Set (GPIO_LEDTypeDef *led, uint8_t led_state);
194/* Активировать моргание светодиодом */
195HAL_StatusTypeDef GPIO_LED_Blink_Start (GPIO_LEDTypeDef *led, uint32_t period);
196/* Активировать моргание светодиодом */
197HAL_StatusTypeDef GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period);
198/* Управление динамическими режимами свечения светодиода */
200
201/** MYLIBS_GPIO_LEDS
202 * @}
203 */
204///////////////////////////---FUNCTIONS---///////////////////////////
205
206
207/**
208 * @cond GPIO_INTERNAL
209 */
210
211// /**
212// * @brief Маппинг альтернативной функции SPI между GPIO
213// * @ingroup MYLIBS_GPIO_GENERAL
214// */
215// #define SPI_Alternate_Mapping(INSTANCE) \
216// ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
217// (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
218// (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
219// (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
220// (0))
221
222
223/**
224 * @brief Маппинг альтернативной функции TIM между GPIO
225 * @ingroup MYLIBS_GPIO_GENERAL
226 */
227#define GPIO_TIM_Alternate_Mapping(INSTANCE) \
228((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
229(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
230(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
231(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
232(0))
233
234
235/** @endcond */
236
237#endif // __GPIO_GENERAL_H_
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
Включить тактирование порта GPIO.
HAL_StatusTypeDef GPIO_LED_On(GPIO_LEDTypeDef *led)
Включить светодиод
HAL_StatusTypeDef GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period)
Активировать моргание светодиодом
GPIO_LEDStateTypeDef
Режимы работы светодиода
HAL_StatusTypeDef GPIO_LED_Off(GPIO_LEDTypeDef *led)
Выключить светодиод
HAL_StatusTypeDef GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State)
Инициализировать светодиод (структуру светодиода)
void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)
Управление динамическими режимами свечения светодиода
HAL_StatusTypeDef GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state)
Выставить светодиод по переменной
HAL_StatusTypeDef GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period)
Активировать моргание светодиодом
@ LED_IS_BLINKING
Моргание светодиодом
@ LED_IS_OFF
Светодиод выключен
@ LED_IS_FADING
Плавное моргание светодиодом
@ LED_IS_ON
Светодиод включен
int GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart)
Считать состоянии кнопки
HAL_StatusTypeDef GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State)
Инициализировать кнопку (структуру кнопки)
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
Структура светодиода
uint32_t LED_Pin
GPIO пин ножки светодиода
uint32_t LED_Period
Период моргания светодиода
GPIO_TypeDef * LED_Port
GPIO порт ножки светодиода
uint8_t LED_ActiveLvl
Активный уровень ножки (при котором светодиод горит)
GPIO_LEDStateTypeDef state
Текущий режим работы светодиода
Структура кнопки
uint32_t Sw_PrevState
Предыдущее состояние кнопки
uint32_t Sw_FilterDelay
Фильтр от дребезга (в мс)
uint8_t Sw_ActiveLvl
Активный уровень ножки (при котором кнопка нажата)
uint32_t Sw_Pin
GPIO пин ножки кнопки
GPIO_TypeDef * Sw_Port
GPIO порт ножки кнопки