diff --git a/src/main/drivers/bus_spi.c b/src/main/drivers/bus_spi.c index 732e44941..abec322e8 100644 --- a/src/main/drivers/bus_spi.c +++ b/src/main/drivers/bus_spi.c @@ -242,13 +242,12 @@ bool spiTransfer(SPI_TypeDef *instance, uint8_t *out, const uint8_t *in, int len void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor) { #define BR_CLEAR_MASK 0xFFC7 - uint16_t tempRegister; SPI_Cmd(instance, DISABLE); tempRegister = (instance->CR1 & BR_CLEAR_MASK); - instance->CR1 = (tempRegister | ((ffs(divisor) - 1) << 3)); + instance->CR1 = (tempRegister | ((ffs(divisor | 0x100) - 2) << 3)); SPI_Cmd(instance, ENABLE); } diff --git a/src/main/drivers/bus_spi_hal.c b/src/main/drivers/bus_spi_hal.c index 2b6acbaf7..470da18d4 100644 --- a/src/main/drivers/bus_spi_hal.c +++ b/src/main/drivers/bus_spi_hal.c @@ -265,10 +265,12 @@ void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor) } spiDevice[device].hspi.Init.BaudRatePrescaler = (uint8_t []) { + 0, 0, SPI_BAUDRATEPRESCALER_2, SPI_BAUDRATEPRESCALER_4, SPI_BAUDRATEPRESCALER_8, SPI_BAUDRATEPRESCALER_16, SPI_BAUDRATEPRESCALER_32, SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, SPI_BAUDRATEPRESCALER_256}[ffs(divisor) - 1]; + SPI_BAUDRATEPRESCALER_128, SPI_BAUDRATEPRESCALER_256 + }[ffs(divisor | 0x100)]; if (HAL_SPI_Init(&spiDevice[device].hspi) == HAL_OK) {