Zephyr 开发指南:96Boards Carbon(STM32F401RET + nRF51822)双芯片板卡的构建、刷写与蓝牙联调
2026/9/14 1:54:46 网站建设 项目流程

Zephyr 开发指南:96Boards Carbon(STM32F401RET + nRF51822)双芯片板卡的构建、刷写与蓝牙联调

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

96Boards Carbon 是一块基于 STMicroelectronics STM32F401RET(Cortex-M4)主控、并通过 SPI 挂载 nRF51822 实现 Bluetooth LE 的双芯片开发板。本篇以 boards/96boards/carbon/doc/stm32f401xe.rst 为骨架,结合当前仓库中该板卡的实际设备树、Kconfig 默认配置与烧录脚本,完整讲解 96Boards Carbon 的硬件资源、Zephyr 支持特性、引脚映射,以及从 DFU 刷写、串口验证到 BLE 功能联调的端到端实操流程。阅读完成后,你将能独立完成该板卡的hello_world烧写、peripheral_hr蓝牙示例验证,并理解双芯片各自独立烧录的开发模型。

板卡概览:一块板卡、两颗芯片、两套固件

96Boards Carbon 板载两颗芯片:一颗是主控STM32F401RET(ARM Cortex-M4,带 FPU,主频最高 84 MHz),另一颗是nRF51822,通过 SPI 与主控相连,专门承担 Bluetooth LE 通信。两颗芯片虽然在同一块物理板卡上,但必须分别独立编程,这决定了该板卡在 Zephyr 中存在两套 board configuration:

  • 96b_carbon/stm32f401xe:面向主芯片 STM32F401RET。绝大多数应用都应使用这套配置,因为它连接了板卡上所有的 breakout I/O 排针;
  • 96b_carbon/nrf51822:面向从芯片 nRF51822。多数用户通常不需要为这颗芯片开发应用,因为 Zephyr 已提供可直接烧录到 nRF51822 的示例固件(samples/bluetooth/hci_spi),为主控侧应用提供蓝牙能力。

两套配置的完整支持清单分别见 96b_carbon_stm32f401xe.yaml 与 96b_carbon_nrf51822.yaml,板级总览见 board.yml(socs: stm32f401xe / nrf51822)。nRF51822 侧的编程与调试细节记录在 boards/96boards/carbon/doc/nrf51822.rst。

硬件资源一览

96Boards Carbon 的硬件组成如下:

  • STM32F401RET6,LQFP64 封装
  • ARM 32 位 Cortex-M4 CPU,带 FPU
  • 最高 CPU 主频 84 MHz
  • VDD 供电范围 1.7 V ~ 3.6 V
  • 512 KB Flash
  • 96 KB SRAM
  • 支持外部中断的 GPIO
  • 12 位 ADC,16 通道
  • RTC
  • 高级控制定时器
  • 通用定时器 × 7
  • 看门狗定时器 × 2
  • USART/UART × 4
  • I2C × 3
  • SPI × 3
  • SDIO
  • USB 2.0 OTG FS
  • DMA 控制器
  • 由 nRF51822 经 SPI 提供的 Bluetooth LE

值得说明的是,板级设备树 96b_carbon_stm32f401xe.dts 中配置了外部高速晶振 HSE(16 MHz)与外部低速晶振 LSI,并通过 PLL 将系统主频锁定到 84 MHz:

&clk_hse { clock-frequency = <DT_FREQ_M(16)>; status = "okay"; }; &pll { div-m = <16>; mul-n = <336>; div-p = <4>; div-q = <7>; clocks = <&clk_hse>; status = "okay"; }; &rcc { clocks = <&pll>; clock-frequency = <DT_FREQ_M(84)>; ahb-prescaler = <1>; apb1-prescaler = <2>; apb2-prescaler = <1>; };

支持的特性与默认配置

96b_carbon/stm32f401xe在 Zephyr 中支持如下硬件特性:

接口控制器驱动/组件
NVICon-chip嵌套向量中断控制器
SYSTICKon-chip系统时钟
UARTon-chip串口
GPIOon-chipgpio
PINMUXon-chippinmux
FLASHon-chipflash
SPIon-chipspi
I2Con-chipi2c
USB OTG FSon-chipUSB device

默认配置位于 96b_carbon_stm32f401xe_defconfig。该文件除了开启CONFIG_SERIALCONFIG_UART_CONSOLECONFIG_GPIO等基础外,还特意开启了:

# Enable MPU CONFIG_ARM_MPU=y # Enable HW stack protection CONFIG_HW_STACK_PROTECTION=y

即默认启用 ARM MPU 与硬件栈保护,这也是该板卡作为 Cortex-M4 平台在安全特性上默认开启的防护能力。

连接与引脚映射

LED

LED信号引脚
LED1 / User1 LEDPD2gpiod 2
LED2 / User2 LEDPA15gpioa 15
LED3 / BT LEDPB5gpiob 5
LED4 / Power LEDVCC电源指示

