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 LED_PWM_TICKS
31#define LED_PWM_TICKS 15 ///< Количество тиков в периоде ШИМ
32#endif
33
34#ifndef LED_ON
35#define LED_ON 1 ///< Состояние пина для включения светодиода
36#endif
37#ifndef LED_OFF
38#define LED_OFF 0 ///< Состояние пина для выключения светодиода
39#endif
40
41#ifndef SW_ON
42#define SW_ON 1 ///< Состояние пина при нажатой кнопке
43#endif
44#ifndef SW_OFF
45#define SW_OFF 0 ///< Состояние пина при отжатой кнопке
46#endif
47
48/** GPIO_INIT
49 * @}
50 */
51
52
53// /**
54// * @brief Маппинг альтернативной функции SPI между GPIO
55// * @ingroup MYLIBS_GPIO_GENERAL
56// */
57// #define SPI_Alternate_Mapping(INSTANCE) \
58// ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
59// (((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
60// (((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
61// (((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
62// (0))
63
64
65/**
66 * @brief Маппинг альтернативной функции TIM между GPIO
67 * @ingroup MYLIBS_GPIO_GENERAL
68 */
69#define GPIO_TIM_Alternate_Mapping(INSTANCE) \
70((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
71(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
72(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
73(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
74(0))
75
76
77/**
78 * @brief Режимы работы светодиода
79 * @ingroup MYLIBS_GPIO_LEDS
80 */
81typedef enum
82{
83 LED_IS_OFF = 0, ///< Светодиод выключен
84 LED_IS_ON = 1, ///< Светодиод включен
85 LED_IS_BLINKING = 2, ///< Моргание светодиодом
86 LED_IS_FADING = 3, ///< Плавное моргание светодиодом
88
89/**
90 * @brief Структура светодиода
91 * @ingroup MYLIBS_GPIO_LEDS
92 */
93typedef struct
94{
95 GPIO_LEDStateTypeDef state; ///< Текущий режим работы светодиода
96
97 GPIO_TypeDef *LED_Port; ///< GPIO порт ножки светодиода
98 uint32_t LED_Pin; ///< GPIO пин ножки светодиода
99
100 uint8_t LED_ActiveLvl; ///< Активный уровень ножки (при котором светодиод горит)
101 uint32_t LED_Period; ///< Период моргания светодиода
102
103 uint32_t tickprev;
105
106/**
107 * @brief Структура кнопки
108 * @ingroup MYLIBS_GPIO_SWITCH
109 */
110typedef struct
111{
112 GPIO_TypeDef *Sw_Port; ///< GPIO порт ножки кнопки
113 uint32_t Sw_Pin; ///< GPIO пин ножки кнопки
114
115 uint8_t Sw_ActiveLvl; ///< Активный уровень ножки (при котором кнопка нажата)
116 uint32_t Sw_PrevState; ///< Предыдущее состояние кнопки
117 uint32_t Sw_FilterDelay; ///< Фильтр от дребезга (в мс)
118
119 uint32_t tickprev;
121
122
123/////////////////////////////////////////////////////////////////////
124///////////////////////////---FUNCTIONS---///////////////////////////
125/**
126 * @addtogroup MYLIBS_GPIO_GENERAL General tools
127 * @ingroup MY_LIBS_GPIO
128 * @brief Общие функции/макросы для работы с GPIO
129 * @{
130 */
131
132HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx);
133
134/** MYLIBS_GPIO_GENERAL
135 * @}
136 */
137
138/**
139* @addtogroup MYLIBS_GPIO_SWITCH Switch tools
140* @ingroup MY_LIBS_GPIO
141* @brief Функции для работы с GPIO, как с кнопкой
142* @{
143*/
144
145/* Инициализировать кнопку (структуру кнопки) */
146HAL_StatusTypeDef GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t SW_On_State);
147/* Считать состоянии кнопки запуска */
149
150/** MYLIBS_GPIO_SWITCH
151 * @}
152 */
153
154
155/**
156 * @addtogroup MYLIBS_GPIO_LEDS LED tools
157 * @ingroup MY_LIBS_GPIO
158 * @brief Функции для работы с GPIO, для управления светодиодом
159 * @{
160 */
161
162/* Инициализировать светодиод (структуру светодиода) */
163HAL_StatusTypeDef GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, uint8_t LED_On_State);
164/* Включить светодиод */
165HAL_StatusTypeDef GPIO_LED_On (GPIO_LEDTypeDef *led);
166/* Выключить светодиод */
167HAL_StatusTypeDef GPIO_LED_Off (GPIO_LEDTypeDef *led);
168/* Выставить светодиод по переменной */
169HAL_StatusTypeDef GPIO_LED_Set (GPIO_LEDTypeDef *led, uint8_t led_state);
170/* Активировать моргание светодиодом */
171HAL_StatusTypeDef GPIO_LED_Blink_Start (GPIO_LEDTypeDef *led, uint32_t period);
172/* Активировать моргание светодиодом */
173HAL_StatusTypeDef GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period);
174/* Управление динамическими режимами свечения светодиода */
176
177/** MYLIBS_GPIO_LEDS
178 * @}
179 */
180///////////////////////////---FUNCTIONS---///////////////////////////
181
182
183#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 порт ножки кнопки