1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-19 22:35:23 +03:00

Merge pull request #3936 from jflyper/bfdev-fix-overclocked-spi2-and-spi3

Fix overclocked SPI2 and SPI3 (F1 & F3) back to normal.
This commit is contained in:
Martin Budden 2017-08-23 15:12:52 +01:00 committed by GitHub
commit 35191af16c
2 changed files with 8 additions and 4 deletions

View file

@ -263,16 +263,18 @@ void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor)
{
#define BR_BITS ((BIT(5) | BIT(4) | BIT(3)))
// SPI2 and SPI3 are always on APB1/AHB1 which PCLK is half that of APB2/AHB2.
#if !(defined(STM32F1) || defined(STM32F3))
// SPI2 and SPI3 are on APB1/AHB1 which PCLK is half that of APB2/AHB2.
if (instance == SPI2 || instance == SPI3) {
divisor /= 2; // Safe for divisor == 0 or 1
}
#endif
SPI_Cmd(instance, DISABLE);
const uint16_t tempRegister = (instance->CR1 & ~BR_BITS);
instance->CR1 = (tempRegister | ((ffs(divisor | 0x100) - 2) << 3));
instance->CR1 = tempRegister | (divisor ? ((ffs(divisor | 0x100) - 2) << 3) : 0);
SPI_Cmd(instance, ENABLE);

View file

@ -302,14 +302,16 @@ bool spiBusTransfer(const busDevice_t *bus, const uint8_t *txData, uint8_t *rxDa
void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor)
{
// SPI2 and SPI3 are always on APB1/AHB1 which PCLK is half that of APB2/AHB2.
#if !(defined(STM32F1) || defined(STM32F3))
// SPI2 and SPI3 are on APB1/AHB1 which PCLK is half that of APB2/AHB2.
if (instance == SPI2 || instance == SPI3) {
divisor /= 2; // Safe for divisor == 0 or 1
}
#endif
LL_SPI_Disable(instance);
LL_SPI_SetBaudRatePrescaler(instance, (ffs(divisor | 0x100) - 2) << SPI_CR1_BR_Pos);
LL_SPI_SetBaudRatePrescaler(instance, divisor ? (ffs(divisor | 0x100) - 2) << SPI_CR1_BR_Pos : 0);
LL_SPI_Enable(instance);
}