Skip to content

Commit 27c824c

Browse files
committed
variant(wl3): add generic STM32WL33Cx
Signed-off-by: Frederic Pillon <[email protected]>
1 parent 34296e6 commit 27c824c

File tree

3 files changed

+343
-2
lines changed

3 files changed

+343
-2
lines changed

boards.txt

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13390,6 +13390,90 @@ GenWBA.menu.upload_method.OpenOCDDapLink=OpenOCD DapLink (SWD)
1339013390
GenWBA.menu.upload_method.OpenOCDDapLink.upload.protocol=cmsis-dap
1339113391
GenWBA.menu.upload_method.OpenOCDDapLink.upload.tool=openocd_upload
1339213392

13393+
################################################################################
13394+
# Generic WL3
13395+
GenWL3.name=Generic STM32WL3 series
13396+
13397+
GenWL3.build.core=arduino
13398+
GenWL3.build.board=GenWL3
13399+
GenWL3.build.st_extra_flags=-D{build.product_line} {build.xSerial} -D__CORTEX_SC=0
13400+
GenWL3.build.mcu=cortex-m0plus
13401+
GenWL3.build.series=STM32WL3x
13402+
GenWL3.build.flash_offset=0x0
13403+
GenWL3.upload.maximum_size=0
13404+
GenWL3.upload.maximum_data_size=0
13405+
GenWL3.openocd.target=stm32wl3x
13406+
13407+
# Generic WL33C8Vx
13408+
GenWL3.menu.pnum.GENERIC_WL33C8VX=Generic WL33C8Vx
13409+
GenWL3.menu.pnum.GENERIC_WL33C8VX.upload.maximum_size=65536
13410+
GenWL3.menu.pnum.GENERIC_WL33C8VX.upload.maximum_data_size=16384
13411+
GenWL3.menu.pnum.GENERIC_WL33C8VX.build.board=GENERIC_WL33C8VX
13412+
GenWL3.menu.pnum.GENERIC_WL33C8VX.build.product_line=STM32WL3xx
13413+
GenWL3.menu.pnum.GENERIC_WL33C8VX.build.variant=STM32WL3x/WL33C(8-B-C)Vx(X)
13414+
GenWL3.menu.pnum.GENERIC_WL33C8VX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32WL3x/STM32WL33.svd
13415+
13416+
# Generic WL33C8VxX
13417+
GenWL3.menu.pnum.GENERIC_WL33C8VXX=Generic WL33C8VxX
13418+
GenWL3.menu.pnum.GENERIC_WL33C8VXX.upload.maximum_size=65536
13419+
GenWL3.menu.pnum.GENERIC_WL33C8VXX.upload.maximum_data_size=16384
13420+
GenWL3.menu.pnum.GENERIC_WL33C8VXX.build.board=GENERIC_WL33C8VXX
13421+
GenWL3.menu.pnum.GENERIC_WL33C8VXX.build.product_line=STM32WL3xx
13422+
GenWL3.menu.pnum.GENERIC_WL33C8VXX.build.variant=STM32WL3x/WL33C(8-B-C)Vx(X)
13423+
GenWL3.menu.pnum.GENERIC_WL33C8VXX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32WL3x/STM32WL33.svd
13424+
13425+
# Generic WL33CBVx
13426+
GenWL3.menu.pnum.GENERIC_WL33CBVX=Generic WL33CBVx
13427+
GenWL3.menu.pnum.GENERIC_WL33CBVX.upload.maximum_size=131072
13428+
GenWL3.menu.pnum.GENERIC_WL33CBVX.upload.maximum_data_size=32768
13429+
GenWL3.menu.pnum.GENERIC_WL33CBVX.build.board=GENERIC_WL33CBVX
13430+
GenWL3.menu.pnum.GENERIC_WL33CBVX.build.product_line=STM32WL3xx
13431+
GenWL3.menu.pnum.GENERIC_WL33CBVX.build.variant=STM32WL3x/WL33C(8-B-C)Vx(X)
13432+
GenWL3.menu.pnum.GENERIC_WL33CBVX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32WL3x/STM32WL33.svd
13433+
13434+
# Generic WL33CBVxX
13435+
GenWL3.menu.pnum.GENERIC_WL33CBVXX=Generic WL33CBVxX
13436+
GenWL3.menu.pnum.GENERIC_WL33CBVXX.upload.maximum_size=131072
13437+
GenWL3.menu.pnum.GENERIC_WL33CBVXX.upload.maximum_data_size=32768
13438+
GenWL3.menu.pnum.GENERIC_WL33CBVXX.build.board=GENERIC_WL33CBVXX
13439+
GenWL3.menu.pnum.GENERIC_WL33CBVXX.build.product_line=STM32WL3xx
13440+
GenWL3.menu.pnum.GENERIC_WL33CBVXX.build.variant=STM32WL3x/WL33C(8-B-C)Vx(X)
13441+
GenWL3.menu.pnum.GENERIC_WL33CBVXX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32WL3x/STM32WL33.svd
13442+
13443+
# Generic WL33CCVx
13444+
GenWL3.menu.pnum.GENERIC_WL33CCVX=Generic WL33CCVx
13445+
GenWL3.menu.pnum.GENERIC_WL33CCVX.upload.maximum_size=262144
13446+
GenWL3.menu.pnum.GENERIC_WL33CCVX.upload.maximum_data_size=32768
13447+
GenWL3.menu.pnum.GENERIC_WL33CCVX.build.board=GENERIC_WL33CCVX
13448+
GenWL3.menu.pnum.GENERIC_WL33CCVX.build.product_line=STM32WL3xx
13449+
GenWL3.menu.pnum.GENERIC_WL33CCVX.build.variant=STM32WL3x/WL33C(8-B-C)Vx(X)
13450+
GenWL3.menu.pnum.GENERIC_WL33CCVX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32WL3x/STM32WL33.svd
13451+
13452+
# Generic WL33CCVxX
13453+
GenWL3.menu.pnum.GENERIC_WL33CCVXX=Generic WL33CCVxX
13454+
GenWL3.menu.pnum.GENERIC_WL33CCVXX.upload.maximum_size=262144
13455+
GenWL3.menu.pnum.GENERIC_WL33CCVXX.upload.maximum_data_size=32768
13456+
GenWL3.menu.pnum.GENERIC_WL33CCVXX.build.board=GENERIC_WL33CCVXX
13457+
GenWL3.menu.pnum.GENERIC_WL33CCVXX.build.product_line=STM32WL3xx
13458+
GenWL3.menu.pnum.GENERIC_WL33CCVXX.build.variant=STM32WL3x/WL33C(8-B-C)Vx(X)
13459+
GenWL3.menu.pnum.GENERIC_WL33CCVXX.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32WL3x/STM32WL33.svd
13460+
13461+
# Upload menu
13462+
GenWL3.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
13463+
GenWL3.menu.upload_method.swdMethod.upload.protocol=swd
13464+
GenWL3.menu.upload_method.swdMethod.upload.options=-a {upload.address}
13465+
GenWL3.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
13466+
13467+
GenWL3.menu.upload_method.jlinkMethod=STM32CubeProgrammer (J-Link)
13468+
GenWL3.menu.upload_method.jlinkMethod.upload.protocol=jlink
13469+
GenWL3.menu.upload_method.jlinkMethod.upload.options=
13470+
GenWL3.menu.upload_method.jlinkMethod.upload.tool=stm32CubeProg
13471+
13472+
GenWL3.menu.upload_method.serialMethod=STM32CubeProgrammer (Serial)
13473+
GenWL3.menu.upload_method.serialMethod.upload.protocol=serial
13474+
GenWL3.menu.upload_method.serialMethod.upload.options=-c {serial.port.file}
13475+
GenWL3.menu.upload_method.serialMethod.upload.tool=stm32CubeProg
13476+
1339313477
################################################################################
1339413478
# Generic WL
1339513479
GenWL.name=Generic STM32WL series
@@ -14911,6 +14995,12 @@ GenWBA.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
1491114995
GenWBA.menu.xserial.disabled=Disabled (no Serial support)
1491214996
GenWBA.menu.xserial.disabled.build.xSerial=
1491314997

