@@ -288,6 +288,9 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
288288 defined(STM32WBxx ) || defined(STM32MP1xx )
289289 handle -> Init .NSSPMode = SPI_NSS_PULSE_DISABLE ;
290290#endif
291+ #ifdef SPI_MASTER_KEEP_IO_STATE_ENABLE
292+ handle -> Init .MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE ; /* Recommanded setting to avoid glitches */
293+ #endif
291294
292295 /* Configure SPI GPIO pins */
293296 pinmap_pinout (obj -> pin_mosi , PinMap_SPI_MOSI );
@@ -305,36 +308,48 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
305308 // Enable SPI clock
306309 if (handle -> Instance == SPI1 ) {
307310 __HAL_RCC_SPI1_CLK_ENABLE ();
311+ __HAL_RCC_SPI1_FORCE_RESET ();
312+ __HAL_RCC_SPI1_RELEASE_RESET ();
308313 }
309314#endif
310315
311316#if defined SPI2_BASE
312317 if (handle -> Instance == SPI2 ) {
313318 __HAL_RCC_SPI2_CLK_ENABLE ();
319+ __HAL_RCC_SPI2_FORCE_RESET ();
320+ __HAL_RCC_SPI2_RELEASE_RESET ();
314321 }
315322#endif
316323
317324#if defined SPI3_BASE
318325 if (handle -> Instance == SPI3 ) {
319326 __HAL_RCC_SPI3_CLK_ENABLE ();
327+ __HAL_RCC_SPI3_FORCE_RESET ();
328+ __HAL_RCC_SPI3_RELEASE_RESET ();
320329 }
321330#endif
322331
323332#if defined SPI4_BASE
324333 if (handle -> Instance == SPI4 ) {
325334 __HAL_RCC_SPI4_CLK_ENABLE ();
335+ __HAL_RCC_SPI4_FORCE_RESET ();
336+ __HAL_RCC_SPI4_RELEASE_RESET ();
326337 }
327338#endif
328339
329340#if defined SPI5_BASE
330341 if (handle -> Instance == SPI5 ) {
331342 __HAL_RCC_SPI5_CLK_ENABLE ();
343+ __HAL_RCC_SPI5_FORCE_RESET ();
344+ __HAL_RCC_SPI5_RELEASE_RESET ();
332345 }
333346#endif
334347
335348#if defined SPI6_BASE
336349 if (handle -> Instance == SPI6 ) {
337350 __HAL_RCC_SPI6_CLK_ENABLE ();
351+ __HAL_RCC_SPI6_FORCE_RESET ();
352+ __HAL_RCC_SPI6_RELEASE_RESET ();
338353 }
339354#endif
340355
0 commit comments