Skip to content

Commit 203bdc7

Browse files
committed
[STM32MP157_DK] System clock and HAL configuration
1 parent 63fc867 commit 203bdc7

File tree

3 files changed

+142
-8
lines changed

3 files changed

+142
-8
lines changed

system/STM32MP1xx/stm32mp1xx_hal_conf_default.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
*
2020
*
2121
******************************************************************************
22-
*/
22+
*/
2323

2424
/* Define to prevent recursive inclusion -------------------------------------*/
2525
#ifndef __STM32MP1xx_HAL_CONF_DEFAULT_H
@@ -37,6 +37,18 @@
3737
* @brief Include the default list of modules to be used in the HAL driver
3838
* and manage module deactivation
3939
*/
40+
41+
#define HAL_RTC_MODULE_DISABLED /* RTC MODULE on Cortex-M side is not supported.
42+
Linux on Cortex-A will handle this. */
43+
#define HAL_ETH_MODULE_DISABLED /* ETH module is also not intended to be used */
44+
#define HAL_MDMA_MODULE_ENABLED /* Some other modules (e.g. USART) require this */
45+
46+
#if defined(ARDUINO_STM32MP157A_DK1) || defined(ARDUINO_STM32MP157A_DK2)
47+
// Cannot use them in this board, or define them in the kernel device tree.
48+
#define HAL_QSPI_MODULE_DISABLED
49+
#define HAL_FDCAN_MODULE_DISABLED
50+
#endif // defined(ARDUINO_STM32MP157A_DK1) && defined(ARDUINO_STM32MP157A_DK2)
51+
4052
#include "stm32yyxx_hal_conf.h"
4153
#if 0
4254
/**

system/STM32MP1xx/system_stm32mp1xx.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
#define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/
5959
#endif /* HSI_VALUE */
6060

61+
#if !defined (CSI_VALUE)
62+
#define CSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/
63+
#endif /* CSI_VALUE */
64+
6165
/**
6266
* @}
6367
*/

variants/STM32MP157_DK/variant.cpp

