I can see that there's a HAL_DeInit function available, does that effectively "reset" all peripherals? If I have code that sets up some peripherals, runs for a few minutes then wants to setup those peripherals in a completely different manner, should the app call HAL_DeInit and HAL_Init again? followed by the various individual peripheral configuration?