在设备树中分别定义为green_led_1green_led_2bt_blue_led,并通过aliases映射为led0led1led2,方便应用层按通用别名访问(96b_carbon_stm32f401xe.dts)。

按键

  • BUTTON = BOOT0(SW1)
  • BUTTON = RST(复位)

此外设备树中还定义了一个 User 按键(gpiob 2,低电平有效),映射为sw0,用于 Zephyr 输入子系统。

低速排针(Low Speed Header)

奇数排针:

引脚号信号名STM32F401 功能
1UART2_CTSPA0
3UART2_TXPA2
5UART2_RXPA3
7UART2_RTSPA1
9GNDGND
11USB5VUSB5V
13AIN12PC2
15AIN14PC4
17UART6_TXPC6
19GPIOPC8
21I2C1_SCLPB6
23I2C1_SCAPB7
25I2C2_SCAPB3
27I2C2_SCLPB10
29RST_BTNRST_BTN

偶数排针:

引脚号信号名STM32F401 功能
2SPI2_SSPB12
4SPI2_MOSIPB15
6SPI2_MISOPB14
8SPI2_SCKPB13
10GNDGND
12VCC2VCC2
14AIN13PC3
16AIN15PC5
18UART6_RXPC7
20GPIOPC9
22I2C1_SCLPB8
24I2C1_SDAPB9
26AIN10PC0
28AIN11PC1
30NCNC

排针所对应的 96Boards Low Speed Connector 抽象还体现在 96b_lscon.dtsi 中:它定义了linaro,96b-lscon-3v3连接器节点,将 96Boards 标准 GPIO-A~H(引脚 13~20)映射到 PC2~PC9,并将lscon_96b_i2c0lscon_96b_spi0lscon_96b_uart0/uart1分别绑定到i2c1spi2usart2usart1,供应用通过 96Boards 标准接口编写可移植代码。

外部时钟源

STM32F4 有两颗外部振荡器:低速时钟频率 32.768 kHz(LSI 32.768 kHz),主时钟频率 16 MHz(HSE)。后者经 PLL 倍频至 84 MHz 系统主频。

串口

96Boards Carbon 最多提供 4 路 U(S)ART。Zephyr 控制台输出分配在USART1,默认波特率 115200、8N1。设备树中chosen明确指定了zephyr,console = &usart1zephyr,shell-uart = &usart1,同时usart1(PA9/PA10)、usart2(PA2/PA3)、usart6(PC6/PC7)均已在设备树中启用并配置为 115200。

I2C

96Boards Carbon 最多提供 2 路 I2C,Zephyr 默认映射为:

  • I2C1_SCL : PB6
  • I2C1_SDA : PB7
  • I2C2_SCL : PB10
  • I2C2_SDA : PB3

设备树中i2c1i2c2均以I2C_BITRATE_FAST(400 kHz)启用。

SPI

96Boards Carbon 最多提供 2 路 SPI。SPI1 专用于与 nRF51822 的蓝牙 HCI 通信。Zephyr 默认 SPI 映射:

  • SPI1_NSS : PA4
  • SPI1_SCK : PA5
  • SPI1_MISO : PA6
  • SPI1_MOSI : PA7
  • SPI2_NSS : PB12
  • SPI2_SCK : PB13
  • SPI2_MISO : PB14
  • SPI2_MOSI : PB15

在 96b_carbon_stm32f401xe.dts 中,SPI1 下挂了一个zephyr,bt-hci-spi类型的 HCI 从设备节点(hci_spi),通过reset-gpios(PB4,低有效带上拉)与irq-gpios(PB1)控制 nRF51822,SPI 时钟最高 2 MHz;同时chosenzephyr,bt-hci = &hci_spi将该节点设为蓝牙 HCI 传输通道。

USB

96Boards Carbon 拥有一个支持设备/主机双角色的 USB OTG DRD 控制器,通过板上的 mini OTG USB 接口引出。当前 Zephyr 仅支持 USB 设备功能:

  • USB_DM : PA11
  • USB_DP : PA12

设备树中zephyr_udc0即指向usbotg_fs节点(PA11/PA12),供 USB 设备类应用使用。

编程与调试:两条烧录路径

STM32F4 SoC 主要有两种烧录入口:ROM bootloader(无需额外硬件,通过 BOOT0 引脚触发)与SWD 调试端口(需要额外调试器)。ROM bootloader 支持 USB(DFU)、UART、I2C、SPI 四种烧录通道。本节重点介绍 DFU 路径,这也是 Zephyr 为该板卡配置的默认烧录方式:见 board.cmake 中的board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")

安装 dfu-util

建议至少使用dfu-util v0.8。Debian/Ubuntu 软件源自带的版本可能较旧,必要时需从源码自行构建。

将应用烧写到 96Boards Carbon

  1. 用 micro-USB 线连接 USB OTG Carbon 口与电脑,板卡应上电启动。
  2. 保持按住 BOOT0 开关,同时按下并松开 RST 开关,将板卡强制进入 DFU 模式。
  3. 确认板卡处于 DFU 模式:
