PER Firmware
Loading...
Searching...
No Matches
gpio.h File Reference

GPIO Driver for STM32L432 Devices. More...

#include "common/phal_G4/phal_G4.h"

Go to the source code of this file.

Classes

struct  GPIOInitConfig_t
 Configuration entry for GPIO initilization. More...
 

Macros

#define GPIO_INIT_INPUT(gpio_bank, pin_num, input_pull_sel)
 Create GPIO Init struct to intilize a GPIO pin for input.
 
#define GPIO_INIT_OUTPUT(gpio_bank, pin_num, ospeed_sel)
 Create GPIO Init struct to intilize a GPIO pin for output.
 
#define GPIO_INIT_OUTPUT_OPEN_DRAIN(gpio_bank, pin_num, ospeed_sel)
 
#define GPIO_INIT_ANALOG(gpio_bank, pin_num)
 Create GPIO Init struct to intilize a GPIO pin for analog.
 
#define GPIO_INIT_AF(gpio_bank, pin_num, alt_func_num, ospeed_sel, otype_sel, input_pull_sel)
 Create GPIO Init struct to intilize a GPIO pin for alternate function.
 
#define GPIO_INIT_USART3TX_PC10
 
#define GPIO_INIT_USART3RX_PC11
 
#define GPIO_INIT_USART2TX_PA2    GPIO_INIT_AF(GPIOA, 2, 7, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_USART2RX_PA3
 
#define GPIO_INIT_USART1TX_PA9    GPIO_INIT_AF(GPIOA, 9, 7, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_USART1RX_PA10
 
#define GPIO_INIT_USART2TX_PD5    GPIO_INIT_AF(GPIOD, 5, 7, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_USART2RX_PD6
 
#define GPIO_INIT_UART4TX_PC10
 
#define GPIO_INIT_UART4RX_PC11
 
#define GPIO_INIT_LPUART1TX_PC0    GPIO_INIT_AF(GPIOC, 0, 8, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_LPUART1RX_PC1
 
#define GPIO_INIT_SPI1SCK_PA5    GPIO_INIT_AF(GPIOA, 5, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_SPI1MISO_PA6    GPIO_INIT_AF(GPIOA, 6, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_PULL_UP)
 
#define GPIO_INIT_SPI1MOSI_PA7    GPIO_INIT_AF(GPIOA, 7, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_SPI1NSS_PA4    GPIO_INIT_AF(GPIOA, 4, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_SPI1NSS_PA15
 
#define GPIO_INIT_SPI2SCK_RET_PB13
 
#define GPIO_INIT_SPI2MISO_RET_PB14    GPIO_INIT_AF(GPIOB, 14, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_PULL_UP)
 
#define GPIO_INIT_SPI2MOSI_RET_PB15
 
#define GPIO_INIT_SPI2NSS_RET_PB12
 
#define GPIO_INIT_SPI2SCK_CET_PA9    GPIO_INIT_AF(GPIOA, 9, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 
#define GPIO_INIT_SPI2MISO_CET_PA10    GPIO_INIT_AF(GPIOA, 10, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_PULL_UP)
 
#define GPIO_INIT_SPI2MOSI_CET_PA11
 
#define GPIO_INIT_SPI2NSS_CET_PA8    GPIO_INIT_AF(GPIOA, 8, 5, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
 

Enumerations

enum  GPIOPinType_t { GPIO_TYPE_INPUT = 0b00 , GPIO_TYPE_OUTPUT = 0b01 , GPIO_TYPE_AF = 0b10 , GPIO_TYPE_ANALOG = 0b11 }
 Configuration type for GPIO Pin.
 
enum  GPIOOutputSpeed_t { GPIO_OUTPUT_LOW_SPEED = 0b00 , GPIO_OUTPUT_MED_SPEED = 0b01 , GPIO_OUTPUT_HIGH_SPEED = 0b10 , GPIO_OUTPUT_ULTRA_SPEED = 0b11 }
 Slew rate control for output pins.
 
enum  GPIOOutputPull_t { GPIO_OUTPUT_PUSH_PULL = 0b0 , GPIO_OUTPUT_OPEN_DRAIN = 0b1 }
 Output drive mode selection.
 
enum  GPIOInputPull_t { GPIO_INPUT_OPEN_DRAIN = 0b00 , GPIO_INPUT_PULL_UP = 0b01 , GPIO_INPUT_PULL_DOWN = 0b10 }
 Enable internal pullup/down resistors.
 

Functions

bool PHAL_initGPIO (GPIOInitConfig_t config[], uint8_t config_len)
 Initilize the GPIO perpheral given a list of configuration fields for all of the GPIO pins. Will also enable the GPIO RCC clock.
 

Detailed Description

GPIO Driver for STM32L432 Devices.

Author
Adam Busch (busch.nosp@m.8@pu.nosp@m.rdue..nosp@m.edu)
Version
0.1
Date
2021-09-20

Macro Definition Documentation

◆ GPIO_INIT_AF

#define GPIO_INIT_AF ( gpio_bank,
pin_num,
alt_func_num,
ospeed_sel,
otype_sel,
input_pull_sel )
Value:
{ \
.bank = gpio_bank, .pin = pin_num, .type = GPIO_TYPE_AF, .config = { \
.af_num = alt_func_num, \
.ospeed = ospeed_sel, \
.otype = otype_sel, \
.pull = input_pull_sel \
} \
}

Create GPIO Init struct to intilize a GPIO pin for alternate function.

Parameters
gpio_bankGPIO_TypeDef* reference to the GPIO bank for the pin
pin_numPin number from GPIO bank to configure
alt_func_numAlternate function selection
ospeed_selPin output speed selection
otype_selPin output type selection
input_pull_selInput pullup/pulldown/high-z selection

