STM32GENERIC/STM32/cores/arduino/stm32/stm32_gpio.c

64 lines
1.3 KiB
C
Raw Normal View History

2017-04-10 09:24:58 -07:00
#include "stm32_gpio.h"
2017-04-09 21:55:07 -07:00
#include "variant.h"
void stm32_gpio_clock(GPIO_TypeDef *port) {
#ifdef GPIOA
if (port == GPIOA) __HAL_RCC_GPIOA_CLK_ENABLE();
#endif
#ifdef GPIOB
if (port == GPIOB) __HAL_RCC_GPIOB_CLK_ENABLE();
#endif
#ifdef GPIOC
if (port == GPIOC) __HAL_RCC_GPIOC_CLK_ENABLE();
#endif
#ifdef GPIOD
if (port == GPIOD) __HAL_RCC_GPIOD_CLK_ENABLE();
#endif
#ifdef GPIOE
if (port == GPIOE) __HAL_RCC_GPIOE_CLK_ENABLE();
#endif
}
void pinMode(uint8_t pin, uint8_t mode) {
stm32_port_pin_type port_pin = port_pin_list[pin];
stm32_gpio_clock(port_pin.port);
GPIO_InitTypeDef init;
init.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
init.Pin = port_pin.pin_mask;
switch ( mode ) {
case INPUT:
init.Mode = GPIO_MODE_INPUT;
init.Pull = GPIO_NOPULL;
break;
case INPUT_PULLUP:
init.Mode = GPIO_MODE_INPUT;
init.Pull = GPIO_PULLUP;
break;
case INPUT_PULLDOWN:
init.Mode = GPIO_MODE_INPUT;
init.Pull = GPIO_PULLDOWN;
break;
case OUTPUT:
init.Mode = GPIO_MODE_OUTPUT_PP;
init.Pull = GPIO_NOPULL;
break;
default:
return;
break;
}
HAL_GPIO_Init(port_pin.port, &init);
}