@@ -288,6 +288,9 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb)
288
288
defined(STM32WBxx ) || defined(STM32MP1xx )
289
289
handle -> Init .NSSPMode = SPI_NSS_PULSE_DISABLE ;
290
290
#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
291
294
292
295
/* Configure SPI GPIO pins */
293
296
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)
305
308
// Enable SPI clock
306
309
if (handle -> Instance == SPI1 ) {
307
310
__HAL_RCC_SPI1_CLK_ENABLE ();
311
+ __HAL_RCC_SPI1_FORCE_RESET ();
312
+ __HAL_RCC_SPI1_RELEASE_RESET ();
308
313
}
309
314
#endif
310
315
311
316
#if defined SPI2_BASE
312
317
if (handle -> Instance == SPI2 ) {
313
318
__HAL_RCC_SPI2_CLK_ENABLE ();
319
+ __HAL_RCC_SPI2_FORCE_RESET ();
320
+ __HAL_RCC_SPI2_RELEASE_RESET ();
314
321
}
315
322
#endif
316
323
317
324
#if defined SPI3_BASE
318
325
if (handle -> Instance == SPI3 ) {
319
326
__HAL_RCC_SPI3_CLK_ENABLE ();
327
+ __HAL_RCC_SPI3_FORCE_RESET ();
328
+ __HAL_RCC_SPI3_RELEASE_RESET ();
320
329
}
321
330
#endif
322
331
323
332
#if defined SPI4_BASE
324
333
if (handle -> Instance == SPI4 ) {
325
334
__HAL_RCC_SPI4_CLK_ENABLE ();
335
+ __HAL_RCC_SPI4_FORCE_RESET ();
336
+ __HAL_RCC_SPI4_RELEASE_RESET ();
326
337
}
327
338
#endif
328
339
329
340
#if defined SPI5_BASE
330
341
if (handle -> Instance == SPI5 ) {
331
342
__HAL_RCC_SPI5_CLK_ENABLE ();
343
+ __HAL_RCC_SPI5_FORCE_RESET ();
344
+ __HAL_RCC_SPI5_RELEASE_RESET ();
332
345
}
333
346
#endif
334
347
335
348
#if defined SPI6_BASE
336
349
if (handle -> Instance == SPI6 ) {
337
350
__HAL_RCC_SPI6_CLK_ENABLE ();
351
+ __HAL_RCC_SPI6_FORCE_RESET ();
352
+ __HAL_RCC_SPI6_RELEASE_RESET ();
338
353
}
339
354
#endif
340
355
0 commit comments