From 972b74bcc4c182180833148fbcb992aae9db8c08 Mon Sep 17 00:00:00 2001 From: Christopher Durand Date: Fri, 7 Apr 2023 18:08:50 +0200 Subject: [PATCH] [stm32] Fix SPI setDataMode() --- src/modm/platform/spi/stm32/spi_hal.hpp.in | 6 ++++++ src/modm/platform/spi/stm32/spi_hal_impl.hpp.in | 15 ++++++++++++++- src/modm/platform/spi/stm32/spi_master.hpp.in | 6 ++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/modm/platform/spi/stm32/spi_hal.hpp.in b/src/modm/platform/spi/stm32/spi_hal.hpp.in index cac0022289..f65eb723f6 100644 --- a/src/modm/platform/spi/stm32/spi_hal.hpp.in +++ b/src/modm/platform/spi/stm32/spi_hal.hpp.in @@ -140,6 +140,12 @@ public: */ static void acknowledgeInterruptFlag(InterruptFlag_t flags); + + static void + enableTransfer(); + + static void + disableTransfer(); }; } // namespace platform diff --git a/src/modm/platform/spi/stm32/spi_hal_impl.hpp.in b/src/modm/platform/spi/stm32/spi_hal_impl.hpp.in index c75a7667c7..dbadb970cb 100644 --- a/src/modm/platform/spi/stm32/spi_hal_impl.hpp.in +++ b/src/modm/platform/spi/stm32/spi_hal_impl.hpp.in @@ -21,7 +21,7 @@ void inline modm::platform::SpiHal{{ id }}::enable() { Rcc::enable(); - SPI{{ id }}->CR1 |= SPI_CR1_SPE; // SPI Enable + enableTransfer(); } void inline @@ -186,3 +186,16 @@ modm::platform::SpiHal{{ id }}::acknowledgeInterruptFlag(InterruptFlag_t /*flags // TODO: implement; see STM32F3 reference manual p. 736 // SPI{{ id }}->SR = flags.value; } + +void inline +modm::platform::SpiHal{{ id }}::enableTransfer() +{ + SPI{{ id }}->CR1 |= SPI_CR1_SPE; +} + +void inline +modm::platform::SpiHal{{ id }}::disableTransfer() +{ + SPI{{ id }}->CR1 &= ~SPI_CR1_SPE; + __DSB(); +} diff --git a/src/modm/platform/spi/stm32/spi_master.hpp.in b/src/modm/platform/spi/stm32/spi_master.hpp.in index cca3ea3ed6..91ad1d3905 100644 --- a/src/modm/platform/spi/stm32/spi_master.hpp.in +++ b/src/modm/platform/spi/stm32/spi_master.hpp.in @@ -108,18 +108,24 @@ public: static void setDataMode(DataMode mode) { + SpiHal{{ id }}::disableTransfer(); SpiHal{{ id }}::setDataMode(static_cast(mode)); + SpiHal{{ id }}::enableTransfer(); } static void setDataOrder(DataOrder order) { + SpiHal{{ id }}::disableTransfer(); SpiHal{{ id }}::setDataOrder(static_cast(order)); + SpiHal{{ id }}::enableTransfer(); } static void setDataSize(DataSize size) { + SpiHal{{ id }}::disableTransfer(); SpiHal{{ id }}::setDataSize(static_cast(size)); + SpiHal{{ id }}::enableTransfer(); }