Skip to content

Commit 06893ba

Browse files
committed
variant: WL: add generic support
Signed-off-by: Frederic Pillon <[email protected]>
1 parent 45133f7 commit 06893ba

File tree

4 files changed

+351
-2
lines changed

4 files changed

+351
-2
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,14 @@ User can add a STM32 based board following this [wiki](https://github.com/stm32d
407407
| :green_heart: | STM32WB55CC<br>STM32WB55CE<br>STM32WB55CG | Generic Board | *2.0.0* | |
408408
| :green_heart: | STM32WB55RC<br>STM32WB55RE<br>STM32WB55RG | Generic Board | *2.0.0* | |
409409

410+
### Generic STM32WL boards
411+
412+
| Status | Device(s) | Name | Release | Notes |
413+
| :----: | :-------: | ---- | :-----: | :---- |
414+
| :yellow_heart: | STM32WL55JC<br>STM32WL55JC | Generic Board | **2.1.0** | |
415+
| :yellow_heart: | STM32WLE4J8<br>STM32WLE4JB<br>STM32WLE4JC | Generic Board | **2.1.0** | |
416+
| :yellow_heart: | STM32WLE5J8<br>STM32WLE5JB<br>STM32WLE5JC | Generic Board | **2.1.0** | |
417+
410418
### 3D printer boards
411419

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

boards.txt

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4975,6 +4975,98 @@ GenWB.menu.upload_method.dfuMethod.upload.protocol=2
49754975
GenWB.menu.upload_method.dfuMethod.upload.options=-g
49764976
GenWB.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
49774977

4978+
################################################################################
4979+
# Generic WL
4980+
GenWL.name=Generic STM32WL series
4981+
4982+
GenWL.build.core=arduino
4983+
GenWL.build.board=GenWL
4984+
GenWL.build.extra_flags=-D{build.product_line} -DUSE_CM4_STARTUP_FILE {build.xSerial}
4985+
GenWL.build.mcu=cortex-m4
4986+
#GenWL.build.flags.fp=-mfpu=fpv4-sp-d16 -mfloat-abi=hard
4987+
GenWL.build.series=STM32WLxx
4988+
GenWL.build.cmsis_lib_gcc=arm_cortexM4lf_math
4989+
4990+
# Generic WL54JCIx
4991+
GenWL.menu.pnum.GENERIC_WL54JCIX=Generic WL54JCIx
4992+
GenWL.menu.pnum.GENERIC_WL54JCIX.upload.maximum_size=262144
4993+
GenWL.menu.pnum.GENERIC_WL54JCIX.upload.maximum_data_size=65536
4994+
GenWL.menu.pnum.GENERIC_WL54JCIX.build.board=GENERIC_WL54JCIX
4995+
GenWL.menu.pnum.GENERIC_WL54JCIX.build.product_line=STM32WL54xx
4996+
GenWL.menu.pnum.GENERIC_WL54JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
4997+
4998+
# Generic WL55JCIx
4999+
GenWL.menu.pnum.GENERIC_WL55JCIX=Generic WL55JCIx
5000+
GenWL.menu.pnum.GENERIC_WL55JCIX.upload.maximum_size=262144
5001+
GenWL.menu.pnum.GENERIC_WL55JCIX.upload.maximum_data_size=65536
5002+
GenWL.menu.pnum.GENERIC_WL55JCIX.build.board=GENERIC_WL55JCIX
5003+
GenWL.menu.pnum.GENERIC_WL55JCIX.build.product_line=STM32WL55xx
5004+
GenWL.menu.pnum.GENERIC_WL55JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5005+
5006+
# Generic WLE4J8Ix
5007+
GenWL.menu.pnum.GENERIC_WLE4J8IX=Generic WLE4J8Ix
5008+
GenWL.menu.pnum.GENERIC_WLE4J8IX.upload.maximum_size=65536
5009+
GenWL.menu.pnum.GENERIC_WLE4J8IX.upload.maximum_data_size=20480
5010+
GenWL.menu.pnum.GENERIC_WLE4J8IX.build.board=GENERIC_WLE4J8IX
5011+
GenWL.menu.pnum.GENERIC_WLE4J8IX.build.product_line=STM32WLE4xx
5012+
GenWL.menu.pnum.GENERIC_WLE4J8IX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5013+
5014+
# Generic WLE4JBIx
5015+
GenWL.menu.pnum.GENERIC_WLE4JBIX=Generic WLE4JBIx
5016+
GenWL.menu.pnum.GENERIC_WLE4JBIX.upload.maximum_size=131072
5017+
GenWL.menu.pnum.GENERIC_WLE4JBIX.upload.maximum_data_size=49152
5018+
GenWL.menu.pnum.GENERIC_WLE4JBIX.build.board=GENERIC_WLE4JBIX
5019+
GenWL.menu.pnum.GENERIC_WLE4JBIX.build.product_line=STM32WLE4xx
5020+
GenWL.menu.pnum.GENERIC_WLE4JBIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5021+
5022+
# Generic WLE4JCIx
5023+
GenWL.menu.pnum.GENERIC_WLE4JCIX=Generic WLE4JCIx
5024+
GenWL.menu.pnum.GENERIC_WLE4JCIX.upload.maximum_size=262144
5025+
GenWL.menu.pnum.GENERIC_WLE4JCIX.upload.maximum_data_size=65536
5026+
GenWL.menu.pnum.GENERIC_WLE4JCIX.build.board=GENERIC_WLE4JCIX
5027+
GenWL.menu.pnum.GENERIC_WLE4JCIX.build.product_line=STM32WLE4xx
5028+
GenWL.menu.pnum.GENERIC_WLE4JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5029+
5030+
# Generic WLE5J8Ix
5031+
GenWL.menu.pnum.GENERIC_WLE5J8IX=Generic WLE5J8Ix
5032+
GenWL.menu.pnum.GENERIC_WLE5J8IX.upload.maximum_size=65536
5033+
GenWL.menu.pnum.GENERIC_WLE5J8IX.upload.maximum_data_size=20480
5034+
GenWL.menu.pnum.GENERIC_WLE5J8IX.build.board=GENERIC_WLE5J8IX
5035+
GenWL.menu.pnum.GENERIC_WLE5J8IX.build.product_line=STM32WLE5xx
5036+
GenWL.menu.pnum.GENERIC_WLE5J8IX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5037+
5038+
# Generic WLE5JBIx
5039+
GenWL.menu.pnum.GENERIC_WLE5JBIX=Generic WLE5JBIx
5040+
GenWL.menu.pnum.GENERIC_WLE5JBIX.upload.maximum_size=131072
5041+
GenWL.menu.pnum.GENERIC_WLE5JBIX.upload.maximum_data_size=49152
5042+
GenWL.menu.pnum.GENERIC_WLE5JBIX.build.board=GENERIC_WLE5JBIX
5043+
GenWL.menu.pnum.GENERIC_WLE5JBIX.build.product_line=STM32WLE5xx
5044+
GenWL.menu.pnum.GENERIC_WLE5JBIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5045+
5046+
# Generic WLE5JCIx
5047+
GenWL.menu.pnum.GENERIC_WLE5JCIX=Generic WLE5JCIx
5048+
GenWL.menu.pnum.GENERIC_WLE5JCIX.upload.maximum_size=262144
5049+
GenWL.menu.pnum.GENERIC_WLE5JCIX.upload.maximum_data_size=65536
5050+
GenWL.menu.pnum.GENERIC_WLE5JCIX.build.board=GENERIC_WLE5JCIX
5051+
GenWL.menu.pnum.GENERIC_WLE5JCIX.build.product_line=STM32WLE5xx
5052+
GenWL.menu.pnum.GENERIC_WLE5JCIX.build.variant=STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I
5053+
5054+
# Upload menu
5055+
GenWL.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
5056+
GenWL.menu.upload_method.swdMethod.upload.protocol=0
5057+
GenWL.menu.upload_method.swdMethod.upload.options=-g
5058+
GenWL.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
5059+
5060+
GenWL.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
5061+
GenWL.menu.upload_method.serialMethod.upload.protocol=1
5062+
GenWL.menu.upload_method.serialMethod.upload.options={serial.port.file} -s
5063+
GenWL.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
5064+
5065+
GenWL.menu.upload_method.dfuMethod=STM32CubeProgrammer (DFU)
5066+
GenWL.menu.upload_method.dfuMethod.upload.protocol=2
5067+
GenWL.menu.upload_method.dfuMethod.upload.options=-g
5068+
GenWL.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
5069+
49785070
################################################################################
49795071
# Electronic Speed Controller boards
49805072

@@ -5670,6 +5762,12 @@ GenWB.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
56705762
GenWB.menu.xserial.disabled=Disabled (no Serial support)
56715763
GenWB.menu.xserial.disabled.build.xSerial=
56725764

5765+
GenWL.menu.xserial.generic=Enabled (generic 'Serial')
5766+
GenWL.menu.xserial.none=Enabled (no generic 'Serial')
5767+
GenWL.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
5768+
GenWL.menu.xserial.disabled=Disabled (no Serial support)
5769+
GenWL.menu.xserial.disabled.build.xSerial=
5770+
56735771
ESC_board.menu.xserial.generic=Enabled (generic 'Serial')
56745772
ESC_board.menu.xserial.none=Enabled (no generic 'Serial')
56755773
ESC_board.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -6376,6 +6474,25 @@ GenWB.menu.opt.o3lto.build.flags.optimize=-O3 -flto
63766474
GenWB.menu.opt.ogstd=Debug (-g)
63776475
GenWB.menu.opt.ogstd.build.flags.optimize=-g -Og
63786476

6477+
GenWL.menu.opt.osstd=Smallest (-Os default)
6478+
GenWL.menu.opt.osstd.build.flags.optimize=-Os
6479+
GenWL.menu.opt.oslto=Smallest (-Os) with LTO
6480+
GenWL.menu.opt.oslto.build.flags.optimize=-Os -flto
6481+
GenWL.menu.opt.o1std=Fast (-O1)
6482+
GenWL.menu.opt.o1std.build.flags.optimize=-O1
6483+
GenWL.menu.opt.o1lto=Fast (-O1) with LTO
6484+
GenWL.menu.opt.o1lto.build.flags.optimize=-O1 -flto
6485+
GenWL.menu.opt.o2std=Faster (-O2)
6486+
GenWL.menu.opt.o2std.build.flags.optimize=-O2
6487+
GenWL.menu.opt.o2lto=Faster (-O2) with LTO
6488+
GenWL.menu.opt.o2lto.build.flags.optimize=-O2 -flto
6489+
GenWL.menu.opt.o3std=Fastest (-O3)
6490+
GenWL.menu.opt.o3std.build.flags.optimize=-O3
6491+
GenWL.menu.opt.o3lto=Fastest (-O3) with LTO
6492+
GenWL.menu.opt.o3lto.build.flags.optimize=-O3 -flto
6493+
GenWL.menu.opt.ogstd=Debug (-g)
6494+
GenWL.menu.opt.ogstd.build.flags.optimize=-g -Og
6495+
63796496
ESC_board.menu.opt.osstd=Smallest (-Os default)
63806497
ESC_board.menu.opt.oslto=Smallest (-Os) with LTO
63816498
ESC_board.menu.opt.oslto.build.flags.optimize=-Os -flto
@@ -6704,6 +6821,16 @@ GenWB.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float
67046821
GenWB.menu.rtlib.full=Newlib Standard
67056822
GenWB.menu.rtlib.full.build.flags.ldspecs=
67066823

6824+
GenWL.menu.rtlib.nano=Newlib Nano (default)
6825+
GenWL.menu.rtlib.nanofp=Newlib Nano + Float Printf
6826+
GenWL.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
6827+
GenWL.menu.rtlib.nanofs=Newlib Nano + Float Scanf
6828+
GenWL.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
6829+
GenWL.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
6830+
GenWL.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
6831+
GenWL.menu.rtlib.full=Newlib Standard
6832+
GenWL.menu.rtlib.full.build.flags.ldspecs=
6833+
67076834
ESC_board.menu.rtlib.nano=Newlib Nano (default)
67086835
ESC_board.menu.rtlib.nanofp=Newlib Nano + Float Printf
67096836
ESC_board.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float

variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/generic_clock.c

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,36 @@
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+
29+
/** Configure the main internal regulator output voltage
30+
*/
31+
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
32+
/** Initializes the CPU, AHB and APB busses clocks
33+
*/
34+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
35+
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
36+
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
37+
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
38+
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
39+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
40+
Error_Handler();
41+
}
42+
/** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
43+
*/
44+
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3 | RCC_CLOCKTYPE_HCLK
45+
| RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1
46+
| RCC_CLOCKTYPE_PCLK2;
47+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
48+
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
49+
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
50+
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
51+
RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
52+
53+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
54+
Error_Handler();
55+
}
2856
}
2957