$ sudo dfu-util -l dfu-util 0.8 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2014 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to dfu-util@lists.gnumonks.org Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="3574364C3034" Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="3574364C3034" Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=1, name="@Option Bytes /0x1FFFC000/01*016 e", serial="3574364C3034" Found DFU: [0483:df11] ver=2200, devnum=15, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/04*016Kg,01*064Kg,03*128Kg", serial="3574364C3034" Found Runtime: [05ac:8290] ver=0104, devnum=2, cfg=1, intf=5, alt=0, name="UNKNOWN", serial="UNKNOWN"

其中alt=0对应内部 Flash(0x08000000,512 KB,扇区划分 4×16 KB + 1×64 KB + 3×128 KB),与 board.cmake 中--alt=0 --dfuse的参数一致。

在 Linux 主机上还会看到如下 dmesg 确认:

$ dmesg usb 1-2.1: new full-speed USB device number 14 using xhci_hcd usb 1-2.1: New USB device found, idVendor=0483, idProduct=df11 usb 1-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-2.1: Product: STM32 BOOTLOADER usb 1-2.1: Manufacturer: STMicroelectronics usb 1-2.1: SerialNumber: 3574364C3034
  1. 构建并烧写应用(以hello_world为例):
$ west build -b 96b_carbon/stm32f401xe samples/hello_world $ west flash
  1. 用 micro-USB 线连接 USB UART(FTDI)口与电脑,运行终端程序监听输出:
$ minicom -D <tty_device> -b 115200

<tty_device>替换为板卡对应的串口设备(Linux 下通常是/dev/ttyUSB0);-b选项强制指定波特率。

  1. 按下板卡 Reset 按键,终端应输出:
Hello World! arm

验证蓝牙功能

板卡的蓝牙链路是"STM32F401RET 主控 + nRF51822 从芯片(经 SPI1/HCI)"的组合,因此验证分为三步:

  1. 按 boards/96boards/carbon/doc/nrf51822.rst 的说明,将samples/bluetooth/hci_spi示例烧录到 nRF51822:
$ west build -b 96b_carbon/nrf51822 samples/bluetooth/hci_spi $ west flash

⚠️ 注意:hci_spi固件只能烧到 nRF51822,绝不能误烧到主芯片 STM32F401RET——虽然两颗芯片都受 Zephyr 支持,但该蓝牙桥接固件仅在 nRF51822 上运行。nRF51822 侧的烧录需借助外部 SWD 调试器,通过板载丝印标注为 "BLE" 的调试排针(出厂未焊接 0.1 英寸排针,需自行焊接)完成。

  1. 按上文步骤安装 dfu-util。
  2. 构建并烧写samples/bluetooth/peripheral_hr(心率外设示例)到主芯片,目标板卡仍为96b_carbon/stm32f401xe,进入 DFU 模式的方式同上:
$ west build -b 96b_carbon/stm32f401xe samples/bluetooth/peripheral_hr $ west flash
  1. 按照samples/bluetooth/peripheral_hr示例(ble_peripheral_hr)自带的说明验证功能:使用手机或另一台支持 BLE 的设备扫描并连接该外设,即可观察到心率服务的广播与连接行为。

完成以上步骤后,96Boards Carbon 即具备完整的蓝牙连接能力,可在此基础上进一步开发蓝牙应用。

使用 SWD 调试

96b_carbon/stm32f401xe支持 SWD 调试:在板卡右下角安装一个 100 mil(0.1 英寸)排针,将 SWD 调试器连接到该排针的 3V3、GND、CLK、DIO、RST 引脚,然后通过任一 USB 口为 96Boards Carbon 供电。随后即可让调试器通过 SWD 扫描挂接 STM32F401RET 进行调试。

Flash 分区布局

从 96b_carbon_stm32f401xe.dts 可以看到,板载 512 KB Flash 预定义了 MCUboot 友好的分区布局:

分区标签偏移大小
bootmcuboot0x0000000032 KB(只读)
slot0image-00x00020000128 KB
slot1image-10x00040000128 KB
scratchimage-scratch0x00060000128 KB

chosen中的zephyr,code-partition = &slot0_partition表明应用默认链接到 slot0 分区,为后续接入 MCUboot 引导升级预留了镜像槽位与交换空间。

小结

96Boards Carbon 是理解"双芯片异构板卡"在 Zephyr 中组织方式的典型范例:主控96b_carbon/stm32f401xe负责全部外设与用户应用,从芯片96b_carbon/nrf51822只承担 BLE 桥接,二者经 SPI1 上的zephyr,bt-hci-spi节点在设备树层面完成 HCI 对接;烧录路径上,主芯片走 STM32 ROM bootloader + dfu-util(DFU 模式),从芯片走外部 SWD 调试器。沿着本文的 DFU 进入流程、串口验证与蓝牙三步入门的实操路径,即可快速跑通该板卡从裸机点亮到 BLE 通信的完整开发闭环。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询