From 8569eac22d5e9819792a9cd51d4bbbb4e0992f03 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 3 Sep 2021 18:33:54 +0200 Subject: [PATCH 1/2] library: spi: ensure peripheral reset Signed-off-by: Frederic Pillon --- libraries/SPI/src/utility/spi_com.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libraries/SPI/src/utility/spi_com.c b/libraries/SPI/src/utility/spi_com.c index c102421a14..fc3c106f96 100644 --- a/libraries/SPI/src/utility/spi_com.c +++ b/libraries/SPI/src/utility/spi_com.c @@ -305,36 +305,48 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb) // Enable SPI clock if (handle->Instance == SPI1) { __HAL_RCC_SPI1_CLK_ENABLE(); + __HAL_RCC_SPI1_FORCE_RESET(); + __HAL_RCC_SPI1_RELEASE_RESET(); } #endif #if defined SPI2_BASE if (handle->Instance == SPI2) { __HAL_RCC_SPI2_CLK_ENABLE(); + __HAL_RCC_SPI2_FORCE_RESET(); + __HAL_RCC_SPI2_RELEASE_RESET(); } #endif #if defined SPI3_BASE if (handle->Instance == SPI3) { __HAL_RCC_SPI3_CLK_ENABLE(); + __HAL_RCC_SPI3_FORCE_RESET(); + __HAL_RCC_SPI3_RELEASE_RESET(); } #endif #if defined SPI4_BASE if (handle->Instance == SPI4) { __HAL_RCC_SPI4_CLK_ENABLE(); + __HAL_RCC_SPI4_FORCE_RESET(); + __HAL_RCC_SPI4_RELEASE_RESET(); } #endif #if defined SPI5_BASE if (handle->Instance == SPI5) { __HAL_RCC_SPI5_CLK_ENABLE(); + __HAL_RCC_SPI5_FORCE_RESET(); + __HAL_RCC_SPI5_RELEASE_RESET(); } #endif #if defined SPI6_BASE if (handle->Instance == SPI6) { __HAL_RCC_SPI6_CLK_ENABLE(); + __HAL_RCC_SPI6_FORCE_RESET(); + __HAL_RCC_SPI6_RELEASE_RESET(); } #endif From 3ae74838ce844715077f97dcfab011890916fa29 Mon Sep 17 00:00:00 2001 From: Frederic Pillon Date: Fri, 3 Sep 2021 18:35:12 +0200 Subject: [PATCH 2/2] library: spi: set MasterKeepIOState to avoid glitches Recommanded setting. Signed-off-by: Frederic Pillon --- libraries/SPI/src/utility/spi_com.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/SPI/src/utility/spi_com.c b/libraries/SPI/src/utility/spi_com.c index fc3c106f96..93b3a7cc0d 100644 --- a/libraries/SPI/src/utility/spi_com.c +++ b/libraries/SPI/src/utility/spi_com.c @@ -288,6 +288,9 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb) defined(STM32WBxx) || defined(STM32MP1xx) handle->Init.NSSPMode = SPI_NSS_PULSE_DISABLE; #endif +#ifdef SPI_MASTER_KEEP_IO_STATE_ENABLE + handle->Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE; /* Recommanded setting to avoid glitches */ +#endif /* Configure SPI GPIO pins */ pinmap_pinout(obj->pin_mosi, PinMap_SPI_MOSI);