14998+
GenWL3.menu.xserial.generic=Enabled (generic 'Serial')
14999+
GenWL3.menu.xserial.none=Enabled (no generic 'Serial')
15000+
GenWL3.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
15001+
GenWL3.menu.xserial.disabled=Disabled (no Serial support)
15002+
GenWL3.menu.xserial.disabled.build.xSerial=
15003+
1491415004
GenWL.menu.xserial.generic=Enabled (generic 'Serial')
1491515005
GenWL.menu.xserial.none=Enabled (no generic 'Serial')
1491615006
GenWL.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
@@ -15905,6 +15995,26 @@ GenWBA.menu.opt.ogstd.build.flags.optimize=-Og
1590515995
GenWBA.menu.opt.o0std=No Optimization (-O0)
1590615996
GenWBA.menu.opt.o0std.build.flags.optimize=-O0
1590715997

15998+
GenWL3.menu.opt.osstd=Smallest (-Os default)
15999+
GenWL3.menu.opt.oslto=Smallest (-Os) with LTO
16000+
GenWL3.menu.opt.oslto.build.flags.optimize=-Os -flto
16001+
GenWL3.menu.opt.o1std=Fast (-O1)
16002+
GenWL3.menu.opt.o1std.build.flags.optimize=-O1
16003+
GenWL3.menu.opt.o1lto=Fast (-O1) with LTO
16004+
GenWL3.menu.opt.o1lto.build.flags.optimize=-O1 -flto
16005+
GenWL3.menu.opt.o2std=Faster (-O2)
16006+
GenWL3.menu.opt.o2std.build.flags.optimize=-O2
16007+
GenWL3.menu.opt.o2lto=Faster (-O2) with LTO
16008+
GenWL3.menu.opt.o2lto.build.flags.optimize=-O2 -flto
16009+
GenWL3.menu.opt.o3std=Fastest (-O3)
16010+
GenWL3.menu.opt.o3std.build.flags.optimize=-O3
16011+
GenWL3.menu.opt.o3lto=Fastest (-O3) with LTO
16012+
GenWL3.menu.opt.o3lto.build.flags.optimize=-O3 -flto
16013+
GenWL3.menu.opt.ogstd=Debug (-Og)
16014+
GenWL3.menu.opt.ogstd.build.flags.optimize=-Og
16015+
GenWL3.menu.opt.o0std=No Optimization (-O0)
16016+
GenWL3.menu.opt.o0std.build.flags.optimize=-O0
16017+
1590816018
GenWL.menu.opt.osstd=Smallest (-Os default)
1590916019
GenWL.menu.opt.oslto=Smallest (-Os) with LTO
1591016020
GenWL.menu.opt.oslto.build.flags.optimize=-Os -flto
@@ -16378,6 +16488,14 @@ GenWBA.menu.dbg.enable_log.build.flags.debug=
1637816488
GenWBA.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
1637916489
GenWBA.menu.dbg.enable_all.build.flags.debug=-g
1638016490

