Skip to content

Commit c579e02

Browse files
committed
variant(H5): add H563Z(G-I)T_H573ZIT generic support
Signed-off-by: Frederic Pillon <[email protected]>
1 parent 76dc101 commit c579e02

File tree

4 files changed

+390
-2
lines changed

4 files changed

+390
-2
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
6464
- [Generic STM32F7 boards](#generic-stm32f7-boards)
6565
- [Generic STM32G0 boards](#generic-stm32g0-boards)
6666
- [Generic STM32G4 boards](#generic-stm32g4-boards)
67+
- [Generic STM32H5 boards](#generic-stm32h5-boards)
6768
- [Generic STM32H7 boards](#generic-stm32h7-boards)
6869
- [Generic STM32L0 boards](#generic-stm32l0-boards)
6970
- [Generic STM32L1 boards](#generic-stm32l1-boards)
@@ -507,6 +508,13 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
507508
| :green_heart: | STM32G4A1RE | Generic Board | *2.3.0* | |
508509
| :green_heart: | STM32G4A1VE | Generic Board | *2.4.0* | |
509510

511+
### Generic STM32H5 boards
512+
513+
| Status | Device(s) | Name | Release | Notes |
514+
| :----: | :-------: | ---- | :-----: | :---- |
515+
| :yellow_heart: | STM32H563ZG<br>STM32H563ZI | Generic Board | **2.6.0** | |
516+
| :yellow_heart: | STM32H573ZI | Generic Board | **2.6.0** | |
517+
510518
### Generic STM32H7 boards
511519

512520
| Status | Device(s) | Name | Release | Notes |

boards.txt

+114
Original file line numberDiff line numberDiff line change
@@ -7126,6 +7126,62 @@ GenG4.menu.upload_method.dfuMethod.upload.protocol=2
71267126
GenG4.menu.upload_method.dfuMethod.upload.options=
71277127
GenG4.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
71287128

7129+
################################################################################
7130+
# Generic H5
7131+
GenH5.name=Generic STM32H5 series
7132+
7133+
GenH5.build.core=arduino
7134+
GenH5.build.board=GenH5
7135+
GenH5.build.st_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
7136+
GenH5.build.mcu=cortex-m33
7137+
GenH5.build.fpu=-mfpu=fpv4-sp-d16
7138+
GenH5.build.float-abi=-mfloat-abi=hard
7139+
GenH5.build.series=STM32H5xx
7140+
GenH5.build.cmsis_lib_gcc=arm_ARMv8MMLlfsp_math
7141+
GenH5.build.flash_offset=0x0
7142+
GenH5.upload.maximum_size=0
7143+
GenH5.upload.maximum_data_size=0
7144+
7145+
# Generic H563ZGTx
7146+
GenH5.menu.pnum.GENERIC_H563ZGTX=Generic H563ZGTx
7147+
GenH5.menu.pnum.GENERIC_H563ZGTX.upload.maximum_size=1048576
7148+
GenH5.menu.pnum.GENERIC_H563ZGTX.upload.maximum_data_size=655360
7149+
GenH5.menu.pnum.GENERIC_H563ZGTX.build.board=GENERIC_H563ZGTX
7150+
GenH5.menu.pnum.GENERIC_H563ZGTX.build.product_line=STM32H563xx
7151+
GenH5.menu.pnum.GENERIC_H563ZGTX.build.variant=STM32H5xx/H563Z(G-I)T_H573ZIT
7152+
7153+
# Generic H563ZITx
7154+
GenH5.menu.pnum.GENERIC_H563ZITX=Generic H563ZITx
7155+
GenH5.menu.pnum.GENERIC_H563ZITX.upload.maximum_size=2097152
7156+
GenH5.menu.pnum.GENERIC_H563ZITX.upload.maximum_data_size=655360
7157+
GenH5.menu.pnum.GENERIC_H563ZITX.build.board=GENERIC_H563ZITX
7158+
GenH5.menu.pnum.GENERIC_H563ZITX.build.product_line=STM32H563xx
7159+
GenH5.menu.pnum.GENERIC_H563ZITX.build.variant=STM32H5xx/H563Z(G-I)T_H573ZIT
7160+
7161+
# Generic H573ZITx
7162+
GenH5.menu.pnum.GENERIC_H573ZITX=Generic H573ZITx
7163+
GenH5.menu.pnum.GENERIC_H573ZITX.upload.maximum_size=2097152
7164+
GenH5.menu.pnum.GENERIC_H573ZITX.upload.maximum_data_size=655360
7165+
GenH5.menu.pnum.GENERIC_H573ZITX.build.board=GENERIC_H573ZITX
7166+
GenH5.menu.pnum.GENERIC_H573ZITX.build.product_line=STM32H573xx
7167+
GenH5.menu.pnum.GENERIC_H573ZITX.build.variant=STM32H5xx/H563Z(G-I)T_H573ZIT
7168+
7169+
# Upload menu
7170+
GenH5.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
7171+
GenH5.menu.upload_method.swdMethod.upload.protocol=0
7172+
GenH5.menu.upload_method.swdMethod.upload.options=
7173+
GenH5.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
7174+
7175+
GenH5.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
7176+
GenH5.menu.upload_method.serialMethod.upload.protocol=1
7177+
GenH5.menu.upload_method.serialMethod.upload.options={serial.port.file}
7178+
GenH5.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
7179+
7180+
GenH5.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
7181+
GenH5.menu.upload_method.dfuMethod.upload.protocol=2
7182+
GenH5.menu.upload_method.dfuMethod.upload.options=
7183+
GenH5.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
7184+
71297185
################################################################################
71307186
# Generic H7
71317187
GenH7.name=Generic STM32H7 Series
@@ -10722,6 +10778,12 @@ GenG4.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
1072210778
GenG4.menu.xserial.disabled=Disabled (no Serial support)
1072310779
GenG4.menu.xserial.disabled.build.xSerial=
1072410780

10781+
GenH5.menu.xserial.generic=Enabled (generic 'Serial')
10782+
GenH5.menu.xserial.none=Enabled (no generic 'Serial')
10783+
GenH5.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
10784+
GenH5.menu.xserial.disabled=Disabled (no Serial support)
10785+
GenH5.menu.xserial.disabled.build.xSerial=
10786+
1072510787
GenH7.menu.xserial.generic=Enabled (generic 'Serial')
1072610788
GenH7.menu.xserial.none=Enabled (no generic 'Serial')
1072710789
GenH7.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -10978,6 +11040,19 @@ GenG0.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_G
1097811040
GenG0.menu.usb.HID=HID (keyboard and mouse)
1097911041
GenG0.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
1098011042

11043+
GenH5.menu.usb.none=None
11044+
GenH5.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
11045+
GenH5.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
11046+
GenH5.menu.usb.CDC=CDC (no generic 'Serial')
11047+
GenH5.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
11048+
GenH5.menu.usb.HID=HID (keyboard and mouse)
11049+
GenH5.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
11050+
GenH5.menu.xusb.FS=Low/Full Speed
11051+
GenH5.menu.xusb.HS=High Speed
11052+
GenH5.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
11053+
GenH5.menu.xusb.HSFS=High Speed in Full Speed mode
11054+
GenH5.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
11055+
1098111056
GenH7.menu.usb.none=None
1098211057
GenH7.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
1098311058
GenH7.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
@@ -11440,6 +11515,27 @@ GenG4.menu.opt.ogstd.build.flags.optimize=-Og
1144011515
GenG4.menu.opt.o0std=No Optimization (-O0)
1144111516
GenG4.menu.opt.o0std.build.flags.optimize=-O0
1144211517

11518+
GenH5.menu.opt.osstd=Smallest (-Os default)
11519+
GenH5.menu.opt.osstd.build.flags.optimize=-Os
11520+
GenH5.menu.opt.oslto=Smallest (-Os) with LTO
11521+
GenH5.menu.opt.oslto.build.flags.optimize=-Os -flto
11522+
GenH5.menu.opt.o1std=Fast (-O1)
11523+
GenH5.menu.opt.o1std.build.flags.optimize=-O1
11524+
GenH5.menu.opt.o1lto=Fast (-O1) with LTO
11525+
GenH5.menu.opt.o1lto.build.flags.optimize=-O1 -flto
11526+
GenH5.menu.opt.o2std=Faster (-O2)
11527+
GenH5.menu.opt.o2std.build.flags.optimize=-O2
11528+
GenH5.menu.opt.o2lto=Faster (-O2) with LTO
11529+
GenH5.menu.opt.o2lto.build.flags.optimize=-O2 -flto
11530+
GenH5.menu.opt.o3std=Fastest (-O3)
11531+
GenH5.menu.opt.o3std.build.flags.optimize=-O3
11532+
GenH5.menu.opt.o3lto=Fastest (-O3) with LTO
11533+
GenH5.menu.opt.o3lto.build.flags.optimize=-O3 -flto
11534+
GenH5.menu.opt.ogstd=Debug (-Og)
11535+
GenH5.menu.opt.ogstd.build.flags.optimize=-Og
11536+
GenH5.menu.opt.o0std=No Optimization (-O0)
11537+
GenH5.menu.opt.o0std.build.flags.optimize=-O0
11538+
1144311539
GenH7.menu.opt.osstd=Smallest (-Os default)
1144411540
GenH7.menu.opt.oslto=Smallest (-Os) with LTO
1144511541
GenH7.menu.opt.oslto.build.flags.optimize=-Os -flto
@@ -11878,6 +11974,14 @@ GenG4.menu.dbg.enable_log.build.flags.debug=
1187811974
GenG4.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
1187911975
GenG4.menu.dbg.enable_all.build.flags.debug=-g
1188011976

11977+
GenH5.menu.dbg.none=None
11978+
GenH5.menu.dbg.enable_sym=Symbols Enabled (-g)
11979+
GenH5.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
11980+
GenH5.menu.dbg.enable_log=Core logs Enabled
11981+
GenH5.menu.dbg.enable_log.build.flags.debug=
11982+
GenH5.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
11983+
GenH5.menu.dbg.enable_all.build.flags.debug=-g
11984+
1188111985
GenH7.menu.dbg.none=None
1188211986
GenH7.menu.dbg.enable_sym=Symbols Enabled (-g)
1188311987
GenH7.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
@@ -12149,6 +12253,16 @@ GenG4.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float
1214912253
GenG4.menu.rtlib.full=Newlib Standard
1215012254
GenG4.menu.rtlib.full.build.flags.ldspecs=
1215112255

12256+
GenH5.menu.rtlib.nano=Newlib Nano (default)
12257+
GenH5.menu.rtlib.nanofp=Newlib Nano + Float Printf
12258+
GenH5.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
12259+
GenH5.menu.rtlib.nanofs=Newlib Nano + Float Scanf
12260+
GenH5.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
12261+
GenH5.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
12262+
GenH5.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
12263+
GenH5.menu.rtlib.full=Newlib Standard
12264+
GenH5.menu.rtlib.full.build.flags.ldspecs=
12265+
1215212266
GenH7.menu.rtlib.nano=Newlib Nano (default)
1215312267
GenH7.menu.rtlib.nanofp=Newlib Nano + Float Printf
1215412268
GenH7.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float

variants/STM32H5xx/H563Z(G-I)T_H573ZIT/generic_clock.c

+83-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,89 @@
2121
*/
2222
WEAK void SystemClock_Config(void)
2323
{
24-
/* SystemClock_Config can be generated by STM32CubeMX */
25-
#warning "SystemClock_Config() is empty. Default clock at reset is used."
24+
RCC_OscInitTypeDef RCC_OscInitStruct = {};
25+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
26+
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
27+
28+
/** Configure the main internal regulator output voltage
29+
*/
30+
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
31+
32+
while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
33+
34+
/** Initializes the RCC Oscillators according to the specified parameters
35+
* in the RCC_OscInitTypeDef structure.
36+
*/
37+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_HSI
38+
| RCC_OSCILLATORTYPE_CSI;
39+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
40+
RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV2;
41+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
42+
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
43+
RCC_OscInitStruct.CSIState = RCC_CSI_ON;
44+
RCC_OscInitStruct.CSICalibrationValue = RCC_CSICALIBRATION_DEFAULT;
45+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
46+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLL1_SOURCE_CSI;
47+
RCC_OscInitStruct.PLL.PLLM = 1;
48+
RCC_OscInitStruct.PLL.PLLN = 125;
49+
RCC_OscInitStruct.PLL.PLLP = 2;
50+
RCC_OscInitStruct.PLL.PLLQ = 2;
51+
RCC_OscInitStruct.PLL.PLLR = 2;
52+
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1_VCIRANGE_2;
53+
RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1_VCORANGE_WIDE;
54+
RCC_OscInitStruct.PLL.PLLFRACN = 0;
55+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
56+
Error_Handler();
57+
}
58+
59+
/** Initializes the CPU, AHB and APB buses clocks
60+
*/
61+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
62+
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
63+
| RCC_CLOCKTYPE_PCLK3;
64+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
65+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
66+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
67+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
68+
RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
69+
70+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
71+
Error_Handler();
72+
}
73+
74+
/** Initializes the peripherals clock
75+
*/
76+
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FDCAN | RCC_PERIPHCLK_LPUART1
77+
| RCC_PERIPHCLK_OSPI | RCC_PERIPHCLK_SDMMC2
78+
| RCC_PERIPHCLK_SPI1 | RCC_PERIPHCLK_USB;
79+
PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_PLL1Q;
80+
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI;
81+
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
82+
PeriphClkInitStruct.PLL2.PLL2Source = RCC_PLL2_SOURCE_CSI;
83+
PeriphClkInitStruct.PLL2.PLL2M = 1;
84+
PeriphClkInitStruct.PLL2.PLL2N = 120;
85+
PeriphClkInitStruct.PLL2.PLL2P = 2;
86+
PeriphClkInitStruct.PLL2.PLL2Q = 2;
87+
PeriphClkInitStruct.PLL2.PLL2R = 10;
88+
PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2_VCIRANGE_2;
89+
PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2_VCORANGE_WIDE;
90+
PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
91+
PeriphClkInitStruct.PLL2.PLL2ClockOut = RCC_PLL2_DIVR;
92+
PeriphClkInitStruct.Sdmmc2ClockSelection = RCC_SDMMC2CLKSOURCE_PLL2R;
93+
PeriphClkInitStruct.PLL3.PLL3Source = RCC_PLL3_SOURCE_CSI;
94+
PeriphClkInitStruct.PLL3.PLL3M = 1;
95+
PeriphClkInitStruct.PLL3.PLL3N = 100;
96+
PeriphClkInitStruct.PLL3.PLL3P = 4;
97+
PeriphClkInitStruct.PLL3.PLL3Q = 2;
98+
PeriphClkInitStruct.PLL3.PLL3R = 2;
99+
PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3_VCIRANGE_0;
100+
PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3_VCORANGE_MEDIUM;
101+
PeriphClkInitStruct.PLL3.PLL3FRACN = 0;
102+
PeriphClkInitStruct.PLL3.PLL3ClockOut = RCC_PLL3_DIVP;
103+
PeriphClkInitStruct.Spi1ClockSelection = RCC_SPI1CLKSOURCE_PLL3P;
104+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
105+
Error_Handler();
106+
}
26107
}
27108

28109
#endif /* ARDUINO_GENERIC_* */

0 commit comments

Comments
 (0)