AN5406 是意法半导体针对STM32WL 系列 Sub-GHz 无线 MCU推出的官方应用笔记,也是基于STM32CubeWL固件包开发 LoRa®/LoRaWAN® 应用的标准落地手册。这份文档完整覆盖物理层调试、协议栈配置、双核通信、低功耗管理、密钥安全等全环节,直接适配 NUCLEO-WL55JC1/2 与 B-WL5M-SUB1 开发板,可快速落地物联网远距离低功耗无线项目。
资料获取:【应用笔记】AN5406 如何使用STM32CubeWL构建LoRa®应用程序
1. 先理清:STM32CubeWL 软件包全貌
STM32CubeWL 是 STM32WL 的专属固件包,全部基于 STM32Cube HAL 驱动,开箱即可对接 LoRa 联盟标准,核心组成一目了然:
- 驱动层:STM32WLxx_HAL_Driver + CMSIS,负责 Sub-GHz 无线电、GPIO、RTC 等硬件控制
- BSP 板级支持:适配 NUCLEO-WL55JC 与 B-WL5M-SUB1,管理 RF 开关、TCXO、DC/DC
- 中间件:LoRaWAN 协议栈(含 MAC、密码、区域配置)+ SubGHz_Phy 物理层抽象
- 应用示例:LoRaWAN_End_Node、LoRaWAN_AT_Slave、SubGHz_Phy_PingPong、SubGHz_Phy_Per、SubGHz_Phy_LrFhss
- 实用工具:序列发生器、RTC 定时器服务、低功耗管理、系统时间、DMA 跟踪
硬件频段严格区分:
- NUCLEO-WL55JC1:高频 865–930MHz
- NUCLEO-WL55JC2:低频 470–520MHz混用固件会导致射频性能急剧下降,开发前务必核对硬件型号。
2. 核心架构:从硬件到应用的四层通路
AN5406 把 LoRa 应用架构拆为四层,逻辑清晰、便于移植:
- SubGHz HAL:直接驱动片内 Sub-GHz 无线电,提供初始化、寄存器读写、收发控制 API
- BSP:封装射频开关、TCXO、电源配置,自定义硬件只需修改 radio_board_if.c
- SubGHz_Phy 中间件:radio.c+radio_driver.c,统一 LoRa/FSK/LR-FHSS 调制接口
- LoRaWAN 中间件:MAC 层 + 区域层 + 密码引擎 + LmHandler,屏蔽状态机复杂度
- 应用层:基于事件驱动,配合序列发生器进入低功耗,无 RTOS 也能稳定运行
配套实用工具是低功耗关键:
- 序列发生器:后台任务调度,无活动时自动进低功耗
- RTC 定时器服务:停止 / 待机模式仍计时,支持虚拟定时器
- 低功耗管理器:自动切换睡眠 / 停止 2 / 关断模式,停止 2 模式功耗仅 2μA
- 跟踪工具:DMA 输出日志,不阻塞实时流程
3. LoRaWAN 协议栈:开发最核心的配置环节
STM32CubeWL 兼容LoRaWAN 1.0.3/1.0.4双版本,支持全球主流区域频段(EU868、US915、CN470、AS923 等)STMicroelectronics。
3.1 设备激活二选一
- OTAA 空中激活:DevEUI、JoinEUI、AppKey、NwkKey,重启重连更安全
- ABP 个性化激活:DevAddr、NwkSKey、AppSKey,上电即可入网
3.2 设备类别与关键参数
- 默认Class A,收发时隙最省电;支持 Class B/Class C 按需开启
- ADR 自适应数据率:默认开启,网络自动优化速率与功率
- Rx 窗口:Rx1/Rx2 延迟、频率、速率可自定义配置
- NVM 上下文管理:掉电保存网络状态,重启快速恢复
3.3 LmHandler:简化协议栈交互
LmHandler 是官方封装的高层接口,不用直接操作 MAC 原语,常用 API:
- LmHandlerInit:初始化状态机
- LmHandlerConfigure:加载频段、激活方式、功率参数
- LmHandlerJoin:发起入网
- LmHandlerSend:发送上行数据
- 回调 OnJoinRequest/OnTxData/OnRxData:处理入网、收发事件
4. SubGHz_Phy 物理层:点对点与射频测试
不跑 LoRaWAN,只做点对点 LoRa/FSK 通信,直接用 SubGHz_Phy 示例:
- PingPong:双板互发 Ping/Pong,验证基础链路
- PER:数据包错误率测试,评估射频质量
- LrFhss:远距离跳频扩频,抗干扰更强
- AT_Slave:UART+AT 指令控制,快速做无线 Modem
调制配置集中在 subghz_phy_app.h:
- LoRa:带宽 125/250/500kHz、扩频因子 SF7–SF12、编码率 4/5~4/8
- FSK:速率 50kbps、带宽 50kHz、频偏可调
- 发射功率:-17~22dBm,符合区域法规
5. 工程必改配置
所有参数都有明确宏定义,直接定位文件修改:
- 激活方式:lora_app.h 设置 ACTIVATION_TYPE_OTAA/ABP
- 区域频段:lorawan_conf.h 启用 REGION_xx,sys_conf.h 设置 ACTIVE_REGION
- ADR 与数据率:LORAWAN_ADR_STATE、LORAWAN_DEFAULT_DATA_RATE
- 低功耗:sys_conf.h LOW_POWER_DISABLE=0 启用停止 2 模式
- 调试跟踪:APP_LOG_ENABLED、VERBOSE_LEVEL 控制日志输出
- 上下文:CONTEXT_MANAGEMENT_ENABLED 启用掉电保存
6. 双核管理:CPU1 与 CPU2 的稳定通信
STM32WL5x 为双核架构:
- CPU1(M4):跑用户应用
- CPU2(M0+):跑无线协议栈、无线电底层、KMS 安全服务
核间靠IPCC+MBMUX 邮箱通信:
- 通道分系统、跟踪、KMS、无线电、协议栈五类
- 消息格式:Cmd (指令)→Resp (响应)、Notif (通知)→Ack (确认)
- 共享 RAM 存储参数与状态,启动时 CPU1 主导同步 CPU2
双核固件分开烧录:
- CPU1:0x08000000
- CPU2:0x08020000
7. KMS 密钥管理:LoRaWAN 安全合规
AN5406 集成KMS 密钥管理服务,符合 PKCS#11 标准,密钥不外露:
- 静态嵌入式密钥:根密钥烧录在 Flash 安全区,不可修改
- 动态 NVM 密钥:会话密钥运行时生成,存储在 2KB 双缓冲 Flash 页
- 支持 AES-CBC/CCM/GCM/CMAC,保障 LoRaWAN 加密安全
最小 NVM 分配 4KB,可存约 14 个动态密钥,满足常规终端频繁入网需求。
8. 系统性能:官方实测数据(NUCLEO-WL55JC1)
- Flash 占用:LoRaWAN_End_Node 约 63KB,协议栈占比超 50%
- RAM 占用:约 10.7KB,小容量 MCU 也能跑
- 功耗:停止 2 模式≈2μA;接收≈7mA;发射≈23mA
- 实时性:Tx 完成后 Rx1 窗口延迟 1s(±20μs),严格遵循 LoRa 时序
9. 快速上手:5 步跑通示例
- 打开 STM32CubeWL 对应工程(LoRaWAN_End_Node)
- 修改频段、激活参数、密钥信息
- 编译生成 CPU1 与 CPU2 固件
- 烧录到 NUCLEO-WL55JC 开发板
- 对接 LoRaWAN 网关,查看上行数据与接收下行
AN5406 是STM32WL LoRa 开发的标准答案,从物理层射频调试到 LoRaWAN 协议栈入网,从双核通信到安全密钥,全部给出标准化实现与可直接编译的配置。配合 STM32CubeWL 固件包,不用从零造轮子,就能快速做出远距离、低功耗、合规稳定的 LoRa/LoRaWAN 物联网终端,广泛适用于表计、安防、工业传感、智慧农业等场景。
118