Skip to content

Commit 75b5394

Browse files
committed
variant(u5): add Nucleo-U5A5ZJ-Q
Signed-off-by: patricklaf <[email protected]> Co-authored-by: Frederic Pillon <[email protected]>
1 parent da44840 commit 75b5394

File tree

7 files changed

+1284
-27
lines changed

7 files changed

+1284
-27
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
121121
| :green_heart: | STM32L4R5ZI-P | [Nucleo L4R5ZI-P](http://www.st.com/en/evaluation-tools/nucleo-l4r5zi-p.html) | *1.4.0* | |
122122
| :green_heart: | STM32L552ZE-Q | [Nucleo L552ZE-Q](https://www.st.com/en/evaluation-tools/nucleo-l552ze-q.html) | *2.0.0* | |
123123
| :green_heart: | STM32U575ZI-Q | [NUCLEO-U575ZI-Q](https://www.st.com/en/evaluation-tools/nucleo-u575zi-q.html) | *2.1.0* | |
124+
| :yellow_heart: | STM32U5A5ZJ-Q | [NUCLEO-U5A5ZJ-Q](https://www.st.com/en/evaluation-tools/nucleo-u5a5zj-q.html) | **2.11.0** | |
124125

125126
### [Nucleo 64](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-nucleo-boards.html) boards
126127

boards.txt

+16
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,22 @@ Nucleo_144.menu.pnum.NUCLEO_U575ZI_Q.build.peripheral_pins=-DCUSTOM_PERIPHERAL_P
380380
Nucleo_144.menu.pnum.NUCLEO_U575ZI_Q.openocd.target=stm32u5x
381381
Nucleo_144.menu.pnum.NUCLEO_U575ZI_Q.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U5xx/STM32U575.svd
382382

383+
# NUCLEO_U5A5ZJ_Q board
384+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q=Nucleo U5A5ZJ-Q
385+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.node=NOD_U5A5ZJ
386+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.upload.maximum_size=4194304
387+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.upload.maximum_data_size=2555904
388+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.mcu=cortex-m33
389+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.fpu=-mfpu=fpv4-sp-d16
390+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.float-abi=-mfloat-abi=hard
391+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.board=NUCLEO_U5A5ZJ_Q
392+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.series=STM32U5xx
393+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.product_line=STM32U5A5xx
394+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.variant=STM32U5xx/U595Z(I-J)TxQ_U599Z(I-J)TxQ_U5A5ZJTxQ_U5A9ZJTxQ
395+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.build.peripheral_pins=-DCUSTOM_PERIPHERAL_PINS
396+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.openocd.target=stm32u5x
397+
Nucleo_144.menu.pnum.NUCLEO_U5A5ZJ_Q.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U5xx/STM32U5A5.svd
398+
383399
# Upload menu
384400
Nucleo_144.menu.upload_method.MassStorage=Mass Storage
385401
Nucleo_144.menu.upload_method.MassStorage.upload.protocol=

variants/STM32U5xx/U575Z(G-I)TxQ_U585ZITxQ/variant_NUCLEO_U575ZI_Q.cpp

+39-27
Original file line numberDiff line numberDiff line change
@@ -174,43 +174,46 @@ WEAK void SystemClock_Config(void)
174174
{
175175
RCC_OscInitTypeDef RCC_OscInitStruct = {};
176176
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
177-
RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
178177
RCC_CRSInitTypeDef RCC_CRSInitStruct = {};
178+
RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
179+
180+
/*
181+
* Switch to SMPS regulator instead of LDO
182+
*/
183+
if (HAL_PWREx_ConfigSupply(PWR_SMPS_SUPPLY) != HAL_OK) {
184+
Error_Handler();
185+
}
179186

180187
/** Configure the main internal regulator output voltage
181188
*/
182189
if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) {
183190
Error_Handler();
184191
}
185-
/** Configure LSE Drive Capability
186-
*/
187-
HAL_PWR_EnableBkUpAccess();
188-
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
189-
/** Initializes the CPU, AHB and APB busses clocks
192+
193+
/** Initializes the CPU, AHB and APB buses clocks
190194
*/
191195
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_HSI
192-
| RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_MSI;
196+
| RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_HSE;
197+
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
193198
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
194199
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
195200
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
196201
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
197-
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
198-
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
199-
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_0;
200202
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
201-
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
202-
RCC_OscInitStruct.PLL.PLLMBOOST = RCC_PLLMBOOST_DIV4;
203-
RCC_OscInitStruct.PLL.PLLM = 3;
204-
RCC_OscInitStruct.PLL.PLLN = 10;
205-
RCC_OscInitStruct.PLL.PLLP = 2;
203+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
204+
RCC_OscInitStruct.PLL.PLLMBOOST = RCC_PLLMBOOST_DIV1;
205+
RCC_OscInitStruct.PLL.PLLM = 1;
206+
RCC_OscInitStruct.PLL.PLLN = 20;
207+
RCC_OscInitStruct.PLL.PLLP = 8;
206208
RCC_OscInitStruct.PLL.PLLQ = 2;
207-
RCC_OscInitStruct.PLL.PLLR = 1;
209+
RCC_OscInitStruct.PLL.PLLR = 2;
208210
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLLVCIRANGE_1;
209211
RCC_OscInitStruct.PLL.PLLFRACN = 0;
210212
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
211213
Error_Handler();
212214
}
213-
/** Initializes the CPU, AHB and APB busses clocks
215+
216+
/** Initializes the CPU, AHB and APB buses clocks
214217
*/
215218
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
216219
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
@@ -224,28 +227,37 @@ WEAK void SystemClock_Config(void)
224227
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) {
225228
Error_Handler();
226229
}
227-
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_DAC1
228-
| RCC_PERIPHCLK_CLK48;
229-
PeriphClkInit.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_HSI;
230-
PeriphClkInit.Dac1ClockSelection = RCC_DAC1CLKSOURCE_LSE;
231-
PeriphClkInit.IclkClockSelection = RCC_CLK48CLKSOURCE_HSI48;
232230

233-
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
234-
Error_Handler();
235-
}
236231
/** Enable the SYSCFG APB clock
237232
*/
238233
__HAL_RCC_CRS_CLK_ENABLE();
234+
239235
/** Configures CRS
240236
*/
241237
RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
242-
RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
238+
RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_LSE;
243239
RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
244-
RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000, 1000);
240+
RCC_CRSInitStruct.ReloadValue = __HAL_RCC_CRS_RELOADVALUE_CALCULATE(48000000, 32768);
245241
RCC_CRSInitStruct.ErrorLimitValue = 34;
246242
RCC_CRSInitStruct.HSI48CalibrationValue = 32;
247243