16491+
GenWL3.menu.dbg.none=None
16492+
GenWL3.menu.dbg.enable_sym=Symbols Enabled (-g)
16493+
GenWL3.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
16494+
GenWL3.menu.dbg.enable_log=Core logs Enabled
16495+
GenWL3.menu.dbg.enable_log.build.flags.debug=
16496+
GenWL3.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
16497+
GenWL3.menu.dbg.enable_all.build.flags.debug=-g
16498+
1638116499
GenWL.menu.dbg.none=None
1638216500
GenWL.menu.dbg.enable_sym=Symbols Enabled (-g)
1638316501
GenWL.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
@@ -16753,6 +16871,16 @@ GenWBA.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_floa
1675316871
GenWBA.menu.rtlib.full=Newlib Standard
1675416872
GenWBA.menu.rtlib.full.build.flags.ldspecs=
1675516873

16874+
GenWL3.menu.rtlib.nano=Newlib Nano (default)
16875+
GenWL3.menu.rtlib.nanofp=Newlib Nano + Float Printf
16876+
GenWL3.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
16877+
GenWL3.menu.rtlib.nanofs=Newlib Nano + Float Scanf
16878+
GenWL3.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
16879+
GenWL3.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
16880+
GenWL3.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
16881+
GenWL3.menu.rtlib.full=Newlib Standard
16882+
GenWL3.menu.rtlib.full.build.flags.ldspecs=
16883+
1675616884
GenWL.menu.rtlib.nano=Newlib Nano (default)
1675716885
GenWL.menu.rtlib.nanofp=Newlib Nano + Float Printf
1675816886
GenWL.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float

