Skip to content

Commit e1ffd58

Browse files
committed
variant(U0): add U073R(8-B-C)(I-T)_U083RC(I-T) generic support
Signed-off-by: Frederic Pillon <[email protected]>
1 parent 4ac1902 commit e1ffd58

File tree

4 files changed

+403
-2
lines changed

4 files changed

+403
-2
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
7070
- [Generic STM32L1 boards](#generic-stm32l1-boards)
7171
- [Generic STM32L4 boards](#generic-stm32l4-boards)
7272
- [Generic STM32L5 boards](#generic-stm32l5-boards)
73+
- [Generic STM32U0 boards](#generic-stm32u0-boards)
7374
- [Generic STM32U5 boards](#generic-stm32u5-boards)
7475
- [Generic STM32WB boards](#generic-stm32wb-boards)
7576
- [Generic STM32WBA boards](#generic-stm32wba-boards)
@@ -723,6 +724,13 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
723724
| :green_heart: | STM32L552ZC-Q<br>STM32L552ZE-Q | Generic Board | *2.0.0* | |
724725
| :green_heart: | STM32L562ZE-Q | Generic Board | *2.0.0* | |
725726

727+
### Generic STM32U0 boards
728+
729+
| Status | Device(s) | Name | Release | Notes |
730+
| :----: | :-------: | ---- | :-----: | :---- |
731+
| :yellow_heart: | STM32U073R8<br>STSTM32U073RB<br>STM32U073RC | Generic Board | **2.9.0** | |
732+
| :yellow_heart: | STM32U083RC | Generic Board | **2.9.0** | |
733+
726734
### Generic STM32U5 boards
727735

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

boards.txt

+157
Original file line numberDiff line numberDiff line change
@@ -11651,6 +11651,110 @@ GenL5.menu.upload_method.dfuMethod.upload.protocol=dfu
1165111651
GenL5.menu.upload_method.dfuMethod.upload.options=-v {upload.vid} -p {upload.pid}
1165211652
GenL5.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
1165311653

11654+
###############################
11655+
# Generic U0
11656+
GenU0.name=Generic STM32U0 series
11657+
11658+
GenU0.build.core=arduino
11659+
GenU0.build.board=GenG0
11660+
GenU0.build.mcu=cortex-m0plus
11661+
GenU0.build.series=STM32U0xx
11662+
GenU0.build.st_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
11663+
GenU0.build.flash_offset=0x0
11664+
GenU0.upload.maximum_size=0
11665+
GenU0.upload.maximum_data_size=0
11666+
GenU0.debug.server.openocd.scripts.2=target/stm32u0x.cfg
11667+
GenU0.vid.0=0x0483
11668+
GenU0.pid.0=0x5740
11669+
11670+
# Generic U073R8Ix
11671+
GenU0.menu.pnum.GENERIC_U073R8IX=Generic U073R8Ix
11672+
GenU0.menu.pnum.GENERIC_U073R8IX.upload.maximum_size=65536
11673+
GenU0.menu.pnum.GENERIC_U073R8IX.upload.maximum_data_size=40960
11674+
GenU0.menu.pnum.GENERIC_U073R8IX.build.board=GENERIC_U073R8IX
11675+
GenU0.menu.pnum.GENERIC_U073R8IX.build.product_line=STM32U073xx
11676+
GenU0.menu.pnum.GENERIC_U073R8IX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11677+
GenU0.menu.pnum.GENERIC_U073R8IX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U073.svd
11678+
11679+
# Generic U073R8Tx
11680+
GenU0.menu.pnum.GENERIC_U073R8TX=Generic U073R8Tx
11681+
GenU0.menu.pnum.GENERIC_U073R8TX.upload.maximum_size=65536
11682+
GenU0.menu.pnum.GENERIC_U073R8TX.upload.maximum_data_size=40960
11683+
GenU0.menu.pnum.GENERIC_U073R8TX.build.board=GENERIC_U073R8TX
11684+
GenU0.menu.pnum.GENERIC_U073R8TX.build.product_line=STM32U073xx
11685+
GenU0.menu.pnum.GENERIC_U073R8TX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11686+
GenU0.menu.pnum.GENERIC_U073R8TX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U073.svd
11687+
11688+
# Generic U073RBIx
11689+
GenU0.menu.pnum.GENERIC_U073RBIX=Generic U073RBIx
11690+
GenU0.menu.pnum.GENERIC_U073RBIX.upload.maximum_size=131072
11691+
GenU0.menu.pnum.GENERIC_U073RBIX.upload.maximum_data_size=40960
11692+
GenU0.menu.pnum.GENERIC_U073RBIX.build.board=GENERIC_U073RBIX
11693+
GenU0.menu.pnum.GENERIC_U073RBIX.build.product_line=STM32U073xx
11694+
GenU0.menu.pnum.GENERIC_U073RBIX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11695+
GenU0.menu.pnum.GENERIC_U073RBIX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U073.svd
11696+
11697+
# Generic U073RBTx
11698+
GenU0.menu.pnum.GENERIC_U073RBTX=Generic U073RBTx
11699+
GenU0.menu.pnum.GENERIC_U073RBTX.upload.maximum_size=131072
11700+
GenU0.menu.pnum.GENERIC_U073RBTX.upload.maximum_data_size=40960
11701+
GenU0.menu.pnum.GENERIC_U073RBTX.build.board=GENERIC_U073RBTX
11702+
GenU0.menu.pnum.GENERIC_U073RBTX.build.product_line=STM32U073xx
11703+
GenU0.menu.pnum.GENERIC_U073RBTX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11704+
GenU0.menu.pnum.GENERIC_U073RBTX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U073.svd
11705+
11706+
# Generic U073RCIx
11707+
GenU0.menu.pnum.GENERIC_U073RCIX=Generic U073RCIx
11708+
GenU0.menu.pnum.GENERIC_U073RCIX.upload.maximum_size=262144
11709+
GenU0.menu.pnum.GENERIC_U073RCIX.upload.maximum_data_size=40960
11710+
GenU0.menu.pnum.GENERIC_U073RCIX.build.board=GENERIC_U073RCIX
11711+
GenU0.menu.pnum.GENERIC_U073RCIX.build.product_line=STM32U073xx
11712+
GenU0.menu.pnum.GENERIC_U073RCIX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11713+
GenU0.menu.pnum.GENERIC_U073RCIX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U073.svd
11714+
11715+
# Generic U073RCTx
11716+
GenU0.menu.pnum.GENERIC_U073RCTX=Generic U073RCTx
11717+
GenU0.menu.pnum.GENERIC_U073RCTX.upload.maximum_size=262144
11718+
GenU0.menu.pnum.GENERIC_U073RCTX.upload.maximum_data_size=40960
11719+
GenU0.menu.pnum.GENERIC_U073RCTX.build.board=GENERIC_U073RCTX
11720+
GenU0.menu.pnum.GENERIC_U073RCTX.build.product_line=STM32U073xx
11721+
GenU0.menu.pnum.GENERIC_U073RCTX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11722+
GenU0.menu.pnum.GENERIC_U073RCTX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U073.svd
11723+
11724+
# Generic U083RCIx
11725+
GenU0.menu.pnum.GENERIC_U083RCIX=Generic U083RCIx
11726+
GenU0.menu.pnum.GENERIC_U083RCIX.upload.maximum_size=262144
11727+
GenU0.menu.pnum.GENERIC_U083RCIX.upload.maximum_data_size=40960
11728+
GenU0.menu.pnum.GENERIC_U083RCIX.build.board=GENERIC_U083RCIX
11729+
GenU0.menu.pnum.GENERIC_U083RCIX.build.product_line=STM32U083xx
11730+
GenU0.menu.pnum.GENERIC_U083RCIX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11731+
GenU0.menu.pnum.GENERIC_U083RCIX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U083.svd
11732+
11733+
# Generic U083RCTx
11734+
GenU0.menu.pnum.GENERIC_U083RCTX=Generic U083RCTx
11735+
GenU0.menu.pnum.GENERIC_U083RCTX.upload.maximum_size=262144
11736+
GenU0.menu.pnum.GENERIC_U083RCTX.upload.maximum_data_size=40960
11737+
GenU0.menu.pnum.GENERIC_U083RCTX.build.board=GENERIC_U083RCTX
11738+
GenU0.menu.pnum.GENERIC_U083RCTX.build.product_line=STM32U083xx
11739+
GenU0.menu.pnum.GENERIC_U083RCTX.build.variant=STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)
11740+
GenU0.menu.pnum.GENERIC_U083RCTX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32U0xx/STM32U083.svd
11741+
11742+
# Upload menu
11743+
GenU0.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
11744+
GenU0.menu.upload_method.swdMethod.upload.protocol=swd
11745+
GenU0.menu.upload_method.swdMethod.upload.options=
11746+
GenU0.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
11747+
11748+
GenU0.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
11749+
GenU0.menu.upload_method.serialMethod.upload.protocol=serial
11750+
GenU0.menu.upload_method.serialMethod.upload.options=-c {serial.port.file}
11751+
GenU0.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
11752+
11753+
GenU0.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
11754+
GenU0.menu.upload_method.dfuMethod.upload.protocol=dfu
11755+
GenU0.menu.upload_method.dfuMethod.upload.options=-v {upload.vid} -p {upload.pid}
11756+
GenU0.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
11757+
1165411758
################################################################################
1165511759
# Generic U5
1165611760
GenU5.name=Generic STM32U5 series
@@ -13170,6 +13274,12 @@ GenL5.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
1317013274
GenL5.menu.xserial.disabled=Disabled (no Serial support)
1317113275
GenL5.menu.xserial.disabled.build.xSerial=
1317213276

13277+
GenU0.menu.xserial.generic=Enabled (generic 'Serial')
13278+
GenU0.menu.xserial.none=Enabled (no generic 'Serial')
13279+
GenU0.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
13280+
GenU0.menu.xserial.disabled=Disabled (no Serial support)
13281+
GenU0.menu.xserial.disabled.build.xSerial=
13282+
1317313283
GenU5.menu.xserial.generic=Enabled (generic 'Serial')
1317413284
GenU5.menu.xserial.none=Enabled (no generic 'Serial')
1317513285
GenU5.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -13488,6 +13598,14 @@ GenL5.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
1348813598
GenL5.menu.xusb.HSFS=High Speed in Full Speed mode
1348913599
GenL5.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
1349013600

13601+
GenU0.menu.usb.none=None
13602+
GenU0.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
13603+
GenU0.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
13604+
GenU0.menu.usb.CDC=CDC (no generic 'Serial')
13605+
GenU0.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
13606+
GenU0.menu.usb.HID=HID (keyboard and mouse)
13607+
GenU0.menu.usb.HID.build.enable_usb={build.usb_flags} -DUSBD_USE_HID_COMPOSITE
13608+
1349113609
GenU5.menu.usb.none=None
1349213610
GenU5.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
1349313611
GenU5.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
@@ -14029,6 +14147,27 @@ GenL5.menu.opt.ogstd.build.flags.optimize=-Og
1402914147
GenL5.menu.opt.o0std=No Optimization (-O0)
1403014148
GenL5.menu.opt.o0std.build.flags.optimize=-O0
1403114149

14150+
GenU0.menu.opt.osstd=Smallest (-Os default)
14151+
GenU0.menu.opt.osstd.build.flags.optimize=-Os
14152+
GenU0.menu.opt.oslto=Smallest (-Os) with LTO
14153+
GenU0.menu.opt.oslto.build.flags.optimize=-Os -flto
14154+
GenU0.menu.opt.o1std=Fast (-O1)
14155+
GenU0.menu.opt.o1std.build.flags.optimize=-O1
14156+
GenU0.menu.opt.o1lto=Fast (-O1) with LTO
14157+
GenU0.menu.opt.o1lto.build.flags.optimize=-O1 -flto
14158+
GenU0.menu.opt.o2std=Faster (-O2)
14159+
GenU0.menu.opt.o2std.build.flags.optimize=-O2
14160+
GenU0.menu.opt.o2lto=Faster (-O2) with LTO
14161+
GenU0.menu.opt.o2lto.build.flags.optimize=-O2 -flto
14162+
GenU0.menu.opt.o3std=Fastest (-O3)
14163+
GenU0.menu.opt.o3std.build.flags.optimize=-O3
14164+
GenU0.menu.opt.o3lto=Fastest (-O3) with LTO
14165+
GenU0.menu.opt.o3lto.build.flags.optimize=-O3 -flto
14166+
GenU0.menu.opt.ogstd=Debug (-Og)
14167+
GenU0.menu.opt.ogstd.build.flags.optimize=-Og
14168+
GenU0.menu.opt.o0std=No Optimization (-O0)
14169+
GenU0.menu.opt.o0std.build.flags.optimize=-O0
14170+
1403214171
GenU5.menu.opt.osstd=Smallest (-Os default)
1403314172
GenU5.menu.opt.osstd.build.flags.optimize=-Os
1403414173
GenU5.menu.opt.oslto=Smallest (-Os) with LTO
@@ -14495,6 +14634,14 @@ GenL5.menu.dbg.enable_log.build.flags.debug=
1449514634
GenL5.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
1449614635
GenL5.menu.dbg.enable_all.build.flags.debug=-g
1449714636

14637+
GenU0.menu.dbg.none=None
14638+
GenU0.menu.dbg.enable_sym=Symbols Enabled (-g)
14639+
GenU0.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
14640+
GenU0.menu.dbg.enable_log=Core logs Enabled
14641+
GenU0.menu.dbg.enable_log.build.flags.debug=
14642+
GenU0.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
14643+
GenU0.menu.dbg.enable_all.build.flags.debug=-g
14644+
1449814645
GenU5.menu.dbg.none=None
1449914646
GenU5.menu.dbg.enable_sym=Symbols Enabled (-g)
1450014647
GenU5.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
@@ -14826,6 +14973,16 @@ GenL5.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float
1482614973
GenL5.menu.rtlib.full=Newlib Standard
1482714974
GenL5.menu.rtlib.full.build.flags.ldspecs=
1482814975

14976+
GenU0.menu.rtlib.nano=Newlib Nano (default)
14977+
GenU0.menu.rtlib.nanofp=Newlib Nano + Float Printf
14978+
GenU0.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
14979+
GenU0.menu.rtlib.nanofs=Newlib Nano + Float Scanf
14980+
GenU0.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
14981+
GenU0.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
14982+
GenU0.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
14983+
GenU0.menu.rtlib.full=Newlib Standard
14984+
GenU0.menu.rtlib.full.build.flags.ldspecs=
14985+
1482914986
GenU5.menu.rtlib.nano=Newlib Nano (default)
1483014987
GenU5.menu.rtlib.nanofp=Newlib Nano + Float Printf
1483114988
GenU5.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float

variants/STM32U0xx/U073R(8-B-C)(I-T)_U083RC(I-T)/generic_clock.c

+51-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,57 @@
2323
*/
2424
WEAK void SystemClock_Config(void)
2525
{
26-
/* SystemClock_Config can be generated by STM32CubeMX */
27-
#warning "SystemClock_Config() is empty. Default clock at reset is used."
26+
RCC_OscInitTypeDef RCC_OscInitStruct = {};
27+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
28+
RCC_PeriphCLKInitTypeDef PeriphClkInit = {};
29+
30+
/** Configure the main internal regulator output voltage
31+
*/
32+
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
33+
34+
/** Initializes the RCC Oscillators according to the specified parameters
35+
* in the RCC_OscInitTypeDef structure.
36+
*/
37+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSI48;
38+
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
39+
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
40+
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
41+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
42+
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
43+
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
44+
RCC_OscInitStruct.PLL.PLLN = 7;
45+
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
46+
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
47+
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
48+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
49+
Error_Handler();
50+
}
51+
52+
/** Initializes the CPU, AHB and APB buses clocks
53+
*/
54+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
55+
| RCC_CLOCKTYPE_PCLK1;
56+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
57+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
58+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
59+
60+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
61+
Error_Handler();
62+
}
63+
64+
/** Initializes the peripherals clocks
65+
*/
66+
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1 | RCC_PERIPHCLK_LPUART2
67+
| RCC_PERIPHCLK_LPUART3 | RCC_PERIPHCLK_USB;
68+
PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_HSI;
69+
PeriphClkInit.Lpuart2ClockSelection = RCC_LPUART2CLKSOURCE_HSI;
70+
PeriphClkInit.Lpuart3ClockSelection = RCC_LPUART3CLKSOURCE_HSI;
71+
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
72+
73+
74+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
75+
Error_Handler();
76+
}
2877
}
2978

3079
#endif /* ARDUINO_GENERIC_* */

0 commit comments

Comments
 (0)