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;