Skip to main content

XIAO STM32C5 入门指南

概述​

迎接首款由 STM32 驱动的 XIAO。XIAO STM32C5 基于搭载 144MHz Arm Cortex-M33 内核的 STM32C5A3CG, 在紧凑的 XIAO 外形规格中带来了 CAN FD 连接、16MB 外部 Flash,以及带可编程加热功能的六轴 IMU。IMU 周围的专用加热电阻可实现由固件控制的预热,适用于机器人和运动感知项目。两个原生 CAN FD 控制器(其中一路配备板载 TCAN3403-Q1 收发器)为 USB-CAN 适配器、联网传感器和机器人控制项目提供了起点。USB-C 和板载电池充电功能同时支持桌面开发和便携式应用。

特性​

  • 首款 STM32 驱动的 XIAO:基于 STM32C5A3CG,配备 144MHz Arm Cortex-M33 处理器,支持浮点运算和 DSP 指令,用于嵌入式控制和传感器处理。
  • 内置 CAN FD 连接:两个原生 CAN FD 控制器,其中一路连接到板载 TCAN3403-Q1 收发器,并通过 CANH/CANL 焊盘引出。添加外部收发器即可使用第二路通道。
  • 带可编程加热的 6 轴 IMU:板载 LSM6DS3TR-C 加速度计和陀螺仪,周围配有专用加热电阻。通过 GPIO 控制加热,可实现可编程预热,并在配合温度反馈固件时,实现闭环温度调节,有助于降低机器人和运动感知应用中的温度相关漂移。
  • 16MB 外部 Flash:可通过应用固件存储应用数据、传感器日志、配置文件和 CAN 报文记录。
  • 用于通信定时的外部晶振:板载高速外部晶振为 CAN FD 和其他对定时敏感的应用提供时钟参考。
  • USB-C 与电池充电:可通过 USB-C 进行开发,或利用板载锂电池充电电路和电池连接焊盘构建电池供电设备。
  • 紧凑且易于集成的设计:XIAO 外形规格和半孔边缘焊盘既支持通过排针在面包板上原型开发,也便于集成到自定义载板中。

规格参数​

项目规格参数
产品Seeed Studio XIAO STM32C5
微控制器STMicroelectronics STM32C5A3CG
CPU单核 Arm Cortex-M33,最高 144MHz,带 FPU 和 DSP 指令
MCU 封装UFQFPN48
内部程序 Flash1MB
SRAM256KB
外部 Flash16MB
CAN 控制器2 个原生 CAN FD 控制器
板载 CAN 收发器1 x TI TCAN3403-Q1
板载 CAN 总线连接CANH/CANL 焊盘;使用板载 GND 作为信号参考
第二路 CAN 通道数字 TX/RX 信号;需要外部 CAN 收发器
CAN 终端电阻120 欧姆,默认启用;可通过可切断焊盘断开
CAN 隔离无板载电气隔离
IMUSTMicroelectronics LSM6DS3TR-C,三轴加速度计和三轴陀螺仪
IMU 加热IMU 周围的专用加热电阻,采用 GPIO 控制驱动
温度调节可编程预热;闭环设定点调节需要温度反馈和合适的应用固件
外部时钟板载高速外部晶振
USBUSB-C;USB 2.0 全速,12Mbps 信号速率
逻辑电平3.3V
供电USB-C 5V 输入或通过 BAT 焊盘连接兼容锂电池
电池充电板载充电电路
用户控制复位按钮和启动按钮
指示灯用户 LED 和充电指示灯
调试接口SWD
外形规格带半孔边缘焊盘的紧凑 XIAO 模块

硬件概览​

XIAO STM32C5 正面​


XIAO STM32C5 背面​

引脚映射​

