Skip to content

Commit 690f224

Browse files
cumin777fpistm
authored andcommitted
feat(xiao): add Seeed XIAO STM32C5 board support
Variant, linker script and boards.txt entry for the Seeed Studio XIAO STM32C5 (STM32C5A3CG). Boards ship with a TinyUF2 bootloader in the first 32 KiB, so build.flash_offset is 0x8000 and USB CDC is the default serial configuration. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: cumin <13809292481@163.com>
1 parent 8bc8cc9 commit 690f224

5 files changed

Lines changed: 467 additions & 0 deletions

File tree

‎boards.txt‎

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17229,6 +17229,52 @@ Phoque.menu.upload_method.OpenOCDDapLink.upload.tool=openocd_upload
1722917229
Phoque.menu.upload_method.OpenOCDDapLink.debug.server.openocd.scripts.0=interface/cmsis-dap.cfg
1723017230
Phoque.menu.upload_method.OpenOCDDapLink.debug.server.openocd.scripts.1={runtime.platform.path}/debugger/select_swd.cfg
1723117231

17232+
################################################################################
17233+
# Seeed Studio
17234+
# Docs: url=https://www.seeedstudio.com/
17235+
Seeed_studio.name=Seeed Studio
17236+
Seeed_studio.build.core=arduino
17237+
Seeed_studio.build.board=Seeed_studio
17238+
Seeed_studio.build.family=SEEED_STUDIO
17239+
Seeed_studio.build.variant_h=variant_{build.board}.h
17240+
Seeed_studio.build.st_extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
17241+
Seeed_studio.build.flash_offset=0x0
17242+
Seeed_studio.upload.maximum_size=0
17243+
Seeed_studio.upload.maximum_data_size=0
17244+
Seeed_studio.vid.0=0x2886
17245+
Seeed_studio.pid.0=0x80C5
17246+
17247+
# Seeed XIAO STM32C5
17248+
# Docs: url=https://www.seeedstudio.com/XIAO-STM32C5-p-7011.html
17249+
# Docs: mcu=STM32C5A3CG
17250+
Seeed_studio.menu.pnum.XIAO_STM32C5=Seeed XIAO STM32C5
17251+
Seeed_studio.menu.pnum.XIAO_STM32C5.upload.maximum_size=1015808
17252+
Seeed_studio.menu.pnum.XIAO_STM32C5.upload.maximum_data_size=262144
17253+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.mcu=cortex-m33
17254+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.fpu=-mfpu=fpv5-sp-d16
17255+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.float-abi=-mfloat-abi=hard
17256+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.board=XIAO_STM32C5
17257+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.series=STM32C5xx
17258+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.product_line=STM32C5A3xx
17259+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.variant=STM32C5xx/C593C(E-G)(T-U)_C5A3CG(T-U)
17260+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.variant_h=variant_XIAO_STM32C5.h
17261+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.ldscript=ldscript_XIAO_STM32C5.ld
17262+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.hal=-DUSE_HALV2_DRIVER
17263+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.flash_offset=0x8000
17264+
Seeed_studio.menu.pnum.XIAO_STM32C5.build.st_extra_flags=-D{build.product_line} -DHSE_VALUE=48000000U -DUSBD_SELF_POWERED=1 -DUSBD_MAX_POWER=50 {build.enable_usb} {build.xSerial}
17265+
Seeed_studio.menu.pnum.XIAO_STM32C5.debug.svd_file={runtime.tools.STM32_SVD.path}/svd/STM32C5xx/STM32C5A3.svd
17266+
17267+
# Upload menu
17268+
Seeed_studio.menu.upload_method.swdMethod=STM32CubeProgrammer (SWD)
17269+
Seeed_studio.menu.upload_method.swdMethod.upload.protocol=swd
17270+
Seeed_studio.menu.upload_method.swdMethod.upload.options=-a {upload.address} -m {upload.mode} -s {upload.start} -f {upload.freq} -n {upload.stlink_sn}
17271+
Seeed_studio.menu.upload_method.swdMethod.upload.tool=stm32CubeProg
17272+
17273+
Seeed_studio.menu.upload_method.jlinkMethod=STM32CubeProgrammer (J-Link)
17274+
Seeed_studio.menu.upload_method.jlinkMethod.upload.protocol=jlink
17275+
Seeed_studio.menu.upload_method.jlinkMethod.upload.options=-a {upload.address} -s {upload.start}
17276+
Seeed_studio.menu.upload_method.jlinkMethod.upload.tool=stm32CubeProg
17277+
1723217278
################################################################################
1723317279
# Serialx activation
1723417280
Nucleo_144.menu.xserial.generic=Enabled (generic 'Serial')
@@ -17496,6 +17542,12 @@ Phoque.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
1749617542
Phoque.menu.xserial.disabled=Disabled (no Serial support)
1749717543
Phoque.menu.xserial.disabled.build.xSerial=
1749817544