variants/STM32WL3x/WL33C(8-B-C)Vx(X)/generic_clock.c

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,35 @@
2222
*/
2323
WEAK void SystemClock_Config(void)
2424
{
25-
/* SystemClock_Config can be generated by STM32CubeMX */
26-
#warning "SystemClock_Config() is empty. Default clock at reset is used."
25+
RCC_OscInitTypeDef RCC_OscInitStruct = {};
26+
RCC_ClkInitTypeDef RCC_ClkInitStruct = {};
27+
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {};
28+
29+
/** Initializes the RCC Oscillators according to the specified parameters
30+
* in the RCC_OscInitTypeDef structure.
31+
*/
32+
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
33+
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
34+
Error_Handler();
35+
}
36+
37+
/** Configure the SYSCLKSource and SYSCLKDivider
38+
*/
39+
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
40+
RCC_ClkInitStruct.SYSCLKDivider = RCC_RC64MPLL_DIV1;
41+
42+
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_WAIT_STATES_1) != HAL_OK) {
43+
Error_Handler();
44+
}
45+
/** Initializes the peripherals clock
46+
*/
47+
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS;
48+
PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLK_DIV2;
49+
PeriphClkInitStruct.KRMRateMultiplier = 2;
50+
51+
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) {
52+
Error_Handler();
53+
}
2754
}
2855