XIAO 引脚 / 信号功能芯片引脚复用功能描述
VBUS电源USB 5V5V 电源输入/输出
GND地电源地
3V3 / 3.3V-OUT电源VOUT_3V3稳压 3.3V 输出
D0模拟PA0A0, ADCGPIO 和模拟输入
D1模拟PA1A1, ADCGPIO 和模拟输入
D2模拟PA2A2, ADCGPIO 和模拟输入
D3模拟PA3A3, ADCGPIO 和模拟输入
D4I2CPB7I2C1_SDAGPIO 和 I2C 数据
D5I2CPB6I2C1_SCLGPIO 和 I2C 时钟
D6UARTPA9UART_TXGPIO 和 UART 发送
D7UARTPA10UART_RXGPIO 和 UART 接收
D8SPIPE2SPI_SCKGPIO 和 SPI 时钟
D9SPIPB0SPI_MISOGPIO 和 SPI 数据输入
D10SPIPB15SPI_MOSIGPIO 和 SPI 数据输出
D11CAN FDPB8FDCAN1_RXGPIO 和 FDCAN1 接收
D12CAN FDPB9FDCAN1_TXGPIO 和 FDCAN1 发送
D13CAN FDPB5FDCAN2_RXGPIO 和板载 CAN 收发器接收
D14CAN FDPB13FDCAN2_TXGPIO 和板载 CAN 收发器发送
D15CAN 控制PB14CAN_STB控制板载 CAN 收发器待机模式
CAN_HCAN 总线TCAN3403 CANHCAN FD 差分总线高电平
CAN_LCAN 总线TCAN3403 CANLCAN FD 差分总线低电平
CANFD2_TERMCAN 终端JP1, 120 ohm切断/断开以禁用板载 120 欧姆终端电阻
BAT+电池电源VBAT3.7V 锂离子/锂聚合物电池正极
BAT-电池地GND电池负极
BAT_EN电池监测PA15使能电池电压测量电路
BAT_READ模拟PA4ADC读取电池电压;ADC 输入约为 VBAT / 2
SWCLK调试PA14SWD Clock串行线调试时钟焊盘
SWDIO调试PA13SWD Data串行线调试数据焊盘
RST系统NRSTSTM32C5_RESET硬件复位测试焊盘
USB_D+USBPA12USB_DPUSB 2.0 差分数据正
USB_D-USBPA11USB_DNUSB 2.0 差分数据负
BOOT系统PH2-BOOT0STM32C5_BOOT启动模式测试焊盘和启动按钮信号
CHARGE_LED指示灯Charger NCHG output由充电 IC 控制的红色充电状态 LED
USER_LEDGPIO 指示灯PB12GPIO25 / User_LED绿色用户 LED;低电平点亮
IMU_SDA板载 IMUPB4I2C2_SDA板载 LSM6DS3TR-C IMU 的 I2C 数据线
IMU_SCL板载 IMUPB3I2C2_SCL板载 LSM6DS3TR-C IMU 的 I2C 时钟线
IMU_INT板载 IMUPC13IMU_INT1来自板载 IMU 的中断输出
IMU_HEATER_PWMIMU 加热器PA8PWMIMU 温度补偿加热器的 PWM 控制

Bootloader 使用方法​

XIAO STM32C5 出厂时预装了支持 UF2 的 bootloader,主要用于固件更新。在烧录 .uf2 文件之前,快速双击板载 Reset 按钮。此时一块名为 XIAOC5BOOT 的大容量存储磁盘会挂载到你的电脑上。然后将固件文件复制到该磁盘中即可完成烧录。

使用 PlatformIO 入门​

本节将通过点亮板载用户 LED,演示如何在 PlatformIO 开发平台上结合 Zephyr RTOS 框架来开发和使用 XIAO STM32C5。

硬件准备​

你需要准备以下物品:

Seeed Studio XIAO STM32C5

软件准备​

步骤 1. 下载 VS Code

根据你所使用的系统下载 VS Code


步骤 2. 安装 PlatformIO 扩展

打开 VSCode,点击 Extensions,然后搜索 PlatformIO 并选择安装。安装完成后,重启 VSCode。


步骤 3. 安装 platform-seeedboards 平台包

Seeed Studio XIAO 系列开发板使用自定义的 PlatformIO 平台,因此你需要手动安装对应的平台包。

  • 运行以下命令进行全新安装:
pio pkg install -g -p "https://github.com/Seeed-Studio/platform-seeedboards.git"

  • 如果你之前已经在 PlatformIO 中使用过 Seeed Studio XIAO 系列开发板,请运行下面的命令进行更新:
# for Windows
pio pkg update -g -p "https://github.com/Seeed-Studio/platform-seeedboards.git"

# for macOS/Linux
pio pkg uninstall -g -p "SeeedStudio" && pio pkg install -g -p "SeeedStudio=https://github.com/Seeed-Studio/platform-seeedboards.git" --force
tip

如果你想使用已有的 PlatformIO 项目,请将 platformio.ini 的内容替换为如下所示:

[env:seeed-xiao-stm32c5]
platform = https://github.com/Seeed-Studio/platform-seeedboards.git
framework = zephyr
board = seeed-xiao-stm32c5