17545+
Seeed_studio.menu.xserial.generic=Enabled (generic 'Serial')
17546+
Seeed_studio.menu.xserial.none=Enabled (no generic 'Serial')
17547+
Seeed_studio.menu.xserial.none.build.xSerial=-DHAL_UART_MODULE_ENABLED -DHWSERIAL_NONE
17548+
Seeed_studio.menu.xserial.disabled=Disabled (no Serial support)
17549+
Seeed_studio.menu.xserial.disabled.build.xSerial=
17550+
1749917551
# USB connectivity
1750017552
Nucleo_144.menu.usb.none=None
1750117553
Nucleo_144.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
@@ -17890,6 +17942,12 @@ Phoque.menu.xusb.HS.build.usb_speed=-DUSE_USB_HS
1789017942
Phoque.menu.xusb.HSFS=High Speed in Full Speed mode
1789117943
Phoque.menu.xusb.HSFS.build.usb_speed=-DUSE_USB_HS -DUSE_USB_HS_IN_FS
1789217944

17945+
Seeed_studio.menu.usb.CDCgen=CDC (generic 'Serial' supersede U(S)ART)
17946+
Seeed_studio.menu.usb.CDCgen.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC
17947+
Seeed_studio.menu.usb.none=None
17948+
Seeed_studio.menu.usb.CDC=CDC (no generic 'Serial')
17949+
Seeed_studio.menu.usb.CDC.build.enable_usb={build.usb_flags} -DUSBD_USE_CDC -DDISABLE_GENERIC_SERIALUSB
17950+
1789317951
# Optimizations
1789417952
Nucleo_144.menu.opt.osstd=Smallest (-Os default)
1789517953
Nucleo_144.menu.opt.oslto=Smallest (-Os) with LTO
@@ -18751,6 +18809,24 @@ Phoque.menu.opt.ogstd.build.flags.optimize=-Og
1875118809
Phoque.menu.opt.o0std=No Optimization (-O0)
1875218810
Phoque.menu.opt.o0std.build.flags.optimize=-O0
1875318811

18812+
Seeed_studio.menu.opt.osstd=Smallest (-Os default)
18813+
Seeed_studio.menu.opt.oslto=Smallest (-Os) with LTO
18814+
Seeed_studio.menu.opt.oslto.build.flags.optimize=-Os -flto
18815+
Seeed_studio.menu.opt.o1std=Fast (-O1)
18816+
Seeed_studio.menu.opt.o1std.build.flags.optimize=-O1
18817+
Seeed_studio.menu.opt.o1lto=Fast (-O1) with LTO
18818+
Seeed_studio.menu.opt.o1lto.build.flags.optimize=-O1 -flto
18819+
Seeed_studio.menu.opt.o2std=Faster (-O2)
18820+
Seeed_studio.menu.opt.o2std.build.flags.optimize=-O2
18821+
Seeed_studio.menu.opt.o2lto=Faster (-O2) with LTO
18822+
Seeed_studio.menu.opt.o2lto.build.flags.optimize=-O2 -flto
18823+
Seeed_studio.menu.opt.o3std=Fastest (-O3)
18824+
Seeed_studio.menu.opt.o3std.build.flags.optimize=-O3
18825+
Seeed_studio.menu.opt.o3lto=Fastest (-O3) with LTO
18826+
Seeed_studio.menu.opt.o3lto.build.flags.optimize=-O3 -flto
18827+
Seeed_studio.menu.opt.ogstd=Debug (-Og)
18828+
Seeed_studio.menu.opt.ogstd.build.flags.optimize=-Og
18829+
1875418830
# Debug information
1875518831
Nucleo_144.menu.dbg.none=None
1875618832
Nucleo_144.menu.dbg.enable_sym=Symbols Enabled (-g)
@@ -19088,6 +19164,14 @@ Phoque.menu.dbg.enable_log.build.flags.debug=
1908819164
Phoque.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
1908919165
Phoque.menu.dbg.enable_all.build.flags.debug=-g
1909019166