248244
HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
245+
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADCDAC | RCC_PERIPHCLK_ADCDAC
246+
| RCC_PERIPHCLK_DAC1 | RCC_PERIPHCLK_LPUART1
247+
| RCC_PERIPHCLK_SDMMC | RCC_PERIPHCLK_CLK48
248+
| RCC_PERIPHCLK_USBPHY;
249+
PeriphClkInit.AdcDacClockSelection = RCC_ADCDACCLKSOURCE_SYSCLK;
250+
PeriphClkInit.Dac1ClockSelection = RCC_DAC1CLKSOURCE_LSE;
251+
PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI;
252+
PeriphClkInit.IclkClockSelection = RCC_CLK48CLKSOURCE_HSI48;
253+
PeriphClkInit.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_CLK48;
254+
PeriphClkInit.UsbPhyClockSelection = RCC_USBPHYCLKSOURCE_HSE;
255+
256+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
257+
Error_Handler();
258+
}
259+
260+
249261
}
250262

251263
#ifdef __cplusplus

variants/STM32U5xx/U595Z(I-J)TxQ_U599Z(I-J)TxQ_U5A5ZJTxQ_U5A9ZJTxQ/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ add_library(variant_bin STATIC EXCLUDE_FROM_ALL
2323
PeripheralPins.c
2424
PeripheralPins_NUCLEO_U5A5ZJ_Q.c
2525
variant_generic.cpp
26+
variant_NUCLEO_U5A5ZJ_Q.cpp
2627
)
2728
target_link_libraries(variant_bin PUBLIC variant_usage)
2829

0 commit comments

Comments
 (0)