gpio.h¶
General Purpose Input/Output (GPIO) port and Alternate Function Input/Output (AFIO) support.
Types¶
-
struct
stm32f1::gpio_reg_map¶ GPIO register map type.
-
struct
stm32f2_f4::gpio_reg_map¶ GPIO register map type.
-
struct
gpio_dev¶ GPIO device type.
-
enum
stm32f1::gpio_pin_mode¶ GPIO pin modes.
These only allow for 50MHZ max output speeds; if you want slower, use direct register access.
Values:
-
GPIO_OUTPUT_PP= GPIO_CR_CNF_OUTPUT_PP | GPIO_CR_MODE_OUTPUT_50MHZ¶ Output push-pull.
-
GPIO_OUTPUT_OD= GPIO_CR_CNF_OUTPUT_OD | GPIO_CR_MODE_OUTPUT_50MHZ¶ Output open-drain.
-
GPIO_AF_OUTPUT_PP= GPIO_CR_CNF_AF_OUTPUT_PP | GPIO_CR_MODE_OUTPUT_50MHZ¶ Alternate function output push-pull.
-
GPIO_AF_OUTPUT_OD= GPIO_CR_CNF_AF_OUTPUT_OD | GPIO_CR_MODE_OUTPUT_50MHZ¶ Alternate function output open drain.
-
GPIO_INPUT_ANALOG= GPIO_CR_CNF_INPUT_ANALOG | GPIO_CR_MODE_INPUT¶ Analog input.
-
GPIO_INPUT_FLOATING= GPIO_CR_CNF_INPUT_FLOATING | GPIO_CR_MODE_INPUT¶ Input floating.
-
GPIO_INPUT_PD= GPIO_CR_CNF_INPUT_PU_PD | GPIO_CR_MODE_INPUT¶ Input pull-down.
-
GPIO_INPUT_PU¶ Input pull-up.
-
-
struct
stm32f1::afio_reg_map¶ AFIO register map.
-
typedef exti_cfg
stm32f1::afio_exti_port¶ Deprecated.
Use exti_cfg instead.
In previous versions of libmaple, exti_attach_interrupt() took an afio_exti_port argument; afio_exti_port was also a member of struct gpio_dev. This isn’t portable, so we now use exti_cfg instead. This typedef (and the macros AFIO_EXTI_PA, ..., AFIO_EXTI_PG) exist to preserve backwards compatibility.
-
typedef exti_num
stm32f1::afio_exti_num¶ Deprecated.
Use exti_num instead.
In previous versions of libmaple, exti_attach_interrupt() took an afio_exti_num argument. This isn’t portable, so we use exti_num instead. This typedef (and the macros AFIO_EXTI_0, ..., AFIO_EXTI_15) exist to preserve backwards compatibility.
-
typedef
enum stm32f1::afio_remap_peripheral stm32f1::afio_remap_peripheral Available peripheral remaps.
- See
- afio_remap()
-
typedef
enum stm32f1::afio_debug_cfg stm32f1::afio_debug_cfg Debug port configuration.
Used to configure the behavior of JTAG and Serial Wire (SW) debug ports and their associated GPIO pins.
- See
- afio_cfg_debug_ports()
Functions¶
-
void
gpio_init(gpio_dev *dev)¶ Initialize a GPIO device.
Enables the clock for and resets the given device.
- Parameters
dev-GPIO device to initialize.
-
void
gpio_init_all(void)¶ Initialize and reset all available GPIO devices.
-
void
gpio_set_mode(gpio_dev *dev, uint8 pin, gpio_pin_mode mode)¶ Set the mode of a GPIO pin.
- See
- gpio_pin_mode
- Parameters
dev-GPIO device.
pin-Pin on the device whose mode to set, 015.
mode-General purpose or alternate function mode to set the pin to.
-
static exti_cfg
gpio_exti_port(gpio_dev *dev)¶ Get a GPIO port’s corresponding EXTI port configuration.
- Parameters
dev-GPIO port whose exti_cfg to return.
-
static void
gpio_write_bit(gpio_dev *dev, uint8 pin, uint8 val)¶ Set or reset a GPIO pin.
Pin must have previously been configured to output mode.
- Parameters
dev-GPIO device whose pin to set.
pin-Pin on to set or reset
val-If true, set the pin. If false, reset the pin.
-
static uint32
gpio_read_bit(gpio_dev *dev, uint8 pin)¶ Determine whether or not a GPIO pin is set.
Pin must have previously been configured to input mode.
- Return
- True if the pin is set, false otherwise.
- Parameters
dev-GPIO device whose pin to test.
pin-Pin on dev to test.
-
static void
gpio_toggle_bit(gpio_dev *dev, uint8 pin)¶ Toggle a pin configured as output push-pull.
- Parameters
dev-GPIO device.
pin-Pin on dev to toggle.
-
void
stm32f1::afio_init(void)¶ Initialize the AFIO clock, and reset the AFIO registers.
-
afio_exti_select(exti, port)¶ Macro for exti_select((exti), (port)).
-
void
stm32f1::afio_remap(afio_remap_peripheral p)¶
-
static void
stm32f1::afio_cfg_debug_ports(afio_debug_cfg config)¶ Enable or disable the JTAG and SW debug ports.
- See
- afio_debug_cfg
- Parameters
config-Desired debug port configuration
Register Map Base Pointers¶
-
GPIOA_BASE¶ GPIO port A register map base pointer.
-
GPIOB_BASE¶ GPIO port B register map base pointer.
-
GPIOC_BASE¶ GPIO port C register map base pointer.
-
GPIOD_BASE¶ GPIO port D register map base pointer.
-
GPIOE_BASE¶ GPIO port E register map base pointer.
-
GPIOF_BASE¶ GPIO port F register map base pointer.
-
GPIOG_BASE¶ GPIO port G register map base pointer.
-
AFIO_BASE¶ AFIO register map base pointer.
Register Bit Definitions¶
GPIO Control Registers¶
These values apply to both the low and high configuration registers (ST RM0008: GPIOx_CRL and GPIOx_CRH). You can shift them right by the appropriate number of bits for the GPIO port bit you’re interested in to obtain a bit mask.
For example, to mask out just the value of GPIOA_CRH_CNF12, note that
GPIO port bit 12’s configuration starts at bit 18 in the corresponding
CRH. Thus, an appropriate mask is GPIOA_BASE->CRH & (GPIO_CR_CNF <<
18).
-
GPIO_CR_CNF_INPUT_ANALOG¶
-
GPIO_CR_CNF_INPUT_FLOATING¶
-
GPIO_CR_CNF_INPUT_PU_PD¶
-
GPIO_CR_CNF_OUTPUT_PP¶
-
GPIO_CR_CNF_OUTPUT_OD¶
-
GPIO_CR_CNF_AF_OUTPUT_PP¶
-
GPIO_CR_CNF_AF_OUTPUT_OD¶
-
GPIO_CR_MODE_INPUT¶
-
GPIO_CR_MODE_OUTPUT_10MHZ¶
-
GPIO_CR_MODE_OUTPUT_2MHZ¶
-
GPIO_CR_MODE_OUTPUT_50MHZ¶
Event Control Register¶
-
AFIO_EVCR_EVOE¶
-
AFIO_EVCR_PORT_PA¶
-
AFIO_EVCR_PORT_PB¶
-
AFIO_EVCR_PORT_PC¶
-
AFIO_EVCR_PORT_PD¶
-
AFIO_EVCR_PORT_PE¶
-
AFIO_EVCR_PIN_0¶
-
AFIO_EVCR_PIN_1¶
-
AFIO_EVCR_PIN_2¶
-
AFIO_EVCR_PIN_3¶
-
AFIO_EVCR_PIN_4¶
-
AFIO_EVCR_PIN_5¶
-
AFIO_EVCR_PIN_6¶
-
AFIO_EVCR_PIN_7¶
-
AFIO_EVCR_PIN_8¶
-
AFIO_EVCR_PIN_9¶
-
AFIO_EVCR_PIN_10¶
-
AFIO_EVCR_PIN_11¶
-
AFIO_EVCR_PIN_12¶
-
AFIO_EVCR_PIN_13¶
-
AFIO_EVCR_PIN_14¶
-
AFIO_EVCR_PIN_15¶
AF Remap and Debug I/O Configuration Register¶
-
AFIO_MAPR_SWJ_CFG¶
-
AFIO_MAPR_SWJ_CFG_FULL_SWJ¶
-
AFIO_MAPR_SWJ_CFG_FULL_SWJ_NO_NJRST¶
-
AFIO_MAPR_SWJ_CFG_NO_JTAG_SW¶
-
AFIO_MAPR_SWJ_CFG_NO_JTAG_NO_SW¶
-
AFIO_MAPR_ADC2_ETRGREG_REMAP¶
-
AFIO_MAPR_ADC2_ETRGINJ_REMAP¶
-
AFIO_MAPR_ADC1_ETRGREG_REMAP¶
-
AFIO_MAPR_ADC1_ETRGINJ_REMAP¶
-
AFIO_MAPR_TIM5CH4_IREMAP¶
-
AFIO_MAPR_PD01_REMAP¶
-
AFIO_MAPR_CAN_REMAP¶
-
AFIO_MAPR_CAN_REMAP_NONE¶
-
AFIO_MAPR_CAN_REMAP_PB8_PB9¶
-
AFIO_MAPR_CAN_REMAP_PD0_PD1¶
-
AFIO_MAPR_TIM4_REMAP¶
-
AFIO_MAPR_TIM3_REMAP¶
-
AFIO_MAPR_TIM3_REMAP_NONE¶
-
AFIO_MAPR_TIM3_REMAP_PARTIAL¶
-
AFIO_MAPR_TIM3_REMAP_FULL¶
-
AFIO_MAPR_TIM2_REMAP¶
-
AFIO_MAPR_TIM2_REMAP_NONE¶
-
AFIO_MAPR_TIM2_REMAP_PA15_PB3_PA2_PA3¶
-
AFIO_MAPR_TIM2_REMAP_PA0_PA1_PB10_PB11¶
-
AFIO_MAPR_TIM2_REMAP_FULL¶
-
AFIO_MAPR_TIM1_REMAP¶
-
AFIO_MAPR_TIM1_REMAP_NONE¶
-
AFIO_MAPR_TIM1_REMAP_PARTIAL¶
-
AFIO_MAPR_TIM1_REMAP_FULL¶
-
AFIO_MAPR_USART3_REMAP¶
-
AFIO_MAPR_USART3_REMAP_NONE¶
-
AFIO_MAPR_USART3_REMAP_PARTIAL¶
-
AFIO_MAPR_USART3_REMAP_FULL¶
-
AFIO_MAPR_USART2_REMAP¶
-
AFIO_MAPR_USART1_REMAP¶
-
AFIO_MAPR_I2C1_REMAP¶
-
AFIO_MAPR_SPI1_REMAP¶
External Interrupt Configuration Register 1¶
-
AFIO_EXTICR1_EXTI3¶
-
AFIO_EXTICR1_EXTI3_PA¶
-
AFIO_EXTICR1_EXTI3_PB¶
-
AFIO_EXTICR1_EXTI3_PC¶
-
AFIO_EXTICR1_EXTI3_PD¶
-
AFIO_EXTICR1_EXTI3_PE¶
-
AFIO_EXTICR1_EXTI3_PF¶
-
AFIO_EXTICR1_EXTI3_PG¶
-
AFIO_EXTICR1_EXTI2¶
-
AFIO_EXTICR1_EXTI2_PA¶
-
AFIO_EXTICR1_EXTI2_PB¶
-
AFIO_EXTICR1_EXTI2_PC¶
-
AFIO_EXTICR1_EXTI2_PD¶
-
AFIO_EXTICR1_EXTI2_PE¶
-
AFIO_EXTICR1_EXTI2_PF¶
-
AFIO_EXTICR1_EXTI2_PG¶
-
AFIO_EXTICR1_EXTI1¶
-
AFIO_EXTICR1_EXTI1_PA¶
-
AFIO_EXTICR1_EXTI1_PB¶
-
AFIO_EXTICR1_EXTI1_PC¶
-
AFIO_EXTICR1_EXTI1_PD¶
-
AFIO_EXTICR1_EXTI1_PE¶
-
AFIO_EXTICR1_EXTI1_PF¶
-
AFIO_EXTICR1_EXTI1_PG¶
-
AFIO_EXTICR1_EXTI0¶
-
AFIO_EXTICR1_EXTI0_PA¶
-
AFIO_EXTICR1_EXTI0_PB¶
-
AFIO_EXTICR1_EXTI0_PC¶
-
AFIO_EXTICR1_EXTI0_PD¶
-
AFIO_EXTICR1_EXTI0_PE¶
-
AFIO_EXTICR1_EXTI0_PF¶
-
AFIO_EXTICR1_EXTI0_PG¶
External Interrupt Configuration Register 2¶
-
AFIO_EXTICR2_EXTI7¶
-
AFIO_EXTICR2_EXTI7_PA¶
-
AFIO_EXTICR2_EXTI7_PB¶
-
AFIO_EXTICR2_EXTI7_PC¶
-
AFIO_EXTICR2_EXTI7_PD¶
-
AFIO_EXTICR2_EXTI7_PE¶
-
AFIO_EXTICR2_EXTI7_PF¶
-
AFIO_EXTICR2_EXTI7_PG¶
-
AFIO_EXTICR2_EXTI6¶
-
AFIO_EXTICR2_EXTI6_PA¶
-
AFIO_EXTICR2_EXTI6_PB¶
-
AFIO_EXTICR2_EXTI6_PC¶
-
AFIO_EXTICR2_EXTI6_PD¶
-
AFIO_EXTICR2_EXTI6_PE¶
-
AFIO_EXTICR2_EXTI6_PF¶
-
AFIO_EXTICR2_EXTI6_PG¶
-
AFIO_EXTICR2_EXTI5¶
-
AFIO_EXTICR2_EXTI5_PA¶
-
AFIO_EXTICR2_EXTI5_PB¶
-
AFIO_EXTICR2_EXTI5_PC¶
-
AFIO_EXTICR2_EXTI5_PD¶
-
AFIO_EXTICR2_EXTI5_PE¶
-
AFIO_EXTICR2_EXTI5_PF¶
-
AFIO_EXTICR2_EXTI5_PG¶
-
AFIO_EXTICR2_EXTI4¶
-
AFIO_EXTICR2_EXTI4_PA¶
-
AFIO_EXTICR2_EXTI4_PB¶
-
AFIO_EXTICR2_EXTI4_PC¶
-
AFIO_EXTICR2_EXTI4_PD¶
-
AFIO_EXTICR2_EXTI4_PE¶
-
AFIO_EXTICR2_EXTI4_PF¶
-
AFIO_EXTICR2_EXTI4_PG¶