3058
#endif /* ARDUINO_GENERIC_* */
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
/*
2+
******************************************************************************
3+
**
4+
** File : LinkerScript.ld
5+
**
6+
** Author : STM32CubeIDE
7+
**
8+
** Abstract : Linker script for STM32WL55xC Device
9+
** 256Kbytes FLASH
10+
** 64Kbytes RAM
11+
**
12+
** Set heap size, stack size and stack location according
13+
** to application requirements.
14+
**
15+
** Set memory bank area and size if external memory is used.
16+
**
17+
** Target : STMicroelectronics STM32
18+
**
19+
** Distribution: The file is distributed as is without any warranty
20+
** of any kind.
21+
**
22+
*****************************************************************************
23+
** @attention
24+
**
25+
** <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
26+
** All rights reserved.</center></h2>
27+
**
28+
** This software component is licensed by ST under BSD 3-Clause license,
29+
** the "License"; You may not use this file except in compliance with the
30+
** License. You may obtain a copy of the License at:
31+
** opensource.org/licenses/BSD-3-Clause
32+
**
33+
*****************************************************************************
34+
*/
35+
36+
/* Entry Point */
37+
ENTRY(Reset_Handler)
38+
39+
/* Highest address of the user mode stack */
40+
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
41+
42+
_Min_Heap_Size = 0x200 ; /* required amount of heap */
43+
_Min_Stack_Size = 0x400 ; /* required amount of stack */
44+
45+
/* Memories definition */
46+
MEMORY
47+
{
48+
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE
49+
FLASH (rx) : ORIGIN = 0x08000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET
50+
}
51+
52+
/* Sections */
53+
SECTIONS
54+
{
55+
/* The startup code into "FLASH" Rom type memory */
56+
.isr_vector :
57+
{
58+
. = ALIGN(4);
59+
KEEP(*(.isr_vector)) /* Startup code */
60+
. = ALIGN(4);
61+
} >FLASH
62+
63+
/* The program code and other data into "FLASH" Rom type memory */
64+
.text :
65+
{
66+
. = ALIGN(4);
67+
*(.text) /* .text sections (code) */
68+
*(.text*) /* .text* sections (code) */
69+
*(.glue_7) /* glue arm to thumb code */
70+
*(.glue_7t) /* glue thumb to arm code */
71+
*(.eh_frame)
72+
73+
KEEP (*(.init))
74+
KEEP (*(.fini))
75+
76+
. = ALIGN(4);
77+
_etext = .; /* define a global symbols at end of code */
78+
} >FLASH
79+
80+
/* Constant data into "FLASH" Rom type memory */
81+
.rodata :
82+
{
83+
. = ALIGN(4);
84+
*(.rodata) /* .rodata sections (constants, strings, etc.) */
85+
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
86+
. = ALIGN(4);
87+
} >FLASH
88+
89+
.ARM.extab : {
90+
. = ALIGN(4);
91+
*(.ARM.extab* .gnu.linkonce.armextab.*)
92+
. = ALIGN(4);
93+
} >FLASH
94+
95+
.ARM : {
96+
. = ALIGN(4);
97+
__exidx_start = .;
98+
*(.ARM.exidx*)
99+
__exidx_end = .;
100+
. = ALIGN(4);
101+
} >FLASH
102+
103+
.preinit_array :
104+
{
105+
. = ALIGN(4);
106+
PROVIDE_HIDDEN (__preinit_array_start = .);
107+
KEEP (*(.preinit_array*))
108+
PROVIDE_HIDDEN (__preinit_array_end = .);
109+
. = ALIGN(4);
110+
} >FLASH
111+
112+
.init_array :
113+
{
114+
. = ALIGN(4);
115+
PROVIDE_HIDDEN (__init_array_start = .);
116+
KEEP (*(SORT(.init_array.*)))
117+
KEEP (*(.init_array*))
118+
PROVIDE_HIDDEN (__init_array_end = .);
119+
. = ALIGN(4);
120+
} >FLASH
121+
122+
.fini_array :
123+
{
124+
. = ALIGN(4);
125+
PROVIDE_HIDDEN (__fini_array_start = .);
126+
KEEP (*(SORT(.fini_array.*)))
127+
KEEP (*(.fini_array*))
128+
PROVIDE_HIDDEN (__fini_array_end = .);
129+
. = ALIGN(4);
130+
} >FLASH
131+
132+
/* Used by the startup to initialize data */
133+
_sidata = LOADADDR(.data);
134+
135+
/* Initialized data sections into "RAM" Ram type memory */
136+
.data :
137+
{
138+
. = ALIGN(4);
139+
_sdata = .; /* create a global symbol at data start */
140+
*(.data) /* .data sections */
141+
*(.data*) /* .data* sections */
142+
*(.RamFunc) /* .RamFunc sections */
143+
*(.RamFunc*) /* .RamFunc* sections */
144+
145+
. = ALIGN(4);
146+
_edata = .; /* define a global symbol at data end */
147+
148+
} >RAM AT> FLASH
149+
150+
/* Uninitialized data section into "RAM" Ram type memory */
151+
. = ALIGN(4);
152+
.bss :
153+
{
154+
/* This is used by the startup in order to initialize the .bss section */
155+
_sbss = .; /* define a global symbol at bss start */
156+
__bss_start__ = _sbss;
157+
*(.bss)
158+
*(.bss*)
159+
*(COMMON)
160+
161+
. = ALIGN(4);
162+
_ebss = .; /* define a global symbol at bss end */
163+
__bss_end__ = _ebss;
164+
} >RAM
165+
166+
/* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
167+
._user_heap_stack :
168+
{
169+
. = ALIGN(8);
170+
PROVIDE ( end = . );
171+
PROVIDE ( _end = . );
172+
. = . + _Min_Heap_Size;
173+
. = . + _Min_Stack_Size;
174+
. = ALIGN(8);
175+
} >RAM
176+
177+
/* Remove information from the compiler libraries */
178+
/DISCARD/ :
179+
{
180+
libc.a ( * )
181+
libm.a ( * )
182+
libgcc.a ( * )
183+
}
184+
185+
.ARM.attributes 0 : { *(.ARM.attributes) }
186+
}

0 commit comments

Comments
 (0)