做 LoRaWAN 设备接入最怕的往往不是信号差,而是设备明明活着,却突然不出声。我前段时间调一批 STM32WL 节点,用的是 STM32CubeWL 中间件 2.5.0,MAC 版本 1.0.4,频段 AU915。接入 ChirpStack v4 联调时,入网上行都正常,但只要 ChirpStack 下发的 LinkADRReq 一到,节点就“冻结”,后续上行彻底没有,服务器侧只能看到最后一次上报。同一个固件切到 TTN 后跑了两周都没有复现,典型的“服务器差异”问题。后来逐层抓到 MAC 命令、再翻 ST 协议栈源码才搞明白:不是射频,不是天线,是 ADR 状态机在接收非法信道掩码后把自己锁住了。这篇文章把全过程和一个可复现的排查路径记录下来,适合正在做 STM32WL + LoRaWAN 接入,尤其是 AU915 频段,并且设备要同时兼容 ChirpStack 和 TTN 的工程师参考。
1. 问题现场:设备不挂,就是不出声
1.1 复现条件与固件背景
先说硬件和软件环境,因为这个问题的复现对版本极其敏感。主板基于 STM32WL55,射频部分直接使用芯片内置的 SX126x radio,没有外挂 PA。固件用 STM32CubeIDE,LoRaWAN Middleware 版本 2.5.0,协议栈版本 1.0.4,频段配置为 AU915。入网使用 OTAA,DevEUI、JoinEUI、AppKey 都正常。ChirpStack 版本是 v4.3.1,网关通过 UDP Packet Forwarder 接入,频点从 915.2MHz 开始,信道规划也选了 AU915。TTN 那边用的是同一台网关、同一套设备,只是在 TTN Console 里重新注册了设备,所以射频链路本身