19167+
Seeed_studio.menu.dbg.none=None
19168+
Seeed_studio.menu.dbg.enable_sym=Symbols Enabled (-g)
19169+
Seeed_studio.menu.dbg.enable_sym.build.flags.debug=-g -DNDEBUG
19170+
Seeed_studio.menu.dbg.enable_log=Core logs Enabled
19171+
Seeed_studio.menu.dbg.enable_log.build.flags.debug=
19172+
Seeed_studio.menu.dbg.enable_all=Core Logs and Symbols Enabled (-g)
19173+
Seeed_studio.menu.dbg.enable_all.build.flags.debug=-g
19174+
1909119175
# C Runtime Library
1909219176
Nucleo_144.menu.rtlib.nano=Newlib Nano (default)
1909319177
Nucleo_144.menu.rtlib.nanofp=Newlib Nano + Float Printf
@@ -19518,3 +19602,13 @@ Phoque.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
1951819602
Phoque.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
1951919603
Phoque.menu.rtlib.full=Newlib Standard
1952019604
Phoque.menu.rtlib.full.build.flags.ldspecs=
19605+
19606+
Seeed_studio.menu.rtlib.nano=Newlib Nano (default)
19607+
Seeed_studio.menu.rtlib.nanofp=Newlib Nano + Float Printf
19608+
Seeed_studio.menu.rtlib.nanofp.build.flags.ldspecs=--specs=nano.specs -u _printf_float
19609+
Seeed_studio.menu.rtlib.nanofs=Newlib Nano + Float Scanf
19610+
Seeed_studio.menu.rtlib.nanofs.build.flags.ldspecs=--specs=nano.specs -u _scanf_float
19611+
Seeed_studio.menu.rtlib.nanofps=Newlib Nano + Float Printf/Scanf
19612+
Seeed_studio.menu.rtlib.nanofps.build.flags.ldspecs=--specs=nano.specs -u _printf_float -u _scanf_float
19613+
Seeed_studio.menu.rtlib.full=Newlib Standard
19614+
Seeed_studio.menu.rtlib.full.build.flags.ldspecs=