步骤 4. 创建新项目

  • 在 PlatformIO 插件界面中,选择创建一个新项目。
  • 为你的项目命名,选择 Seeed Studio XIAO STM32C5 作为目标开发板,并配置开发框架和项目存储路径。
tip

首次创建项目可能需要一些时间,请耐心等待。

编译与上传​

步骤 1. 编写 LED 闪烁程序

XIAO STM32C5 具有一个用户 LED,对应 GPIO PB12。该 LED 在低电平时点亮;本示例将其配置为每 500 ms 闪烁一次。

该项目由三个核心文件组成:

  • main.c:包含应用逻辑的主程序。
  • app.overlay:用于硬件外设配置的 Devicetree 覆盖文件。
  • prj.conf:用于启用所需 Zephyr 模块的项目配置文件。

按照以下步骤点亮 LED:

  • 打开你新创建的项目,并在 zephyr 文件夹下创建 app.overlay Devicetree 文件。
/* USB CDC console and the user LED are configured by the board DTS. */
  • 在 zephyr 文件夹内创建 prj.conf 配置文件。
# GPIO for LED control
CONFIG_GPIO=y
  • 将下面给出的参考代码复制到 main.c 中。
/*
* Copyright (c) 2026 Seeed Technology Co., Ltd.
* SPDX-License-Identifier: Apache-2.0
*
* Blinky example for XIAO STM32C5 with TinyUF2 bootloader support.
* Based on Zephyr samples/basic/blinky.
*
* The 1200-bps UF2 bootloader trigger is armed automatically by the
* board support package — no code changes needed in this example.
*/

#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

#define SLEEP_TIME_MS 500

#define LED0_NODE DT_ALIAS(led0)

static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

int main(void)
{
int ret;
bool led_state = true;

if (!gpio_is_ready_dt(&led)) {
return 0;
}

ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
if (ret < 0) {
return 0;
}

while (1) {
ret = gpio_pin_toggle_dt(&led);
if (ret < 0) {
return 0;
}

led_state = !led_state;
printk("LED state: %s\n", led_state ? "ON" : "OFF");
k_msleep(SLEEP_TIME_MS);
}

return 0;
}

步骤 2. 编译并上传程序

  • 在底部工具栏中触发一键项目编译。

或者,你也可以通过命令行界面进行编译。

pio run -e seeed-xiao-stm32c5
  • 上传固件

同样,固件上传也可以通过命令行完成。

pio run -e seeed-xiao-stm32c5 -t upload
  • 程序运行结果

XIAO STM32C5 的板载 LED 以 500 ms 的间隔闪烁。

同时,串口会输出 LED 的开关状态。

电池使用​

XIAO STM32C5 背面预留了一个 BAT 电池接口,可使用 3.7 V‑4.2 V 锂离子电池供电。

读取电池电压​

XIAO STM32C5 集成了电池电压检测电路和电池充电电路。

在检测电路中,BAT_EN / PA15 用于使能 TPS22916CNYFPR 芯片,而 BAT_Reading / PA4 用于读取电池电压。电路中使用了两个 10 kΩ 分压电阻,因此测得的数值等于锂离子电池实际电压的一半。

在电池充电过程中,Charge_LED 会闪烁,充电完成后则熄灭。

  • 修改相应的应用代码。
app.overlay
/ {
/* Expose the battery ADC input to the application. */
zephyr,user {
io-channels = <&adc1 4>;
};
};

&adc1 {
/* Add the battery input on PA4 (ADC1_IN4). */
pinctrl-0 = <&adc1_in0_pa0 &adc1_in1_pa1 &adc1_in2_pa2
&adc1_in3_pa3 &adc1_in4_pa4>;

channel@4 {
reg = <4>;
zephyr,gain = "ADC_GAIN_1";
zephyr,reference = "ADC_REF_INTERNAL";
zephyr,acquisition-time = <ADC_ACQ_TIME(ADC_ACQ_TIME_TICKS, 289)>;
zephyr,resolution = <12>;
};
};
prj.conf
# Battery voltage measurement. USB CDC console support is supplied by the board.
CONFIG_ADC=y
CONFIG_GPIO=y
main.c
/*
* Copyright (c) 2026 Seeed Technology Co., Ltd.
* SPDX-License-Identifier: Apache-2.0
*
* Read the XIAO STM32C5 battery voltage once per second.
* printk() output uses USB CDC;
* BAT_Reading/PA4 is added by app.overlay. BAT_EN/PA15 and USB CDC are
* supplied by the board devicetree.
*/

#include <zephyr/device.h>
#include <zephyr/drivers/adc.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>

