12 if (gpio->
ctrl == GPIO_NC_CTRL)
16 RCC_AHB1PeriphClockCmd(1 << gpio->
ctrl, ENABLE);
19 uint32_t mode = gpio->
mode;
20 uint32_t type = (mode >> _GPIO_TYPE_SHIFT) & _GPIO_TYPE_MASK;
21 uint32_t out_value = (mode >> _GPIO_OUT_SHIFT) & _GPIO_OUT_MASK;
22 uint32_t drive = (mode >> _GPIO_DRIVE_SHIFT) & _GPIO_DRIVE_MASK;
23 uint32_t speed = (mode >> _GPIO_SPEED_SHIFT) & _GPIO_SPEED_MASK;
24 uint32_t pull = (mode >> _GPIO_PULL_SHIFT) & _GPIO_PULL_MASK;
25 uint32_t af_nr = (mode >> _GPIO_AF_NR_SHIFT) & _GPIO_AF_NR_MASK;
29 GPIOx->
AFR[gpio->
nr >> 0x03] &=~ (0xF << ((gpio->
nr & 0x07) * 4));
30 GPIOx->
AFR[gpio->
nr >> 0x03] |= (af_nr << ((gpio->
nr & 0x07) * 4));
32 GPIOx->
MODER &= ~(GPIO_MODER_MODER0 << (gpio->
nr * 2));
33 GPIOx->
MODER |= type << (gpio->
nr * 2);
35 GPIOx->
OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (gpio->
nr * 2));
36 GPIOx->
OSPEEDR |= speed << (gpio->
nr * 2);
38 GPIOx->
OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)gpio->
nr)) ;
41 GPIOx->
PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)gpio->
nr * 2));
42 GPIOx->
PUPDR |= pull << (gpio->
nr * 2);
52 for (i = 0 ; i < len ; i++)
This file contains all the functions prototypes for the RCC firmware library.
This file contains all the functions prototypes for the GPIO firmware library.
uint8_t nr
Pin number (0 for GPIOx0, ... , 3 for GPIOx3, ...)
uint8_t ctrl
Controller number (0 for GPIOA, 1 for GPIOB, ...)
enum gpio_mode_e mode
mode for instance GPIO_INPUT | GPIO_PULLDOWN
static void gpio_set(const struct gpio_t *gpio, uint32_t value)
Set a gpio.
static GPIO_TypeDef * _internal_gpio_get_ctrl(const struct gpio_t *gpio)
Get the gpio controller given the gpio struct.
status_e gpio_setup_list(const struct gpio_t gpio[], size_t len)
Setup an array of gpio.
status_e gpio_setup(const struct gpio_t *gpio)
Setup a gpio.