libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
stm32_gpio.hpp
1#pragma once
2
3#include "gpio.hpp"
4#include "main.h"
5
6#ifdef HAL_GPIO_MODULE_ENABLED
7
8typedef enum
9{
10#if defined(STM32F0) || defined(STM32G0) || defined(STM32L0)
11 STM32_GPIO_EXTI_0_1,
12 STM32_GPIO_EXTI_2_3,
13 STM32_GPIO_EXTI_4_15,
14#elif defined(STM32WB0)
15 STM32_GPIO_EXTI_GPIOA,
16 STM32_GPIO_EXTI_GPIOB,
17#else
18 STM32_GPIO_EXTI_0,
19 STM32_GPIO_EXTI_1,
20 STM32_GPIO_EXTI_2,
21 STM32_GPIO_EXTI_3,
22 STM32_GPIO_EXTI_4,
23 STM32_GPIO_EXTI_5_9,
24 STM32_GPIO_EXTI_10_15,
25#endif
26 STM32_GPIO_EXTI_NUMBER
27} stm32_gpio_exti_t;
28
29stm32_gpio_exti_t STM32_GPIO_EXTI_GetID(uint16_t pin); // NOLINT
30
31namespace LibXR
32{
33class STM32GPIO : public GPIO
34{
35 public:
37 : port_(port), pin_(pin), irq_(irq)
38 {
39 if (irq_ != NonMaskableInt_IRQn)
40 {
41 map[STM32_GPIO_EXTI_GetID(pin)] = this;
42 }
43 }
44
45 bool Read() { return HAL_GPIO_ReadPin(port_, pin_) == GPIO_PIN_SET; }
46
47 ErrorCode Write(bool value)
48 {
50 return ErrorCode::OK;
51 }
52
53 ErrorCode EnableInterrupt()
54 {
55 ASSERT(irq_ != NonMaskableInt_IRQn);
57 return ErrorCode::OK;
58 }
59
60 ErrorCode DisableInterrupt()
61 {
62 ASSERT(irq_ != NonMaskableInt_IRQn);
64 return ErrorCode::OK;
65 }
66
68 {
70
71 HAL_GPIO_DeInit(port_, pin_);
72
73 gpio_init.Pin = pin_;
74
75 switch (config.direction)
76 {
79 break;
82 break;
85 break;
88 break;
91 break;
94 break;
95 }
96
97 switch (config.pull)
98 {
99 case Pull::NONE:
100 gpio_init.Pull = GPIO_NOPULL;
101 break;
102 case Pull::UP:
103 gpio_init.Pull = GPIO_PULLUP;
104 break;
105 case Pull::DOWN:
107 break;
108 }
109
111
112 HAL_GPIO_Init(port_, &gpio_init);
113
114 return ErrorCode::OK;
115 }
116
117 static STM32GPIO* map[STM32_GPIO_EXTI_NUMBER]; // NOLINT
118
119 private:
120 GPIO_TypeDef* port_;
121 uint16_t pin_;
122 IRQn_Type irq_;
123};
124
125} // namespace LibXR
126
127#endif
通用输入输出(GPIO)接口类。General Purpose Input/Output (GPIO) interface class.
Definition gpio.hpp:13
@ OUTPUT_PUSH_PULL
推挽输出模式。Push-pull output mode.
@ RISING_INTERRUPT
上升沿中断模式。Rising edge interrupt mode.
@ FALL_RISING_INTERRUPT
双沿触发中断模式。Both edge interrupt mode.
@ OUTPUT_OPEN_DRAIN
开漏输出模式。Open-drain output mode.
@ INPUT
输入模式。Input mode.
@ FALL_INTERRUPT
下降沿中断模式。Falling edge interrupt mode.
@ NONE
无上拉或下拉。No pull-up or pull-down.
@ DOWN
下拉模式。Pull-down mode.
@ UP
上拉模式。Pull-up mode.
bool Read()
读取 GPIO 引脚状态。Reads the GPIO pin state.
ErrorCode SetConfig(Configuration config)
配置 GPIO 引脚参数。Configures the GPIO pin settings.
ErrorCode Write(bool value)
写入 GPIO 引脚状态。Writes the GPIO pin state.
ErrorCode EnableInterrupt()
使能 GPIO 引脚中断。Enables the GPIO pin interrupt.
ErrorCode DisableInterrupt()
禁用 GPIO 引脚中断。Disables the GPIO pin interrupt.
LibXR Color Control Library / LibXR终端颜色控制库
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值
存储 GPIO 配置参数的结构体。Structure storing GPIO configuration parameters.
Definition gpio.hpp:46