.. highlight:: c
.. _libmaple-gpio:

``gpio.h``
==========

General Purpose Input/Output (GPIO) port and Alternate Function
Input/Output (AFIO) support.

.. contents:: Contents
   :local:

Types
-----

.. doxygenstruct:: gpio_reg_map
.. doxygenstruct:: gpio_dev
.. doxygenenum:: gpio_pin_mode

.. doxygenstruct:: afio_reg_map
.. doxygenenum:: afio_exti_port
.. doxygenenum:: afio_exti_num
.. doxygenenum:: afio_remap_peripheral
.. doxygenenum:: afio_debug_cfg

Devices
-------

.. doxygenvariable:: GPIOA
.. doxygenvariable:: GPIOB
.. doxygenvariable:: GPIOC
.. doxygenvariable:: GPIOD
.. doxygenvariable:: GPIOE
.. doxygenvariable:: GPIOF
.. doxygenvariable:: GPIOG

Functions
---------

.. doxygenfunction:: gpio_init
.. doxygenfunction:: gpio_init_all
.. doxygenfunction:: gpio_set_mode
.. doxygenfunction:: gpio_exti_port
.. doxygenfunction:: gpio_write_bit
.. doxygenfunction:: gpio_read_bit
.. doxygenfunction:: gpio_toggle_bit

.. doxygenfunction:: afio_init
.. doxygenfunction:: afio_exti_select

.. _gpio-h-afio-remap:
.. doxygenfunction:: afio_remap
.. doxygenfunction:: afio_cfg_debug_ports

Register Map Base Pointers
--------------------------

.. doxygendefine:: GPIOA_BASE
.. doxygendefine:: GPIOB_BASE
.. doxygendefine:: GPIOC_BASE
.. doxygendefine:: GPIOD_BASE
.. doxygendefine:: GPIOE_BASE
.. doxygendefine:: GPIOF_BASE
.. doxygendefine:: GPIOG_BASE

.. doxygendefine:: AFIO_BASE

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)``.

.. doxygendefine:: GPIO_CR_CNF_INPUT_ANALOG
.. doxygendefine:: GPIO_CR_CNF_INPUT_FLOATING
.. doxygendefine:: GPIO_CR_CNF_INPUT_PU_PD
.. doxygendefine:: GPIO_CR_CNF_OUTPUT_PP
.. doxygendefine:: GPIO_CR_CNF_OUTPUT_OD
.. doxygendefine:: GPIO_CR_CNF_AF_OUTPUT_PP
.. doxygendefine:: GPIO_CR_CNF_AF_OUTPUT_OD
.. doxygendefine:: GPIO_CR_MODE_INPUT
.. doxygendefine:: GPIO_CR_MODE_OUTPUT_10MHZ
.. doxygendefine:: GPIO_CR_MODE_OUTPUT_2MHZ
.. doxygendefine:: GPIO_CR_MODE_OUTPUT_50MHZ

Event Control Register
~~~~~~~~~~~~~~~~~~~~~~

.. doxygendefine:: AFIO_EVCR_EVOE
.. doxygendefine:: AFIO_EVCR_PORT_PA
.. doxygendefine:: AFIO_EVCR_PORT_PB
.. doxygendefine:: AFIO_EVCR_PORT_PC
.. doxygendefine:: AFIO_EVCR_PORT_PD
.. doxygendefine:: AFIO_EVCR_PORT_PE
.. doxygendefine:: AFIO_EVCR_PIN_0
.. doxygendefine:: AFIO_EVCR_PIN_1
.. doxygendefine:: AFIO_EVCR_PIN_2
.. doxygendefine:: AFIO_EVCR_PIN_3
.. doxygendefine:: AFIO_EVCR_PIN_4
.. doxygendefine:: AFIO_EVCR_PIN_5
.. doxygendefine:: AFIO_EVCR_PIN_6
.. doxygendefine:: AFIO_EVCR_PIN_7
.. doxygendefine:: AFIO_EVCR_PIN_8
.. doxygendefine:: AFIO_EVCR_PIN_9
.. doxygendefine:: AFIO_EVCR_PIN_10
.. doxygendefine:: AFIO_EVCR_PIN_11
.. doxygendefine:: AFIO_EVCR_PIN_12
.. doxygendefine:: AFIO_EVCR_PIN_13
.. doxygendefine:: AFIO_EVCR_PIN_14
.. doxygendefine:: AFIO_EVCR_PIN_15

