stm32/periph/spi : Add check for GPIO_UNDEF

This commit is contained in:
Akshai M 2021-07-07 17:24:35 +02:00
parent ccfd3ee980
commit d3aa6ca00b

View File

@ -130,16 +130,33 @@ void spi_init(spi_t bus)
void spi_init_pins(spi_t bus) void spi_init_pins(spi_t bus)
{ {
#ifdef CPU_FAM_STM32F1 #ifdef CPU_FAM_STM32F1
gpio_init_af(spi_config[bus].sclk_pin, GPIO_AF_OUT_PP);
gpio_init_af(spi_config[bus].mosi_pin, GPIO_AF_OUT_PP); if (gpio_is_valid(spi_config[bus].sclk_pin)) {
gpio_init(spi_config[bus].miso_pin, GPIO_IN); gpio_init_af(spi_config[bus].sclk_pin, GPIO_AF_OUT_PP);
}
if (gpio_is_valid(spi_config[bus].mosi_pin)) {
gpio_init_af(spi_config[bus].mosi_pin, GPIO_AF_OUT_PP);
}
if (gpio_is_valid(spi_config[bus].miso_pin)) {
gpio_init(spi_config[bus].miso_pin, GPIO_IN);
}
#else #else
gpio_init(spi_config[bus].mosi_pin, GPIO_OUT); if (gpio_is_valid(spi_config[bus].mosi_pin)) {
gpio_init(spi_config[bus].miso_pin, GPIO_IN); gpio_init(spi_config[bus].mosi_pin, GPIO_OUT);
gpio_init(spi_config[bus].sclk_pin, GPIO_OUT); gpio_init_af(spi_config[bus].mosi_pin, spi_config[bus].mosi_af);
gpio_init_af(spi_config[bus].mosi_pin, spi_config[bus].mosi_af); }
gpio_init_af(spi_config[bus].miso_pin, spi_config[bus].miso_af);
gpio_init_af(spi_config[bus].sclk_pin, spi_config[bus].sclk_af); if (gpio_is_valid(spi_config[bus].miso_pin)) {
gpio_init(spi_config[bus].miso_pin, GPIO_IN);
gpio_init_af(spi_config[bus].miso_pin, spi_config[bus].miso_af);
}
if (gpio_is_valid(spi_config[bus].sclk_pin)) {
gpio_init(spi_config[bus].sclk_pin, GPIO_OUT);
gpio_init_af(spi_config[bus].sclk_pin, spi_config[bus].sclk_af);
}
#endif #endif
} }
@ -183,12 +200,20 @@ int spi_init_with_gpio_mode(spi_t bus, spi_gpio_mode_t mode)
/* This has no effect on STM32F1 */ /* This has no effect on STM32F1 */
return ret; return ret;
#else #else
ret += gpio_init(spi_config[bus].mosi_pin, mode.mosi); if (gpio_is_valid(spi_config[bus].mosi_pin)) {
ret += gpio_init(spi_config[bus].miso_pin, mode.miso); ret += gpio_init(spi_config[bus].mosi_pin, mode.mosi);
ret += gpio_init(spi_config[bus].sclk_pin, mode.sclk); gpio_init_af(spi_config[bus].mosi_pin, spi_config[bus].mosi_af);
gpio_init_af(spi_config[bus].mosi_pin, spi_config[bus].mosi_af); }
gpio_init_af(spi_config[bus].miso_pin, spi_config[bus].miso_af);
gpio_init_af(spi_config[bus].sclk_pin, spi_config[bus].sclk_af); if (gpio_is_valid(spi_config[bus].miso_pin)) {
ret += gpio_init(spi_config[bus].miso_pin, mode.miso);
gpio_init_af(spi_config[bus].miso_pin, spi_config[bus].miso_af);
}
if (gpio_is_valid(spi_config[bus].sclk_pin)) {
ret += gpio_init(spi_config[bus].sclk_pin, mode.sclk);
gpio_init_af(spi_config[bus].sclk_pin, spi_config[bus].sclk_af);
}
return ret; return ret;
#endif #endif
} }