2956
#endif /* ARDUINO_GENERIC_* */
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
/*******************************************************************************
2+
* STM32WL3x generic linker file for GCC
3+
* Main linker variables to control it are:
4+
*
5+
* MEMORY_FLASH_APP_SIZE: define the size of the application in case not all the flash is needed.
6+
* Default value is: 256KB
7+
*
8+
* MEMORY_FLASH_APP_OFFSET: define the offset of the application.
9+
* Default value is: 0 offset
10+
*
11+
* MEMORY_RAM_APP_OFFSET: define the offset in RAM from which variables can be
12+
* allocated.
13+
*
14+
*******************************************************************************/
15+
16+
/*******************************************************************************
17+
* Memory Definitions
18+
*******************************************************************************/
19+
/*
20+
STM32WL3x memory map
21+
+-----------------------+ 0x20007FFF
22+
| RAM (32K) |
23+
+-----------------------+ 0x20000000
24+
| |
25+
| |
26+
+-----------------------+ 0x1007FFFF
27+
| |
28+
| FLASH (256K) |
29+
+-----------------------+ 0x10040000
30+
| |
31+
+-----------------------| 0x100017FF
32+
| ROM (6K) |
33+
+-----------------------+ 0x10000000
34+
*/
35+
36+
37+
_MEMORY_RAM_BEGIN_ = 0x20000000;
38+
_MEMORY_RAM_SIZE_ = LD_MAX_DATA_SIZE;
39+
_MEMORY_RAM_END_ = 0x20007FFF;
40+
41+
_MEMORY_FLASH_BEGIN_ = 0x10040000;
42+
_MEMORY_FLASH_SIZE_ = LD_MAX_SIZE;
43+
_MEMORY_FLASH_END_ = 0x1007FFFF;
44+
45+
_MEMORY_ROM_BEGIN_ = 0x10000000;
46+
_MEMORY_ROM_SIZE_ = 0x01800;
47+
_MEMORY_ROM_END_ = 0x100017FF;
48+
49+
50+
MEMORY_FLASH_APP_OFFSET = DEFINED(MEMORY_FLASH_APP_OFFSET) ? (MEMORY_FLASH_APP_OFFSET) : (LD_FLASH_OFFSET) ;
51+
MEMORY_FLASH_APP_SIZE = DEFINED(MEMORY_FLASH_APP_SIZE) ? (MEMORY_FLASH_APP_SIZE) : (_MEMORY_FLASH_SIZE_ - MEMORY_FLASH_APP_OFFSET);
52+
RESET_MANAGER_SIZE = DEFINED(RESET_MANAGER_SIZE) ? (RESET_MANAGER_SIZE) : (0x800) ;
53+
54+
55+
/* Entry Point */
56+
ENTRY(Reset_Handler)
57+
58+
59+
/* Generate a link error if heap and stack don't fit into RAM */
60+
_Min_Heap_Size = 0x0; /* required amount of heap */
61+
_Min_Stack_Size = 0xC00; /* required amount of stack */
62+
63+
/* Specify the memory areas */
64+
MEMORY
65+
{
66+
RAM (xrw) : ORIGIN = _MEMORY_RAM_BEGIN_, LENGTH = _MEMORY_RAM_SIZE_
67+
REGION_FLASH_BOOTLOADER (rx) : ORIGIN = _MEMORY_FLASH_BEGIN_, LENGTH = MEMORY_FLASH_APP_OFFSET
68+
FLASH (rx) : ORIGIN = _MEMORY_FLASH_BEGIN_ + MEMORY_FLASH_APP_OFFSET, LENGTH = MEMORY_FLASH_APP_SIZE
69+
REGION_ROM (rx) : ORIGIN = _MEMORY_ROM_BEGIN_, LENGTH = _MEMORY_ROM_SIZE_
70+
}
71+
72+
/* Define output sections */
73+
SECTIONS
74+
{
75+
76+
/* The startup code goes first into FLASH */
77+
.intvec (ORIGIN(FLASH)) :
78+
{
79+
. = ALIGN(4);
80+
KEEP(*(.intvec)) /* Startup code */
81+
. = ALIGN(4);
82+
} >FLASH
83+
84+
85+
/* The program code and other data goes into FLASH */
86+
.text :
87+
{
88+
. = ALIGN(4);
89+
90+
KEEP(*(.cmd_call_table))
91+
*(.text) /* .text sections (code) */
92+
*(.text*) /* .text* sections (code) */
93+
*(i.*) /* i.* sections (code) */
94+
*(.rodata) /* .rodata sections (constants, strings, etc.) */
95+
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
96+
*(.constdata)
97+
*(.glue_7) /* glue arm to thumb code */
98+
*(.glue_7t) /* glue thumb to arm code */
99+
100+
. = ALIGN(4);
101+
_etext = .;
102+
} >FLASH
103+
104+
/* used by the startup to initialize data */
105+
_sidata = LOADADDR(.data);
106+
107+
/* RAM preamble, uninitialized */
108+
.ram_preamble 0x20000004 (NOLOAD) :
109+
{
110+
KEEP(*(.ram_vr))
111+
} >RAM AT> FLASH
112+
113+
/* RAM preamble, unininitialized */
114+
.ram_preamble_2 0x20000034 (NOLOAD) :
115+
{
116+
KEEP(*(.crash_info_ram_vr))
117+
} >RAM
118+
/* Uninitialized data section */
119+
.bss DEFINED(MEMORY_RAM_APP_OFFSET) ? (ORIGIN(RAM) + MEMORY_RAM_APP_OFFSET) : . :
120+
{
121+
. = ALIGN(4);
122+
_sbss = .; /* define a global symbol at bss start */
123+
*(.bss)
124+
*(.bss*)
125+
*(COMMON)
126+
. = ALIGN(4);
127+
_ebss = .; /* define a global symbol at bss end */
128+
} >RAM
129+
130+
/* Initialized data sections goes into RAM, load LMA copy after code */
131+
.data :
132+
{
133+
. = ALIGN(4);
134+
_sdata = .; /* create a global symbol at data start */
135+
*(.data) /* .data sections */
136+
*(.data*) /* .data* sections */
137+
138+
. = ALIGN(4);
139+
_edata = .; /* define a global symbol at data end */
140+
} >RAM AT> FLASH
141+
142+
/* Data section that will not be initialized to any value. */
143+
.noinit (NOLOAD):
144+
{
145+
. = ALIGN(4);
146+
*(.noinit)
147+
. = ALIGN(4);
148+
} >RAM
149+
150+
.heap (NOLOAD):
151+
{
152+
. = ALIGN(4);
153+
_sheap = .;
154+
PROVIDE ( end = . );
155+
PROVIDE ( _end = . );
156+
. = . + _Min_Heap_Size;
157+
. = ALIGN(4);
158+
_eheap = .;
159+
} >RAM
160+
161+
CSTACK (ORIGIN(RAM) + LENGTH(RAM) - _Min_Stack_Size) (NOLOAD) :
162+
{
163+
. = ALIGN(4);
164+
. = . + _Min_Stack_Size;
165+
. = ALIGN(4);
166+
_estack = .; /* define a global symbol at stack end */
167+
. = ALIGN(4);
168+
} > RAM
169+
170+
.rom_info (NOLOAD) :
171+
{
172+
. = ALIGN(4);
173+
KEEP(*(.rom_info))
174+
. = ALIGN(4);
175+
} >REGION_ROM
176+
177+
/* Remove information from the standard 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)