AF Remap and Debug I/O Configuration Register
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. doxygendefine:: AFIO_MAPR_SWJ_CFG
.. doxygendefine:: AFIO_MAPR_SWJ_CFG_FULL_SWJ
.. doxygendefine:: AFIO_MAPR_SWJ_CFG_FULL_SWJ_NO_NJRST
.. doxygendefine:: AFIO_MAPR_SWJ_CFG_NO_JTAG_SW
.. doxygendefine:: AFIO_MAPR_SWJ_CFG_NO_JTAG_NO_SW
.. doxygendefine:: AFIO_MAPR_ADC2_ETRGREG_REMAP
.. doxygendefine:: AFIO_MAPR_ADC2_ETRGINJ_REMAP
.. doxygendefine:: AFIO_MAPR_ADC1_ETRGREG_REMAP
.. doxygendefine:: AFIO_MAPR_ADC1_ETRGINJ_REMAP
.. doxygendefine:: AFIO_MAPR_TIM5CH4_IREMAP
.. doxygendefine:: AFIO_MAPR_PD01_REMAP
.. doxygendefine:: AFIO_MAPR_CAN_REMAP
.. doxygendefine:: AFIO_MAPR_CAN_REMAP_NONE
.. doxygendefine:: AFIO_MAPR_CAN_REMAP_PB8_PB9
.. doxygendefine:: AFIO_MAPR_CAN_REMAP_PD0_PD1
.. doxygendefine:: AFIO_MAPR_TIM4_REMAP
.. doxygendefine:: AFIO_MAPR_TIM3_REMAP
.. doxygendefine:: AFIO_MAPR_TIM3_REMAP_NONE
.. doxygendefine:: AFIO_MAPR_TIM3_REMAP_PARTIAL
.. doxygendefine:: AFIO_MAPR_TIM3_REMAP_FULL
.. doxygendefine:: AFIO_MAPR_TIM2_REMAP
.. doxygendefine:: AFIO_MAPR_TIM2_REMAP_NONE
.. doxygendefine:: AFIO_MAPR_TIM2_REMAP_PA15_PB3_PA2_PA3
.. doxygendefine:: AFIO_MAPR_TIM2_REMAP_PA0_PA1_PB10_PB11
.. doxygendefine:: AFIO_MAPR_TIM2_REMAP_FULL
.. doxygendefine:: AFIO_MAPR_TIM1_REMAP
.. doxygendefine:: AFIO_MAPR_TIM1_REMAP_NONE
.. doxygendefine:: AFIO_MAPR_TIM1_REMAP_PARTIAL
.. doxygendefine:: AFIO_MAPR_TIM1_REMAP_FULL
.. doxygendefine:: AFIO_MAPR_USART3_REMAP
.. doxygendefine:: AFIO_MAPR_USART3_REMAP_NONE
.. doxygendefine:: AFIO_MAPR_USART3_REMAP_PARTIAL
.. doxygendefine:: AFIO_MAPR_USART3_REMAP_FULL
.. doxygendefine:: AFIO_MAPR_USART2_REMAP
.. doxygendefine:: AFIO_MAPR_USART1_REMAP
.. doxygendefine:: AFIO_MAPR_I2C1_REMAP
.. doxygendefine:: AFIO_MAPR_SPI1_REMAP

External Interrupt Configuration Register 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. doxygendefine:: AFIO_EXTICR1_EXTI3
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PA
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PB
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PC
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PD
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PE
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PF
.. doxygendefine:: AFIO_EXTICR1_EXTI3_PG
.. doxygendefine:: AFIO_EXTICR1_EXTI2
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PA
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PB
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PC
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PD
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PE
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PF
.. doxygendefine:: AFIO_EXTICR1_EXTI2_PG
.. doxygendefine:: AFIO_EXTICR1_EXTI1
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PA
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PB
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PC
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PD
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PE
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PF
.. doxygendefine:: AFIO_EXTICR1_EXTI1_PG
.. doxygendefine:: AFIO_EXTICR1_EXTI0
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PA
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PB
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PC
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PD
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PE
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PF
.. doxygendefine:: AFIO_EXTICR1_EXTI0_PG

External Interrupt Configuration Register 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. doxygendefine:: AFIO_EXTICR2_EXTI7
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PA
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PB
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PC
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PD
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PE
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PF
.. doxygendefine:: AFIO_EXTICR2_EXTI7_PG
.. doxygendefine:: AFIO_EXTICR2_EXTI6
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PA
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PB
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PC
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PD
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PE
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PF
.. doxygendefine:: AFIO_EXTICR2_EXTI6_PG
.. doxygendefine:: AFIO_EXTICR2_EXTI5
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PA
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PB
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PC
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PD
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PE
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PF
.. doxygendefine:: AFIO_EXTICR2_EXTI5_PG
.. doxygendefine:: AFIO_EXTICR2_EXTI4
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PA
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PB
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PC
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PD
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PE
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PF
.. doxygendefine:: AFIO_EXTICR2_EXTI4_PG

AF Remap and Debug I/O Configuration Register 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. doxygendefine:: AFIO_MAPR2_FSMC_NADV
.. doxygendefine:: AFIO_MAPR2_TIM14_REMAP
.. doxygendefine:: AFIO_MAPR2_TIM13_REMAP
.. doxygendefine:: AFIO_MAPR2_TIM11_REMAP
.. doxygendefine:: AFIO_MAPR2_TIM10_REMAP
.. doxygendefine:: AFIO_MAPR2_TIM9_REMAP