RIOT-OS 中的 Silicon Labs SLSTK3401A 开发板支持:硬件解析、板级配置与烧录调试指南

📅 发布时间:2026/9/20 2:33:38
RIOT-OS 中的 Silicon Labs SLSTK3401A 开发板支持:硬件解析、板级配置与烧录调试指南
RIOT-OS 中的 Silicon Labs SLSTK3401A 开发板支持硬件解析、板级配置与烧录调试指南【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT导读本文聚焦 RIOT-OS 对Silicon Labs SLSTK3401AEFM32 Pearl Gecko PG1开发板的完整支持内容包括板载 MCU 与外设的硬件规格、扩展头引脚分布、RIOT-OS 外设映射、板控制器与 Advanced Energy MonitorAEM的启用/禁用方式、时钟树配置、RTCC 的 RTC/RTT 二选一约束、EMLIB 使用说明以及基于 SEGGER J-Link 的烧录与调试命令。读完本文你将能够在 RIOT-OS 环境下为 SLSTK3401A 编写应用、裁剪板级模块、调整时钟源并独立完成编译、烧录与 GDB 调试。板级总览专为低功耗设计的 Pearl Gecko 评估套件SLSTK3401A 是 Silicon Labs 推出的EFM32 Pearl Gecko PG1 入门套件板载 EFM32 微控制器专为低功耗应用设计具备节能外设、多种能量模式EM0–EM4以及极短的唤醒时间。套件自带Advanced Energy MonitorAEM可以实时测量硬件与代码的功耗并将能耗与具体代码执行相关联是低功耗开发的重要工具。RIOT-OS 官方将该板收录于boards/slstk3401a/目录Doxygen 分组为boards_slstk3401a见 doc.md。板级构建采用公共板支持 单板差异的模式Makefile通过DIRS $(RIOTBOARD)/common/silabs引入所有 Silicon Labs 开发板的公共代码单板只保留芯片型号、引脚定义等差异见 Makefile。硬件规格MCU 与外设一览MCU 核心参数板载 MCU 型号为EFM32PG1B200F256GM48属于 EFM32 Pearl Gecko 1B 系列Series 1项目规格内核ARM Cortex-M4F带 FPU频率最高 40 MHzRAM32.0 KiBFlash256.0 KiBMPU支持DMA8 通道定时器2×16-bit 1×16-bit低功耗ADC12-bitUART2×USART 1×LEUARTSPI2×USART复用I2C1×Vcc1.85 V–3.8 V该配置在 Makefile.features 中体现为CPU_FAM efm32pg1b、CPU_MODEL efm32pg1b200f256gm48并提供periph_adc、periph_i2c、periph_rtc、periph_rtt、periph_spi、periph_timer、periph_uart七项外设特性。扩展头 Pinout文档给出的是板子右侧扩展排针的引脚分布将排针水平面向自己时PIN 1 位于左下角。PINPIN3V32019RES5V1817RESPC101615PC11PA11413PB13PA01211PD11PC9109PD10PC887PA4PC765PA3PC643PA2VMCU21GND使用前需注意两点其一Silicon Labs 不同入门套件的排针定义并不通用其二部分引脚在使能后会被板控制器占用详见下文板控制器一节。外设映射与实现状态RIOT-OS 外设映射板级外设映射同时记录在 doc.md 与 periph_conf.h 中两处完全一致外设编号硬件引脚备注ADC0ADC0CHAN0: 内部温度引脚固定不支持 14/16-bit 分辨率I2C0I2C0SDA: PC10, CLK: PC11I2C_SPEED_LOW与I2C_SPEED_HIGH时钟速率有偏差RTT–RTCC–1 Hz 间隔与 RTC 二选一RTC–RTCC–1 Hz 间隔与 RTT 二选一SPI0USART1MOSI: PC6, MISO: PC7, CLK: PC8仅主机模式Timer0TIMER0 TIMER1–TIMER0 用作预分频器必须相邻1LETIMER0–低功耗定时器UART0USART0RX: PA1, TX: PA0默认 STDIO 输出1LEUART0RX: PD11, TX: PD10波特率受限见下文对应源码实现要点ADCperiph_conf.h 定义了两个通道adcPosSelTEMP1.25 V 参考、内部温度与adcPosSelAVDD5 V 参考。板级board.h通过CORETEMP_ADC ADC_LINE(0)将片上温度传感器接到saul的efm32_coretemp模块。I2C使用I2C0location 15SDALOC_LOC15 | SCLLOC_LOC15速度I2C_SPEED_NORMAL并启用了内部上拉use_internal_pull_ups true。SPIUSART1 的 location 11仅主机模式。TimerTimer 0 采用级联cascade模式——TIMER0 作预分频器、TIMER1 作主定时器提供 3 个通道Timer 1 为 LETIMER0提供 2 个通道可运行在低功耗时钟上。UARTUSART0location 0是默认 STDIO 输出LEUART0location 18为低功耗 UART。用户交互接口外设编号宏引脚备注按键0PB0_PINPF6–1PB1_PINPF7–LED0LED0_PINPF4黄色1LED1_PINPF5黄色在 board.h 中按键与 LED 引脚均定义为GPIO_PIN(PF, n)并配套了LED0_ON/OFF/TOGGLE、LED1_ON/OFF/TOGGLE宏供应用直接调用。SAUL 的 GPIO 映射见 gpio_params.h将 2 个 LED 注册为GPIO_OUT2 个按键注册为带内部上拉的GPIO_IN_PU并标记SAUL_GPIO_INVERTED按下为低电平。实现状态设备ID支持备注MCUEFM32PG1B是支持多种能量模式低层驱动ADC / Flash / GPIO / I2C / PWM / RTCC / SPI / Timer / UART是GPIO 中断在引脚间共享见参考手册SPI 仅主机模式USART 与 SPI 共享LEUART 波特率受限USB否–LCD 驱动LS013B7DH0是Sharp 低功耗 Memory LCD温湿度传感器Si7021是Silicon Labs 温湿度传感器从 Makefile.dep 可以看到默认依赖启用saul_default时会自动拉入efm32_coretemp片上温度、saul_gpio与si7021同时无条件加入boards_common_silabs、silabs_aem、silabs_bc三个板级模块。board.c的board_init()在使能MODULE_SI7021时会通过SI7021_EN_PINPD9上电使能 Si7021 传感器见 board.c 与 board.h。板级配置详解板控制器Board ControllerSLSTK3401A 自带一块板控制器它通过 USB 提供一个虚拟串口并通过一个 GPIO 引脚使能。该引脚默认使能若不需要可通过编译参数关闭make ... DISABLE_MODULEsilabs_bc两个关键注意事项使用虚拟串口前请确保已安装最新版板控制器固件板控制器始终按 115200 baud、8 数据位、无校验、1 停止位配置虚拟串口因此 MCU 侧也必须以相同参数发送数据。此外板控制器在DISP_SELECTED引脚为低时也会占用低功耗 LCD。该引脚默认不被板级初始化如果应用需要控制板载 Memory LCD必须在应用内自行初始化该引脚。在 RIOT-OS 中板控制器模块的实现位于 boards/common/silabs/drivers/bc/board_common_init()会在初始化阶段调用bc_init()见 board_common.c。Advanced Energy MonitorAEMAEM 是本套件的核心特色可接入 Simplicity Studio 开发软件测量能量消耗并与代码关联实现代码级功耗分析。其工作原理是板控制器负责能量测量为实现实时代码关联会配置CoreDebug外设通过SWO 端口输出 MCU 寄存器数据与中断数据。该特性默认开启可用以下命令关闭make ... DISABLE_MODULEsilabs_aem需要特别注意的是Simplicity Studio 需要调试符号来关联代码。RIOT-OS 默认生成 GDB 调试符号而 Simplicity Studio 需要DWARF-2调试符号GCC 对应-gdwarf-2如需使用请相应调整编译参数。AEM 驱动位于 boards/common/silabs/drivers/aem/在board_common_init()中通过aem_init()初始化见 board_common.c。时钟选择Clock selectionEFM32 的多个外设分支可选用不同时钟源动手配置前建议先阅读 Silicon Labs 的 AN0004.1EFM32 CMU 应用笔记熟悉各时钟。本套件可用的时钟源如下时钟源内部频率备注HFRCO是19 MHz启动时使能可更改HFXO否40 MHz–LFRCO是32.768 kHz–LFXO否32.768 kHz–ULFRCO否1 kHz作为时间源不太可靠各时钟分支及其可用源分支时钟源用途HFHFRCO, HFXO内核、外设LFALFRCO, LFXO低功耗定时器LFBLFRCO, LFXO, CORELEDIV2低功耗 UARTLFELFRCO, LFXO实时时钟与日历RTCC其中CORELEDIV2派生自内核时钟源会被除以 2 或 4 以避免超过最大时钟频率由 EMLIB 自动处理。上述频率为本套件特有不可直接套用到其他板卡。编译期配置代码需要知道准确的时钟频率才能正确计算外设速率与波特率。若板上的 HFXO 或 LFXO 与上表不同必须通过编译参数指定make ... EFM32_HFXO_FREQfreq_in_hz EFM32_LFXO_FREQfreq_in_hz若要覆盖某个分支的默认时钟源可向编译定义中追加CLOCK_分支源例如make ... CLOCK_LFAcmuSelect_LFRCO在 periph_conf.h 中可以看到本板默认值CLOCK_HF cmuSelect_HFXO、CLOCK_CORE_DIV cmuClkDiv_1、CLOCK_LFA/LFB/LFE cmuSelect_LFXO且全部用#ifndef包裹允许在编译时通过宏覆盖——这正是文档所述命令行配置生效的底层机制。低功耗外设LEUART低功耗 UARTLEUART可以使用低速时钟。当LFB 分支选用 LFRCO 或 LFXO 时LEUART 仍可在EM2低功耗模式下工作但波特率被限制为9600 baud。若需要更高波特率应将 LFB 时钟源切换为CORELEDIV2。注意该设置不会影响板级定义中的外设映射但请确保应用代码不要引用任何依赖低功耗时钟的外设。RTC 与 RTT 二选一RIOT-OS 同时支持Real-Time TickerRTT与Real-Time ClockRTC但本板 MCU 家族的 RTCC 是 32 位实时时钟与日历只能配置为滴答ticker模式或日历calendar模式之一因此同一时间只能启用 RTT 与 RTC 中的一个。RTCC 按1 Hz间隔配置时约136 年才会溢出一次。periph_conf.h中RTT_FREQUENCY默认被定义为 1 Hz见 periph_conf.h与文档描述一致。使用 EMLIB 抽象外设寄存器本移植使用 Silicon Labs 的EMLIB库抽象外设寄存器。虽然会带来一定开销但能确保设备正确初始化、内建芯片勘误errata处理并简化开发。具体开销与应用及外设使用方式有关最大开销出现在外设初始化阶段大量 read/write/get/set 方法以内联函数或宏实现几乎没有额外开销。EMLIB 的另一优势是内置断言assertions可确保外设被正确使用。要启用断言请在编译定义中传入make ... CFLAGS-DDEBUG_EFMEMLIB 由 Silicon Labs 以 zlib 风格许可证发布允许分发源码。引脚位置Pin locations与扩展引脚映射EFM32 平台支持将外设映射到不同的预定义引脚predefined locations。periph_conf.h中的定义主要由两部分组成location 编号与实际引脚号。实际引脚用于通过 GPIO 驱动配置引脚而 location 用于将外设路由到这些引脚——两者必须匹配详细规则请参考芯片数据手册。本 MCU 还支持扩展引脚映射extended pin mapping外设的每个引脚都可以分别连接到该外设预定义引脚集中的任意一个引脚为硬件设计提供了极大灵活性前述periph_conf.h中各外设配置中的*_ROUTELOC*_LOC*宏正是 location 的具体体现。编译、烧录与调试烧录依赖SEGGER J-Link软件RIOT-OS 提供以下命令烧录固件BOARDslstk3401a make flash启动 GDB 调试器BOARDslstk3401a make debug连接自己的调试器仅启动调试服务器BOARDslstk3401a make debug-server部分板卡支持有限模拟可尝试BOARDslstk3401a make emulate从构建系统层面看Makefile.include中设置了JLINK_PRE_FLASH r烧录前执行 J-Link 的r复位命令并引入公共的 Silicon Labs 板级 Makefile见 Makefile.includeJ-Link 的完整烧录流程由$(RIOTBOARD)/common/silabs/Makefile.include统一提供。快速上手示例结合以上配置一个典型的开发流程如下进入应用目录例如examples/basic/hello-world执行BOARDslstk3401a make编译烧录BOARDslstk3401a make flash需连接板载 J-Link串口交互板控制器虚拟串口固定为 115200/8-N-1可打开串口终端查看 STDIO 输出USART0/PA0–PA1低功耗开发使用 LETIMER0 作为低功耗定时器LEUART 在 LFB 使用 LFRCO/LFXO 时可工作于 EM2波特率限 9600需要更高波特率时将 LFB 切到 CORELEDIV2功耗分析保持silabs_aem模块启用将调试符号切换为 DWARF-2-gdwarf-2后接入 Simplicity Studio即可获得代码级能耗关联数据裁剪模块通过DISABLE_MODULEsilabs_bc或DISABLE_MODULEsilabs_aem关闭板控制器或 AEM 以节省资源。参考资源仓库内板级文档doc.md板级定义与 LED/按键宏board.h外设配置时钟/ADC/I2C/SPI/Timer/UARTperiph_conf.h板级初始化board.cSAUL GPIO 映射gpio_params.h构建特性/依赖/包含规则Makefile.features、Makefile.dep、Makefile.includeSilicon Labs 公共板级支持boards/common/silabs/含 board_common.c、AEM/BC/PIC 驱动Kconfig 板级配置入口Kconfig【免费下载链接】RIOTRIOT - The friendly OS for IoT项目地址: https://gitcode.com/GitHub_Trending/riot/RIOT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考