From 30bbdd5aeb6a78388db533da72ebace10545935e Mon Sep 17 00:00:00 2001 From: jaap aarts Date: Fri, 5 Nov 2021 12:57:53 +0100 Subject: [PATCH] Make the frequency selection more flexible on stm32f103 --- src/machine/machine_stm32f103.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/machine/machine_stm32f103.go b/src/machine/machine_stm32f103.go index 55e57995..0e21c455 100644 --- a/src/machine/machine_stm32f103.go +++ b/src/machine/machine_stm32f103.go @@ -339,24 +339,23 @@ func (spi SPI) getBaudRate(config SPIConfig) uint32 { var conf uint32 // set frequency dependent on PCLK2 prescaler (div 1) - switch config.Frequency { - case 125000: + switch { + case config.Frequency < 125000: // Note: impossible to achieve lower frequency with current PCLK2! conf |= stm32.SPI_CR1_BR_Div256 - case 250000: + case config.Frequency < 250000: conf |= stm32.SPI_CR1_BR_Div256 - case 500000: + case config.Frequency < 500000: conf |= stm32.SPI_CR1_BR_Div128 - case 1000000: + case config.Frequency < 1000000: conf |= stm32.SPI_CR1_BR_Div64 - case 2000000: + case config.Frequency < 2000000: conf |= stm32.SPI_CR1_BR_Div32 - case 4000000: + case config.Frequency < 4000000: conf |= stm32.SPI_CR1_BR_Div16 - case 8000000: - conf |= stm32.SPI_CR1_BR_Div8 default: - conf |= stm32.SPI_CR1_BR_Div256 + // When its bigger than Div16, just round to the maximum frequency. + conf |= stm32.SPI_CR1_BR_Div8 } return conf << stm32.SPI_CR1_BR_Pos }