Ping-Pong 示例(STM32F103CBT6 + Ra-20 / Ra-11 中文说明

项目简介

本示例演示了在 STM32F103CBT6 开发板上,使用 Semtech Radio Access Controller (RAC) 驱动 LR2021 或 Ra-11 射频芯片实现 LoRa 双向 Ping-Pong 通信。


1. 编译环境搭建(详细步骤)

1.1 克隆仓库

git clone https://github.com/Ai-Thinker-Open/ra11-ra20.git Ra-20_Ra-11
cd Ra-20_Ra-11
git submodule update --init --recursive   # 如果仓库包含子模块

1.2 安装编译工具链(以 Ubuntu / Debian / WSL2 为例)

sudo apt update

# 1. ARM 交叉编译工具链(推荐 10.x 或 12.x)
sudo apt install -y gcc-arm-none-eabi binutils-arm-none-eabi gdb-multiarch

# 2. 构建系统
sudo apt install -y cmake ninja-build

# 3. ST-Link 烧录与调试工具
sudo apt install -y stlink-tools

# 4. Python3 + pyserial(用于 debug.py 串口监视和烧录辅助脚本)
sudo apt install -y python3 python3-pip
pip3 install --user pyserial

# 5. Git(通常已预装)
sudo apt install -y git

1.3 验证安装是否成功

运行以下指令确定工具是否均已成功安装

arm-none-eabi-gcc --version
cmake --version          # 要求 ≥ 3.16
ninja --version
st-info --version
python3 -c "import serial; print('pyserial OK')"

1.4 设置环境变量(可选)

如果 arm-none-eabi-gcc 不在默认 PATH 中,请导出工具链目录:

export ARM_GNU_BIN=/usr/bin
# 或
export ARM_GNU_BIN=/opt/gcc-arm-none-eabi-10/bin

建议将上述命令加入 ~/.bashrc~/.zshrc

1.5 推荐工程结构

~/project/stm32_project/semtech_chip_driver/Ra-20_Ra-11/
├── examples/               # CMake 入口(包含readme文档)
├── smtc_rac_lib/
├── examples/smtc_hal_f1/   # F103-specific HAL
├── build/                  # 编译生成的中间文件以及最终文件 (可删除)
└── ...

2. 编译指令

推荐编译命令(Ra-11 + Legacy EVK 引脚定义)

rm -Rf build/ ; \
cmake -L -S examples \
      -B build \
      -DCMAKE_BUILD_TYPE=MinSizeRel \
      -DLEGACY_EVK_LR20XX=true \
      -DBOARD=STM32F103CB \
      -DRAC_RADIO=lr1121 \
      -G Ninja ; \
cmake --build build --target ping_pong

常用变体

射频芯片 编译参数示例 说明
Ra-20 -DRAC_RADIO=lr2021 -DLEGACY_EVK_LR20XX=true 老版 EVK 引脚定义
Ra-11 -DRAC_RADIO=lr1121 标准 LR11xx 引脚
STM32F103CB -DBOARD=STM32F103CB ... 使用 STM32F103CB HAL

编译成功后在 build/ 目录下会生成:


3. 硬件接线(STM32F103CBT6)

公共引脚(Ra-20 / LR1121 通用)

STM32F103CBT6 引脚 射频芯片引脚 功能 备注
PA4 NSS / CS SPI 片选
PA5 SCK SPI 时钟
PA6 MISO SPI MISO
PA7 MOSI SPI MOSI
PB14 NRST 射频复位 低电平有效
PB1 DIO1 / DIOX 射频中断 上升沿触发
PA0 BUSY 射频忙信号 LR11xx / LR20xx
PA8 LED_TX 发送时亮
PB15 LED_RX 接收时亮
PA9 UART_TX 调试串口 115200 8N1
PA10 UART_RX 调试串口

Ra-20(Legacy EVK 模式)

Ra-11

电源建议:MCU 与射频共用 3.3V 电源,靠近每个 VDD 引脚放置 100nF + 10µF 去耦电容。


4. 烧录固件

使用 st-flash

st-flash --serial <ST-LINK序列号> --reset write build/ping_pong.bin 0x08000000

使用 STM32_Programmer_CLI

STM32_Programmer_CLI -c port=SWD sn=<ST-LINK序列号> -w build/ping_pong.bin 0x08000000 -v -rst

5. 运行与验证

双板配置

正常运行日志(Manager 端)

成功运行后应持续看到以下日志(计数器不断递增):

INFO: smtc_rac_init
INFO: USP/RAC Version: 1.0.0 
...
INFO: starting ping-pong as manager
INFO: sending (value=0, delay=0ms)
INFO: usp/rac: transaction is starting
INFO: usp/rac: new event: transaction (transmission) has ended (success)
INFO: receiving...
INFO: usp/rac: transaction is starting
INFO: usp/rac: new event: transaction (reception) has ended (success)
INFO: payload is correct, continuing
INFO: sending (value=1, delay=250ms)
...

6. 常见问题排查