Lines changed: 125 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,132 @@ extern "C" {
128128
* @param None
129129
* @retval None
130130
*/
131-
WEAK void SystemClock_Config(void)
131+
void SystemClock_Config(void)
132132
{
133-
// Here copy the desired System Clock Configuration
134-
// It could be generated thanks STM32CubeMX after code generation for Toolchain/IDE: 'SW4STM32',
135-
// available in src/main.c
136-
// or
137-
// copied from a STM32CubeYY project examples
138-
// where 'YY' could be F0, F1, F2, F3, F4, F7, G0, H7, L0, L1, L4, WB
133+
/**
134+
* NOTE: Because of the limitation of STM32MP1xx, unlike other MCUs this is
135+
* NOT a WEAK function, preventing being overriden.
136+
* In STM32MP1 series, SystemClock_Config()) is "done" by running the FSBL
137+
* (First Stage Boot Loader) on Cortex-A. This function call shall NOT be
138+
* executed in production mode. SystemClock_Config() shall be under
139+
* if(IS_ENGINEERING_BOOT_MODE()).
140+
*
141+
* NOTE:
142+
* * Production mode: Both CA7 and CM4 core running, BOOT0 and BOOT2 are ON.
143+
* * Engineering mode: Only CM4 running, BOOT0 = OFF, BOOT2 = ON.
144+
* See:
145+
* https://wiki.st.com/stm32mpu/wiki/STM32CubeMP1_development_guidelines
146+
*/
147+
if(!IS_ENGINEERING_BOOT_MODE()) {
148+
return;
149+
}
150+
151+
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
152+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
153+
154+
/**Configure LSE Drive Capability
155+
*/
156+
HAL_PWR_EnableBkUpAccess();
157+
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_MEDIUMHIGH);
158+
159+
/**Initializes the CPU, AHB and APB busses clocks
160+
*/
161+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE
162+
| RCC_OSCILLATORTYPE_LSE;
163+
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
164+
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
165+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
166+
RCC_OscInitStruct.HSICalibrationValue = 16;
167+
RCC_OscInitStruct.HSIDivValue = RCC_HSI_DIV1;
168+
169+
/**PLL1 Config
170+
*/
171+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
172+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLL12SOURCE_HSE;
173+
RCC_OscInitStruct.PLL.PLLM = 3;
174+
RCC_OscInitStruct.PLL.PLLN = 81;
175+
RCC_OscInitStruct.PLL.PLLP = 1;
176+
RCC_OscInitStruct.PLL.PLLQ = 1;
177+
RCC_OscInitStruct.PLL.PLLR = 1;
178+
RCC_OscInitStruct.PLL.PLLFRACV = 0x800;
179+
RCC_OscInitStruct.PLL.PLLMODE = RCC_PLL_FRACTIONAL;
180+
RCC_OscInitStruct.PLL.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
181+
RCC_OscInitStruct.PLL.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
182+
183+
/**PLL2 Config
184+
*/
185+
RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_ON;
186+
RCC_OscInitStruct.PLL2.PLLSource = RCC_PLL12SOURCE_HSE;
187+
RCC_OscInitStruct.PLL2.PLLM = 3;
188+
RCC_OscInitStruct.PLL2.PLLN = 66;
189+
RCC_OscInitStruct.PLL2.PLLP = 2;
190+
RCC_OscInitStruct.PLL2.PLLQ = 1;
191+
RCC_OscInitStruct.PLL2.PLLR = 1;
192+
RCC_OscInitStruct.PLL2.PLLFRACV = 0x1400;
193+
RCC_OscInitStruct.PLL2.PLLMODE = RCC_PLL_FRACTIONAL;
194+
RCC_OscInitStruct.PLL2.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
195+
RCC_OscInitStruct.PLL2.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
196+
197+
/**PLL3 Config
198+
*/
199+
RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_ON;
200+
RCC_OscInitStruct.PLL3.PLLSource = RCC_PLL3SOURCE_HSE;
201+
RCC_OscInitStruct.PLL3.PLLM = 2;
202+
RCC_OscInitStruct.PLL3.PLLN = 34;
203+
RCC_OscInitStruct.PLL3.PLLP = 2;
204+
RCC_OscInitStruct.PLL3.PLLQ = 17;
205+
RCC_OscInitStruct.PLL3.PLLR = 37;
206+
RCC_OscInitStruct.PLL3.PLLRGE = RCC_PLL3IFRANGE_1;
207+
RCC_OscInitStruct.PLL3.PLLFRACV = 0x1A04;
208+
RCC_OscInitStruct.PLL3.PLLMODE = RCC_PLL_FRACTIONAL;
209+
RCC_OscInitStruct.PLL3.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
210+
RCC_OscInitStruct.PLL3.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
211+
212+
/**PLL4 Config
213+
*/
214+
RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_ON;
215+
RCC_OscInitStruct.PLL4.PLLSource = RCC_PLL4SOURCE_HSE;
216+
RCC_OscInitStruct.PLL4.PLLM = 4;
217+
RCC_OscInitStruct.PLL4.PLLN = 99;
218+
RCC_OscInitStruct.PLL4.PLLP = 6;
219+
RCC_OscInitStruct.PLL4.PLLQ = 8;
220+
RCC_OscInitStruct.PLL4.PLLR = 8;
221+
RCC_OscInitStruct.PLL4.PLLRGE = RCC_PLL4IFRANGE_0;
222+
RCC_OscInitStruct.PLL4.PLLFRACV = 0;
223+
RCC_OscInitStruct.PLL4.PLLMODE = RCC_PLL_INTEGER;
224+
RCC_OscInitStruct.PLL4.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
225+
RCC_OscInitStruct.PLL4.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
226+
227+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
228+
/* Initialization Error */
229+
while (1);
230+
}
231+
/**RCC Clock Config
232+
*/
233+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_ACLK
234+
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
235+
| RCC_CLOCKTYPE_PCLK3 | RCC_CLOCKTYPE_PCLK4
236+
| RCC_CLOCKTYPE_PCLK5 | RCC_CLOCKTYPE_MPU;
237+
RCC_ClkInitStruct.MPUInit.MPU_Clock = RCC_MPUSOURCE_PLL1;
238+
RCC_ClkInitStruct.MPUInit.MPU_Div = RCC_MPU_DIV2;
239+
RCC_ClkInitStruct.AXISSInit.AXI_Clock = RCC_AXISSOURCE_PLL2;
240+
RCC_ClkInitStruct.AXISSInit.AXI_Div = RCC_AXI_DIV1;
241+
RCC_ClkInitStruct.MCUInit.MCU_Clock = RCC_MCUSSOURCE_PLL3;
242+
RCC_ClkInitStruct.MCUInit.MCU_Div = RCC_MCU_DIV1;
243+
RCC_ClkInitStruct.APB4_Div = RCC_APB4_DIV2;
244+
RCC_ClkInitStruct.APB5_Div = RCC_APB5_DIV4;
245+
RCC_ClkInitStruct.APB1_Div = RCC_APB1_DIV2;
246+
RCC_ClkInitStruct.APB2_Div = RCC_APB2_DIV2;
247+
RCC_ClkInitStruct.APB3_Div = RCC_APB3_DIV2;
248+
249+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK) {
250+
/* Initialization Error */
251+
while (1);
252+
}
253+
254+
/**Set the HSE division factor for RTC clock
255+
*/
256+
__HAL_RCC_RTC_HSEDIV(24);
139257
}
140258

141259
#ifdef __cplusplus

0 commit comments

Comments
 (0)