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