在STM32F103CBT6开发板上使用Semtech RAC驱动LR202/LR1121射频芯片实现LoRa双向通信

描述

拿到 Ra-20 或 Ra-11 模组之后,第一个问题通常是:怎么让它跑起来?

本文以 STM32F103CBT6 开发板为例,用 Semtech RAC(Radio Access Controller)驱动 LR2021/LR1121 射频芯片,实现两块板子的 Ping-Pong 双向通信,一块做 Manager 主动发送 PING、一块做 Subordinate 监听并回复 PONG,每 250ms 完成一次往返。

这是 Ra-20/Ra-11 最基础的通信验证流程。跑通这个示例,说明硬件接线、SPI 驱动、射频初始化链路全部正常,可以作为后续二次开发的起点。

01两块板子,一发一收,每 250ms 完成一轮 Ping-Pong

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

角色分工:

角色 行为 启动标志
Manager(主控端) 启动后立即发送 PING,收到 PONG 后计数器 +1,250ms 后发送下一轮 默认
Subordinate(从属端) 仅监听,收到 PING 后立即回复 PONG PING_PONG_START_AS_SUBORDINATE=1

02先搭好编译环境,ARM 工具链 + CMake + Ninja

以下以 Ubuntu / Debian / WSL2 为例。Windows 用户建议使用 WSL2 并参考相同命令。

克隆仓库:

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

安装编译工具链:

sudo apt update
sudo apt install -y gcc-arm-none-eabi binutils-arm-none-eabi gdb-multiarch
sudo apt install -y cmake ninja-build
sudo apt install -y stlink-tools
sudo apt install -y python3 python3-pip
pip3 install --user pyserial
sudo apt install -y git

验证安装:

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

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

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

建议将上述 export 加入 ~/.bashrc,避免每次手动设置。

03一条命令编译,Ra-20 和 Ra-11 的区别只在一个参数

推荐编译命令(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

不同芯片的编译参数对照:

芯片 RAC_RADIO 参数 额外参数 说明
Ra-20 -DRAC_RADIO=lr2021 -DLEGACY_EVK_LR20XX=true LR2021,老版 EVK 引脚定义
Ra-11 -DRAC_RADIO=lr1121 LR1121,标准 LR11xx 引脚
STM32F103CB -DBOARD=STM32F103CB 使用 STM32F103CB HAL

编译成功后在 build/ 目录下生成 ping_pong.elf、ping_pong.hex、ping_pong.bin 三个文件。

04六根 SPI 线 + 三根控制线,照着这张表接就不会错

STM32F103CBT6 与射频芯片的接线关系。以下所有引脚 Ra-20 和 Ra-11 通用:

STM32 引脚 射频芯片引脚 功能 备注
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 额外注意事项:编译时需加 -DLEGACY_EVK_LR20XX=true,DIOX 固定使用 PB9。

Ra-11:核心 SPI 与控制引脚与上表相同;当 RAC_RADIO=lr1121 时,天线切换与 LNA 控制由驱动自动处理。

电源建议:MCU 与射频共用 3.3V 供电,靠近每个 VDD 引脚放置 100nF + 10μF 去耦电容,这一点对射频稳定性很关键。

05烧录固件,两块板子跑起来看日志

使用 st-flash 烧录:

st-flash --serial --reset write build/ping_pong.bin 0x08000000

或使用 STM32_Programmer_CLI:

STM32_Programmer_CLI -c port=SWD sn= -w build/ping_pong.bin 0x08000000 -v -rst

Manager 端编译(默认,启动后立即发送 PING):

cmake ... -DPING_PONG_START_AS_SUBORDINATE=0

Subordinate 端编译(仅监听,收到 PING 后回复 PONG):

cmake ... -DPING_PONG_START_AS_SUBORDINATE=1

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)
...

运行表现:TX/RX LED 每轮通信闪烁一次;每 250ms 完成一次往返;不会出现重复的 smtc_rac_init 或看门狗复位。

06三个最容易踩的坑,都帮你填好了

故障现象 原因 解决
反复出现 smtc_rac_init / 看门狗复位 DIO 引脚在回调注册前就配置了中断,或主循环存在过长延时 本仓库已修复,确认使用最新代码
TX done 回调不触发 ping_pong target 定义了 ENABLE_PERIODIC_UPLINK,与 ping-pong 事务冲突 编译时确保未定义该宏
射频类型不匹配 编译参数中的 RAC_RADIO 与实际芯片不一致 Ra-20 用 -DRAC_RADIO=lr2021,Ra-11 用 lr1121

最后的话

这个 Ping-Pong 示例是 Ra-20/Ra-11 开发的最小闭环。

它验证了五件事:SPI 驱动正确、射频初始化成功、RAC 协议栈跑通、双板收发正常、日志系统可用。跑通这个示例之后,你可以在 Manager 端替换 payload 内容,加入自己的传感器数据,把 Ping-Pong 升级为实际业务通信。

整个代码仓库已经托管在 GitHub(Ai-Thinker-Open/ra11-ra20),包含完整的 HAL 适配和 RAC 驱动,开箱即用。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分