#if !DT_NODE_EXISTS(DT_PATH(zephyr_user)) || \
!DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
#error "No battery ADC io-channel specified"
#endif

#define BATTERY_ADC_NODE DT_PATH(zephyr_user)
#define BAT_EN_NODE DT_ALIAS(baten)
#define BATTERY_ENABLE_DELAY_MS 5
#define ADC_AVG_SAMPLES 16
#define SAMPLE_PERIOD_MS 1000

static const struct adc_dt_spec battery_adc =
ADC_DT_SPEC_GET_BY_IDX(BATTERY_ADC_NODE, 0);
static const struct gpio_dt_spec bat_en =
GPIO_DT_SPEC_GET(BAT_EN_NODE, gpios);

int main(void)
{
uint16_t raw;
struct adc_sequence sequence = {
.buffer = &raw,
.buffer_size = sizeof(raw),
};
int err;

if (!device_is_ready(battery_adc.dev) || !gpio_is_ready_dt(&bat_en)) {
printk("Battery ADC hardware is not ready\n");
return 0;
}

err = gpio_pin_configure_dt(&bat_en, GPIO_OUTPUT_ACTIVE);
if (err) {
printk("BAT_EN configure failed: %d\n", err);
return 0;
}

k_msleep(BATTERY_ENABLE_DELAY_MS);

err = adc_channel_setup_dt(&battery_adc);
if (err) {
printk("Battery ADC channel setup failed: %d\n", err);
return 0;
}

err = adc_sequence_init_dt(&battery_adc, &sequence);
if (err) {
printk("Battery ADC sequence init failed: %d\n", err);
return 0;
}

printk("Battery voltage monitor (USB CDC)\n");

while (1) {
uint32_t raw_sum = 0;
uint16_t raw_avg;
int32_t adc_mv;

/* Discard the first conversion after the one-second idle period. */
err = adc_read(battery_adc.dev, &sequence);
for (int i = 0; !err && i < ADC_AVG_SAMPLES; i++) {
err = adc_read(battery_adc.dev, &sequence);
raw_sum += raw;
}

if (!err) {
raw_avg = raw_sum / ADC_AVG_SAMPLES;
adc_mv = raw_avg;
err = adc_raw_to_millivolts_dt(&battery_adc, &adc_mv);
if (err) {
printk("Battery voltage conversion failed: %d\n", err);
} else {
/* The 1:1 divider halves the battery voltage. */
printk("Battery: %d mV\n", adc_mv * 2);
}
} else {
printk("Battery ADC read failed: %d\n", err);
}

k_msleep(SAMPLE_PERIOD_MS);
}

return 0;
}
  • 电压读取结果

IMU​

XIAO STM32C5 搭载了板载 LSM6DS3TR‑C 六轴惯性传感器,集成了三轴加速度计和三轴陀螺仪。它可用于姿态检测、运动识别、振动监测等应用场景。

为减小环境温度变化对传感器偏置和测量稳定性的影响,板载实现了主动温度补偿加热电路。布置在 IMU 周围的加热电阻为传感器提供均匀加热,并可通过 PWM 信号调节加热功率。结合 IMU 内部的温度读数,通过软件控制使传感器在相对稳定的温度下工作,从而降低由温度漂移引起的测量漂移,并在长期运行和温度变化条件下提高数据一致性。

CAN FD​

XIAO STM32C5 具有两个 CAN FD 控制器。FDCAN1 提供逻辑电平的 TX 和 RX 引脚,需要外接 CAN 收发器才能连接到 CAN 总线。FDCAN2 连接到板载的 TCAN3403-Q1 收发器,并通过 CAN_H 和 CAN_L 焊盘连接到总线。该板还可以收发经典 CAN 帧。但仅支持经典 CAN 的节点无法解码 CAN FD 帧,因此在发送 FD 流量前,请确认总线上活动节点支持 CAN FD。CAN FD 支持最长 64 字节的有效载荷,并且在启用比特率切换时,可以在数据阶段使用更高的比特率。

该板载有一个可断开的 120 Ω 终端电阻,默认启用。当 XIAO 位于 CAN 总线的物理端点且该端点没有其他终端电阻时,请保持其启用;当 XIAO 作为中间节点或该端点已安装其他终端电阻时,请将其禁用。请确保总线另一端也正确终端。收发器支持待机模式,在不需要 CAN 通信时可降低功耗。

资源​

硬件设计

技术支持与产品讨论​

感谢您选择我们的产品!我们将为您提供多种支持,确保您在使用我们产品的过程中尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...