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