‎docs/supported-boards/index.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,3 +1603,9 @@
16031603
| --- | --- | --- | --- | --- |
16041604
| Phoque 1 | [STM32G431VB](https://www.st.com/en/microcontrollers-microprocessors/stm32g431vb.html) | `PHOQUE1` | Next release | STSPIN32G4-based |
16051605
| Phoque 2 | [STM32G431CB](https://www.st.com/en/microcontrollers-microprocessors/stm32g431cb.html) | `PHOQUE2` | Next release | |
1606+
1607+
### [Seeed Studio boards](https://www.seeedstudio.com/)
1608+
1609+
| Board | STM32 MCU | `build.board` | First release | Notes |
1610+
| --- | --- | --- | --- | --- |
1611+
| [Seeed XIAO STM32C5](https://www.seeedstudio.com/XIAO-STM32C5-p-7011.html) | [STM32C5A3CG](https://www.st.com/en/microcontrollers-microprocessors/stm32c5a3cg.html) | `XIAO_STM32C5` | Next release | |
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
/*
2+
* Copyright (c) 2026, Seeed Technology Co., Ltd.
3+
* SPDX-License-Identifier: BSD-3-Clause
4+
*
5+
* The application starts after the 32 KiB TinyUF2 bootloader. Memory sizes are
6+
* supplied by boards.txt through LD_MAX_SIZE and LD_MAX_DATA_SIZE.
7+
*/
8+
ENTRY(Reset_Handler)
9+
10+
HEAP_SIZE = 0x2000;
11+
STACK_SIZE = 0x2000;
12+
13+
MEMORY
14+
{
15+
ROM (rx) : org = 0x08000000 + LD_FLASH_OFFSET, len = LD_MAX_SIZE - LD_FLASH_OFFSET
16+
RAM (xrw) : org = 0x20000000, len = LD_MAX_DATA_SIZE
17+
}
18+
19+
SECTIONS
20+
{
21+
.vectors :
22+
{
23+
. = ALIGN(8);
24+
KEEP(*(.vectors));
25+
. = ALIGN(8);
26+
} > ROM
27+
28+
.text :
29+
{
30+
. = ALIGN(8);
31+
*(.text);
32+
*(.text*);
33+
*(.glue_7);
34+
*(.glue_7t);
35+
*(.eh_frame);
36+
KEEP(*(.init));
37+
KEEP(*(.fini));
38+
. = ALIGN(8);
39+
_etext = .;
40+
} > ROM
41+
42+
.rodata :
43+
{
44+
. = ALIGN(8);
45+
*(.rodata);
46+
*(.rodata*);
47+
. = ALIGN(8);
48+
} > ROM
49+
50+
.ARM.extab (READONLY) :
51+
{
52+
. = ALIGN(8);
53+
*(.ARM.extab* .gnu.linkonce.armextab.*)
54+
. = ALIGN(8);
55+
} > ROM
56+
57+
.ARM (READONLY) :
58+
{
59+
. = ALIGN(8);
60+
__exidx_start = .;
61+
*(.ARM.exidx*);
62+
__exidx_end = .;
63+
. = ALIGN(8);
64+
} > ROM
65+
66+
.preinit_array (READONLY) :
67+
{
68+
. = ALIGN(8);
69+
PROVIDE_HIDDEN(__preinit_array_start = .);
70+
KEEP(*(.preinit_array*));
71+
PROVIDE_HIDDEN(__preinit_array_end = .);
72+
. = ALIGN(8);
73+
} > ROM
74+
75+
.init_array (READONLY) :
76+
{
77+
. = ALIGN(8);
78+
PROVIDE_HIDDEN(__init_array_start = .);
79+
KEEP(*(SORT(.init_array.*)));
80+
KEEP(*(.init_array*));
81+
PROVIDE_HIDDEN(__init_array_end = .);
82+
. = ALIGN(8);
83+
} > ROM
84+
85+
.fini_array (READONLY) :
86+
{
87+
. = ALIGN(8);
88+
PROVIDE_HIDDEN(__fini_array_start = .);
89+
KEEP(*(SORT(.fini_array.*)));
90+
KEEP(*(.fini_array*));
91+
PROVIDE_HIDDEN(__fini_array_end = .);
92+
. = ALIGN(8);
93+
} > ROM
94+
95+
.copy.table (READONLY) :
96+
{
97+
. = ALIGN(8);
98+
__copy_table_start__ = .;
99+
LONG(LOADADDR(.data));
100+
LONG(ADDR(.data));
101+
LONG(SIZEOF(.data) / 4);
102+
__copy_table_end__ = .;
103+
} > ROM
104+
105+
.zero.table (READONLY) :
106+
{
107+
. = ALIGN(8);
108+
__zero_table_start__ = .;
109+
LONG(ADDR(.bss));
110+
LONG(SIZEOF(.bss) / 4);
111+
__zero_table_end__ = .;
112+
} > ROM
113+
114+
.data :
115+
{
116+
. = ALIGN(8);
117+
_sidata = LOADADDR(.data);
118+
__data_start__ = .;
119+
_sdata = .;
120+
*(.data);
121+
*(.data*);
122+
. = ALIGN(8);
123+
_edata = .;
124+
} > RAM AT> ROM
125+
126+
.bss :
127+
{
128+
. = ALIGN(8);
129+
_sbss = .;
130+
__bss_start__ = _sbss;
131+
*(.bss);
132+
*(.bss*);
133+
*(COMMON);
134+
. = ALIGN(8);
135+
_ebss = .;
136+
__bss_end__ = _ebss;
137+
} > RAM
138+
139+
.heap (NOLOAD) :
140+
{
141+
. = ALIGN(8);
142+
__end__ = .;
143+
PROVIDE(end = .);
144+
_heap_start = .;
145+
. += HEAP_SIZE;
146+
. = ALIGN(8);
147+
_heap_end = .;
148+
__HeapLimit = .;
149+
} > RAM
150+
151+
.stack (NOLOAD) :
152+
{
153+
. = ALIGN(8);
154+
__StackLimit = .;
155+
. += STACK_SIZE;
156+
. = ALIGN(8);
157+
__StackTop = .;
158+
_estack = .;
159+
__stack = .;
160+
} > RAM
161+
162+
/DISCARD/ :
163+
{
164+
libc.a(*);
165+
libm.a(*);
166+
libgcc.a(*);
167+
}
168+
169+
.ARM.attributes 0 :
170+
{
171+
*(.ARM.attributes)
172+
}
173+
}

0 commit comments

Comments
 (0)