Skip to content

Commit 3e90e3a

Browse files
committed
variant(u3): add U375R(E-G)TxQ and U385RGTxQ generic support
Signed-off-by: Frederic Pillon <frederic.pillon@st.com>
1 parent e037160 commit 3e90e3a

File tree

4 files changed

+386
-2
lines changed

4 files changed

+386
-2
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
7373
- [Generic STM32L4 boards](#generic-stm32l4-boards)
7474
- [Generic STM32L5 boards](#generic-stm32l5-boards)
7575
- [Generic STM32U0 boards](#generic-stm32u0-boards)
76+
- [Generic STM32U3 boards](#generic-stm32u3-boards)
7677
- [Generic STM32U5 boards](#generic-stm32u5-boards)
7778
- [Generic STM32WB boards](#generic-stm32wb-boards)
7879
- [Generic STM32WBA boards](#generic-stm32wba-boards)
@@ -750,6 +751,13 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
750751
| :green_heart: | STM32U073R8<br>STSTM32U073RB<br>STM32U073RC | Generic Board | *2.9.0* | |
751752
| :green_heart: | STM32U083RC | Generic Board | *2.9.0* | |
752753

754+
### Generic STM32U3 boards
755+
756+
| Status | Device(s) | Name | Release | Notes |
757+
| :----: | :-------: | ---- | :-----: | :---- |
758+
| :yellow_heart: | STM32U375RETxQ<br>STM32U375RGTxQ | Generic Board | **2.10.0** | |
759+
| :yellow_heart: | STM32U385RGTxQ | Generic Board | **2.10.0** | |
760+
753761
### Generic STM32U5 boards
754762

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

boards.txt

+130
Original file line numberDiff line numberDiff line change
@@ -12389,6 +12389,84 @@ GenU0.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
1238912389
#GenU0.menu.upload_method.OpenOCDDapLink.upload.protocol=cmsis-dap
1239012390
#GenU0.menu.upload_method.OpenOCDDapLink.upload.tool=openocd_upload
1239112391

12392+
################################################################################
12393+
# Generic U3
12394+
GenU3.name=Generic STM32U3 series
12395+
12396+
GenU3.build.core=arduino
12397+
GenU3.build.board=GenU3
12398+
GenU3.build.st_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
12399+
GenU3.build.mcu=cortex-m33
12400+
GenU3.build.fpu=-mfpu=fpv4-sp-d16
12401+
GenU3.build.float-abi=-mfloat-abi=hard
12402+
GenU3.build.series=STM32U3xx
12403+
GenU3.build.flash_offset=0x0
12404+
GenU3.upload.maximum_size=0
12405+
GenU3.upload.maximum_data_size=0
12406+
# GenU3.openocd.target=stm32u3x
12407+
GenU3.vid.0=0x0483
12408+
GenU3.pid.0=0x5740
12409+
12410+
# Generic U375RETxQ
12411+
GenU3.menu.pnum.GENERIC_U375RETXQ=Generic U375RETxQ
12412+
GenU3.menu.pnum.GENERIC_U375RETXQ.upload.maximum_size=524288
12413+
GenU3.menu.pnum.GENERIC_U375RETXQ.upload.maximum_data_size=262144
12414+
GenU3.menu.pnum.GENERIC_U375RETXQ.build.board=GENERIC_U375RETXQ
12415+
GenU3.menu.pnum.GENERIC_U375RETXQ.build.product_line=STM32U375xx
12416+
GenU3.menu.pnum.GENERIC_U375RETXQ.build.variant=STM32U3xx/U375R(E-G)TxQ_U385RGTxQ
12417+
GenU3.menu.pnum.GENERIC_U375RETXQ.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U3xx/STM32U3.svd
12418+
12419+
# Generic U375RGTxQ
12420+
GenU3.menu.pnum.GENERIC_U375RGTXQ=Generic U375RGTxQ
12421+
GenU3.menu.pnum.GENERIC_U375RGTXQ.upload.maximum_size=1048576
12422+
GenU3.menu.pnum.GENERIC_U375RGTXQ.upload.maximum_data_size=262144
12423+
GenU3.menu.pnum.GENERIC_U375RGTXQ.build.board=GENERIC_U375RGTXQ
12424+
GenU3.menu.pnum.GENERIC_U375RGTXQ.build.product_line=STM32U375xx
12425+
GenU3.menu.pnum.GENERIC_U375RGTXQ.build.variant=STM32U3xx/U375R(E-G)TxQ_U385RGTxQ
12426+
GenU3.menu.pnum.GENERIC_U375RGTXQ.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U3xx/STM32U3.svd
12427+
12428+
# Generic U385RGTxQ
12429+
GenU3.menu.pnum.GENERIC_U385RGTXQ=Generic U385RGTxQ
12430+
GenU3.menu.pnum.GENERIC_U385RGTXQ.upload.maximum_size=1048576
12431+
GenU3.menu.pnum.GENERIC_U385RGTXQ.upload.maximum_data_size=262144
12432+
GenU3.menu.pnum.GENERIC_U385RGTXQ.build.board=GENERIC_U385RGTXQ
12433+
GenU3.menu.pnum.GENERIC_U385RGTXQ.build.product_line=STM32U385xx
12434+
GenU3.menu.pnum.GENERIC_U385RGTXQ.build.variant=STM32U3xx/U375R(E-G)TxQ_U385RGTxQ
12435+
GenU3.menu.pnum.GENERIC_U385RGTXQ.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U3xx/STM32U3.svd
12436+
12437+
# Upload menu
12438+
GenU3.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
12439+
GenU3.menu.upload_method.swdMethod.upload.protocol=swd
12440+
GenU3.menu.upload_method.swdMethod.upload.options=
12441+
GenU3.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
12442+
12443+
GenU3.menu.upload_method.jlinkMethod=STM32CubeProgrammer (J-Link)
12444+
GenU3.menu.upload_method.jlinkMethod.upload.protocol=jlink
12445+
GenU3.menu.upload_method.jlinkMethod.upload.options=
12446+
GenU3.menu.upload_method.jlinkMethod.upload.tool=stm32CubeProg
12447+
12448+
GenU3.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
12449+
GenU3.menu.upload_method.serialMethod.upload.protocol=serial
12450+
GenU3.menu.upload_method.serialMethod.upload.options=-c {serial.port.file}
12451+
GenU3.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
12452+
12453+
GenU3.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
12454+
GenU3.menu.upload_method.dfuMethod.upload.protocol=dfu
12455+
GenU3.menu.upload_method.dfuMethod.upload.options=-v {upload.vid} -p {upload.pid}
12456+
GenU3.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
12457+
12458+
GenU3.menu.upload_method.bmpMethod=BMP (Black Magic Probe)
12459+
GenU3.menu.upload_method.bmpMethod.upload.protocol=gdb_bmp
12460+
GenU3.menu.upload_method.bmpMethod.upload.tool=bmp_upload
12461+
12462+
#GenU3.menu.upload_method.OpenOCDSTLink=OpenOCD STLink (SWD)
12463+
#GenU3.menu.upload_method.OpenOCDSTLink.upload.protocol=stlink
12464+
#GenU3.menu.upload_method.OpenOCDSTLink.upload.tool=openocd_upload
12465+
12466+
#GenU3.menu.upload_method.OpenOCDDapLink=OpenOCD DapLink (SWD)
12467+
#GenU3.menu.upload_method.OpenOCDDapLink.upload.protocol=cmsis-dap
12468+
#GenU3.menu.upload_method.OpenOCDDapLink.upload.tool=openocd_upload
12469+
1239212470
################################################################################
1239312471
# Generic U5
1239412472
GenU5.name=Generic STM32U5 series
@@ -14239,6 +14317,11 @@ GenU0.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
1423914317
GenU0.menu.xserial.disabled=Disabled (no Serial support)
1424014318
GenU0.menu.xserial.disabled.build.xSerial=
1424114319

14320+
GenU3.menu.xserial.generic=Enabled (generic 'Serial')
14321+
GenU3.menu.xserial.none=Enabled (no generic 'Serial')
14322+
GenU3.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
14323+
GenU3.menu.xserial.disabled=Disabled (no Serial support)
14324+
1424214325
GenU5.menu.xserial.generic=Enabled (generic 'Serial')
1424314326
GenU5.menu.xserial.none=Enabled (no generic 'Serial')
1424414327
GenU5.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -14579,6 +14662,14 @@ GenU0.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_G
1457914662
GenU0.menu.usb.HID=HID (keyboard and mouse)
1458014663
GenU0.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
1458114664

14665+
GenU3.menu.usb.none=None
14666+
GenU3.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
14667+
GenU3.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
14668+
GenU3.menu.usb.CDC=CDC (no generic 'Serial')
14669+
GenU3.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
14670+
GenU3.menu.usb.HID=HID (keyboard and mouse)
14671+
GenU3.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
14672+
1458214673
GenU5.menu.usb.none=None
1458314674
GenU5.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
1458414675
GenU5.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
@@ -15141,6 +15232,27 @@ GenU0.menu.opt.ogstd.build.flags.optimize=-Og
1514115232
GenU0.menu.opt.o0std=No Optimization (-O0)
1514215233
GenU0.menu.opt.o0std.build.flags.optimize=-O0
1514315234

15235+
GenU3.menu.opt.osstd=Smallest (-Os default)
15236+
GenU3.menu.opt.osstd.build.flags.optimize=-Os
15237+
GenU3.menu.opt.oslto=Smallest (-Os) with LTO
15238+
GenU3.menu.opt.oslto.build.flags.optimize=-Os -flto
15239+
GenU3.menu.opt.o1std=Fast (-O1)
15240+
GenU3.menu.opt.o1std.build.flags.optimize=-O1
15241+
GenU3.menu.opt.o1lto=Fast (-O1) with LTO
15242+
GenU3.menu.opt.o1lto.build.flags.optimize=-O1 -flto
15243+
GenU3.menu.opt.o2std=Faster (-O2)
15244+
GenU3.menu.opt.o2std.build.flags.optimize=-O2
15245+
GenU3.menu.opt.o2lto=Faster (-O2) with LTO
15246+
GenU3.menu.opt.o2lto.build.flags.optimize=-O2 -flto
15247+
GenU3.menu.opt.o3std=Fastest (-O3)
15248+
GenU3.menu.opt.o3std.build.flags.optimize=-O3
15249+
GenU3.menu.opt.o3lto=Fastest (-O3) with LTO
15250+
GenU3.menu.opt.o3lto.build.flags.optimize=-O3 -flto
15251+
GenU3.menu.opt.ogstd=Debug (-Og)
15252+
GenU3.menu.opt.ogstd.build.flags.optimize=-Og
15253+
GenU3.menu.opt.o0std=No Optimization (-O0)
15254+
GenU3.menu.opt.o0std.build.flags.optimize=-O0
15255+
1514415256
GenU5.menu.opt.osstd=Smallest (-Os default)
1514515257
GenU5.menu.opt.osstd.build.flags.optimize=-Os
1514615258
GenU5.menu.opt.oslto=Smallest (-Os) with LTO
@@ -15635,6 +15747,14 @@ GenU0.menu.dbg.enable_log.build.flags.debug=
1563515747
GenU0.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
1563615748
GenU0.menu.dbg.enable_all.build.flags.debug=-g
1563715749

15750+
GenU3.menu.dbg.none=None
15751+
GenU3.menu.dbg.enable_sym=Symbols Enabled (-g)
15752+
GenU3.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
15753+
GenU3.menu.dbg.enable_log=Core logs Enabled
15754+
GenU3.menu.dbg.enable_log.build.flags.debug=
15755+
GenU3.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
15756+
GenU3.menu.dbg.enable_all.build.flags.debug=-g
15757+
1563815758
GenU5.menu.dbg.none=None
1563915759
GenU5.menu.dbg.enable_sym=Symbols Enabled (-g)
1564015760
GenU5.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
@@ -15984,6 +16104,16 @@ GenU0.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float
1598416104
GenU0.menu.rtlib.full=Newlib Standard
1598516105
GenU0.menu.rtlib.full.build.flags.ldspecs=
1598616106

16107+
GenU3.menu.rtlib.nano=Newlib Nano (default)
16108+
GenU3.menu.rtlib.nanofp=Newlib Nano + Float Printf
16109+
GenU3.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
16110+
GenU3.menu.rtlib.nanofs=Newlib Nano + Float Scanf
16111+
GenU3.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
16112+
GenU3.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
16113+
GenU3.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
16114+
GenU3.menu.rtlib.full=Newlib Standard
16115+
GenU3.menu.rtlib.full.build.flags.ldspecs=
16116+
1598716117
GenU5.menu.rtlib.nano=Newlib Nano (default)
1598816118
GenU5.menu.rtlib.nanofp=Newlib Nano + Float Printf
1598916119
GenU5.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float

variants/STM32U3xx/U375R(E-G)TxQ_U385RGTxQ/generic_clock.c

+60-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,66 @@
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 PeriphClkInit = {};
27+
28+
/** Enable Epod Booster
29+
*/
30+
if (HAL_RCCEx_EpodBoosterClkConfig(RCC_EPODBOOSTER_SOURCE_MSIS, RCC_EPODBOOSTER_DIV1) != HAL_OK) {
31+
Error_Handler();
32+
}
33+
if (HAL_PWREx_EnableEpodBooster() != HAL_OK) {
34+
Error_Handler();
35+
}
36+
37+
/** Configure the main internal regulator output voltage
38+
*/
39+
if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) {
40+
Error_Handler();
41+
}
42+
43+
/** Set Flash latency before increasing MSIS
44+
*/
45+
__HAL_FLASH_SET_LATENCY(FLASH_LATENCY_2);
46+
47+
/** Initializes the CPU, AHB and APB buses clocks
48+
*/
49+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_HSI
50+
| RCC_OSCILLATORTYPE_MSIS;
51+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
52+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
53+
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
54+
RCC_OscInitStruct.MSISState = RCC_MSI_ON;
55+
RCC_OscInitStruct.MSISSource = RCC_MSI_RC0;
56+
RCC_OscInitStruct.MSISDiv = RCC_MSI_DIV1;
57+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
58+
Error_Handler();
59+
}
60+
61+
/** Initializes the CPU, AHB and APB buses clocks
62+
*/
63+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
64+
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2
65+
| RCC_CLOCKTYPE_PCLK3;
66+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSIS;
67+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
68+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
69+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
70+
RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
71+
72+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
73+
Error_Handler();
74+
}
75+
/** Initializes the peripherals clock
76+
*/
77+
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_USB1;
78+
PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI;
79+
PeriphClkInit.IclkClockSelection = RCC_ICLKCLKSOURCE_HSI48;
80+
PeriphClkInit.Usb1ClockSelection = RCC_USB1CLKSOURCE_ICLK;
81+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
82+
Error_Handler();
83+
}
2684
}
2785

2886
#endif /* ARDUINO_GENERIC_* */

0 commit comments

Comments
 (0)