◆ GPIO_INIT_ANALOG

#define GPIO_INIT_ANALOG ( gpio_bank,
pin_num )
Value:
{.bank = gpio_bank, .pin = pin_num, .type = GPIO_TYPE_ANALOG}

Create GPIO Init struct to intilize a GPIO pin for analog.

Parameters
gpio_bankGPIO_TypeDef* reference to the GPIO bank for the pin
pin_numPin number from GPIO bank to configure

◆ GPIO_INIT_INPUT

#define GPIO_INIT_INPUT ( gpio_bank,
pin_num,
input_pull_sel )
Value:
{ \
.bank = gpio_bank, .pin = pin_num, .type = GPIO_TYPE_INPUT, .config = { \
.pull = input_pull_sel \
} \
}

Create GPIO Init struct to intilize a GPIO pin for input.

Parameters
gpio_bankGPIO_TypeDef* reference to the GPIO bank for the pin
pin_numPin number from GPIO bank to configure
input_pull_selInput pullup/pulldown/high-z selection

◆ GPIO_INIT_LPUART1RX_PC1

#define GPIO_INIT_LPUART1RX_PC1
Value:
GPIO_INIT_AF(GPIOC, \
1, \
8, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_OPEN_DRAIN, \
GPIO_INPUT_OPEN_DRAIN)
#define GPIO_INIT_AF(gpio_bank, pin_num, alt_func_num, ospeed_sel, otype_sel, input_pull_sel)
Create GPIO Init struct to intilize a GPIO pin for alternate function.
Definition gpio.h:131

◆ GPIO_INIT_OUTPUT

#define GPIO_INIT_OUTPUT ( gpio_bank,
pin_num,
ospeed_sel )
Value:
{ \
.bank = gpio_bank, .pin = pin_num, .type = GPIO_TYPE_OUTPUT, .config = { \
.ospeed = ospeed_sel, \
.otype = GPIO_OUTPUT_PUSH_PULL \
} \
}

Create GPIO Init struct to intilize a GPIO pin for output.

Parameters
gpio_bankGPIO_TypeDef* reference to the GPIO bank for the pin
pin_numPin number from GPIO bank to configure
ospeed_selPin output speed selection

◆ GPIO_INIT_OUTPUT_OPEN_DRAIN

#define GPIO_INIT_OUTPUT_OPEN_DRAIN ( gpio_bank,
pin_num,
ospeed_sel )
Value:
{ \
.bank = gpio_bank, .pin = pin_num, .type = GPIO_TYPE_OUTPUT, .config = { \
.ospeed = ospeed_sel, \
.otype = GPIO_OUTPUT_OPEN_DRAIN \
} \
}

◆ GPIO_INIT_SPI1NSS_PA15

#define GPIO_INIT_SPI1NSS_PA15
Value:
GPIO_INIT_AF(GPIOA, \
15, \
5, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_SPI2MOSI_CET_PA11

#define GPIO_INIT_SPI2MOSI_CET_PA11
Value:
GPIO_INIT_AF(GPIOA, \
11, \
5, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_SPI2MOSI_RET_PB15

#define GPIO_INIT_SPI2MOSI_RET_PB15
Value:
GPIO_INIT_AF(GPIOB, \
15, \
5, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_SPI2NSS_RET_PB12

#define GPIO_INIT_SPI2NSS_RET_PB12
Value:
GPIO_INIT_AF(GPIOB, \
12, \
5, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_SPI2SCK_RET_PB13

#define GPIO_INIT_SPI2SCK_RET_PB13
Value:
GPIO_INIT_AF(GPIOB, \
13, \
5, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_UART4RX_PC11

#define GPIO_INIT_UART4RX_PC11
Value:
GPIO_INIT_AF(GPIOC, \
11, \
8, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_OPEN_DRAIN, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_UART4TX_PC10

#define GPIO_INIT_UART4TX_PC10
Value:
GPIO_INIT_AF(GPIOC, \
10, \
8, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_USART1RX_PA10

#define GPIO_INIT_USART1RX_PA10
Value:
GPIO_INIT_AF(GPIOA, \
10, \
7, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_OPEN_DRAIN, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_USART2RX_PA3

#define GPIO_INIT_USART2RX_PA3
Value:
GPIO_INIT_AF(GPIOA, \
3, \
7, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_OPEN_DRAIN, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_USART2RX_PD6

#define GPIO_INIT_USART2RX_PD6
Value:
GPIO_INIT_AF(GPIOD, \
6, \
7, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_OPEN_DRAIN, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_USART3RX_PC11

#define GPIO_INIT_USART3RX_PC11
Value:
GPIO_INIT_AF(GPIOC, \
11, \
7, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_OPEN_DRAIN, \
GPIO_INPUT_OPEN_DRAIN)

◆ GPIO_INIT_USART3TX_PC10

#define GPIO_INIT_USART3TX_PC10
Value:
GPIO_INIT_AF(GPIOC, \
10, \
7, \
GPIO_OUTPUT_ULTRA_SPEED, \
GPIO_OUTPUT_PUSH_PULL, \
GPIO_INPUT_OPEN_DRAIN)

Function Documentation

◆ PHAL_initGPIO()

bool PHAL_initGPIO ( GPIOInitConfig_t config[],
uint8_t config_len )

Initilize the GPIO perpheral given a list of configuration fields for all of the GPIO pins. Will also enable the GPIO RCC clock.

Parameters
configA list of GPIOs to config
config_lenNumber of GPIOs in the config list
Returns
true All GPIOs were a valid configuration format
false Some of the GPIOs had an invalid configuration format