2025-09-26 12:45 PM - last edited on 2025-09-29 1:56 AM by Andrew Neil
For background see: https://community.st.com/t5/stm32cubemx-mcus/stm32cubemx-6-2-1-for-nucleo-h745zi-q-doesn-t-generate/m-p/226159/highlight/true#M10675
In many embedded systems most peripherals are off most of the time, for power saving, and they are enabled only when needed. When CubeMX moves peripheral clock configuration from the MSP file of the HAL peripheral to PeriphCommonClock_Config() it makes this behavior harder to achieve. Is there an option to tell CubeMX to leave clock configuration in the HAL MSPs rather than creating the shared function ?
Solved! Go to Solution.
2025-09-29 1:06 AM
Hello @sdtbb
CubeMX does not provide an option to keep peripheral clock configuration within the HAL MSP files when peripherals share a common clock source.
You can use user code sections in the MSP files to enable or disable individual peripheral clocks at runtime, while leaving the shared clock source configured at startup. This method is CubeMX-safe and allows for some level of dynamic control, though the shared clock source will remain active.
THX
Ghofrane
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2025-09-29 1:06 AM
Hello @sdtbb
CubeMX does not provide an option to keep peripheral clock configuration within the HAL MSP files when peripherals share a common clock source.
You can use user code sections in the MSP files to enable or disable individual peripheral clocks at runtime, while leaving the shared clock source configured at startup. This method is CubeMX-safe and allows for some level of dynamic control, though the shared clock source will remain active.
THX
Ghofrane
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2025-09-29 3:45 AM - edited 2025-09-29 3:48 AM
STM32CubeMX only allows limited customization.
You can:
Here is an example of how to use a macro to edit the definition of PeriphCommonClock_Config().
Original code:
#include <stdio.h>
/* USER CODE BEGIN PV */
/* USER CODE END PV */
void PeriphCommonClock_Config(void);
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main()
{
/* USER CODE BEGIN Init */
/* USER CODE END Init */
//can't change this code:
PeriphCommonClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
return 0;
}
//can't change this code:
void PeriphCommonClock_Config()
{
printf ("PeriphCommonClock_Config original\n");
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
Modified code:
#include <stdio.h>
/* USER CODE BEGIN PV */
/* USER CODE END PV */
void PeriphCommonClock_Config(void);
/* USER CODE BEGIN 0 */
void PeriphCommonClock_Config_modified(void);
#define PeriphCommonClock_Config() PeriphCommonClock_Config_modified()
/* USER CODE END 0 */
int main()
{
/* USER CODE BEGIN Init */
/* USER CODE END Init */
//can't change this code:
PeriphCommonClock_Config();
/* USER CODE BEGIN SysInit */
#undef PeriphCommonClock_Config
#define PeriphCommonClock_Config() PeriphCommonClock_Config_original()
/* USER CODE END SysInit */
return 0;
}
//can't change this code:
void PeriphCommonClock_Config()
{
printf ("PeriphCommonClock_Config original\n");
}
/* USER CODE BEGIN 4 */
void PeriphCommonClock_Config_modified()
{
printf ("PeriphCommonClock_Config modified\n");
}
/* USER CODE END 4 */
Of course you need to manually merge any changes to PeriphCommonClock_Config() in your own implementation. But at least regenerating code with STM32CubeMX won't delete your changes.
2025-10-06 5:55 AM
Thanks for taking the time to reply.