From 858699cfd64909e622a5ea0f41438d5bd067add1 Mon Sep 17 00:00:00 2001 From: Lino Barreca <linobarreca@hotmail.com> Date: Tue, 26 Nov 2019 09:20:20 +0100 Subject: [PATCH 1/2] Fix prescaler at low baudrates --- cores/arduino/stm32/spi_com.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cores/arduino/stm32/spi_com.c b/cores/arduino/stm32/spi_com.c index c8bf25dcf9..544bbcd40c 100644 --- a/cores/arduino/stm32/spi_com.c +++ b/cores/arduino/stm32/spi_com.c @@ -215,8 +215,8 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb) handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; } else if (speed >= (spi_freq / SPI_SPEED_CLOCK_DIV256_MHZ)) { handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; - } else { - handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; + } else { //speed is lower than (spi_freq / SPI_SPEED_CLOCK_DIV256_MHZ). we can't go below this. + handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // Set prescaler at max value so we have the lowest frequency possible } handle->Init.Direction = SPI_DIRECTION_2LINES; From cca16e32c2bf57743ccfdaa96b7dae3f2fe9fe30 Mon Sep 17 00:00:00 2001 From: Lino Barreca <linobarreca@hotmail.com> Date: Tue, 26 Nov 2019 18:27:07 +0100 Subject: [PATCH 2/2] Modified comment and removed double check (as requested) --- cores/arduino/stm32/spi_com.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cores/arduino/stm32/spi_com.c b/cores/arduino/stm32/spi_com.c index 544bbcd40c..62f6696a00 100644 --- a/cores/arduino/stm32/spi_com.c +++ b/cores/arduino/stm32/spi_com.c @@ -213,10 +213,12 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb) handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; } else if (speed >= (spi_freq / SPI_SPEED_CLOCK_DIV128_MHZ)) { handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; - } else if (speed >= (spi_freq / SPI_SPEED_CLOCK_DIV256_MHZ)) { + } else { + /* + * As it is not possible to go below (spi_freq / SPI_SPEED_CLOCK_DIV256_MHZ). + * Set prescaler at max value so get the lowest frequency possible. + */ handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; - } else { //speed is lower than (spi_freq / SPI_SPEED_CLOCK_DIV256_MHZ). we can't go below this. - handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; // Set prescaler at max value so we have the lowest frequency possible } handle->Init.Direction = SPI_DIRECTION_2LINES;