01 应用场景举例
本文引用地址:在 某些应用中,尤其是电池供电的设备上,需要按需发送数据,如下发指令,让 发送数据,或做相应的操作。为了降低功耗,不能一直处于接收状态,这样功耗会很高。我们可以开启 LoRa (信道活动检测)功能,STM32WL 通过开启 功能,检测前导码的前 1/2/4/8/16 个码元,当检测到 LoRa(唤醒)信号后再开启接收,否则系统进入低功耗,这样会极大的降低系统的整体功耗。
02 STM32WL LoRa CAD 原理和驱动
LoRa 信号可以在低于噪声强度的情况下被正确解调。所以,仅简单通过 RSSI 确定信道是否被占用是行不通的,需要通过信道活动检测 CAD 来检测 LoRa 信号。
LoRa 包帧格式,如下图,前导码,可选报头,有效数据负载。信道活动检测 CAD 模式旨在以尽可能高的功耗效率检测信道上的 LoRa 前导码。
STM32WL LoRa CAD 检测方法:
STM32WL LoRa 设备设置好频率和扩频因子,开启CAD 模式,(注意:无论是否检测到 LoRa 信号,都会产生CAD 检测完成中断 SUBGHZ_IT_CAD_DONE);当有匹配(相同的频率和扩频因子)的 LoRa 信号检测到时,就会产生 CAD 检测到中断 SUBGHZ_IT_CAD_ACTIVITY_DETECTED,SUBGHZ_IT_CAD_DONE 也会产生,并且 SUBGHZ_IT_CAD_DONE和 SUBGHZ_IT_CAD_ACTIVITY_DETECTED 会同时产生。
所以,可通过在产生SUBGHZ_IT_CAD_DONE 中断时是否也同时产生了SUBGHZ_IT_CAD_ACTIVITY_DETECTED 中断来区别是否检测到了 LoRa 信号,进而调用相应的回调函数,或做相应的处理。
DriversSTM32WLxx_HAL_DriverSrcstm32wlxx_hal_subghz.c 中HAL_SUBGHZ_IRQHandler
MiddlewaresThird_PartySubGHz_Phystm32_radio_driverradio_driver.c
MiddlewaresThird_PartySubGHz_Phystm32_radio_driverradio.c 中RadioIrqProcess 函数中
STM32Cube_FW_WL_V1.3.0 的驱动中已经支持 CAD 功能 :
MiddlewaresThird_PartySubGHz_Phyradio.h
MiddlewaresThird_PartySubGHz_Phyradio_ex.h
MiddlewaresThird_PartySubGHz_Phyradio_def.h
MiddlewaresThird_PartySubGHz_Phystm32_radio_driverradio_driver.h
MiddlewaresThird_PartySubGHz_Phystm32_radio_driverradio_driver.c
MiddlewaresThird_PartySubGHz_Phystm32_radio_driverradio.c
但是如何在用户应用中加入 CAD 功能呢?下面介绍如何在SubGHz_Phy_Per 中开启 CAD 功能。
03 如何在 SubGHz_Phy_Per 中开启 CAD
3.1.修改 subghz_phy_app.h 中配置
选择 MODEM 类型为 LORA
设置 CAD 检测的频率和 LORA 接收参数
根据扩频因子 LORA_SPREADING_FACTOR 设置相应的 CAD 检测参数
3.2.在 subghz_phy_app.c 中配置声明
包含头文件 radio_driver.h
修改测试模式为 RADIO_RX
可选,设置串口输出为红色 RED 和绿色 GRN 时的配置
定义 CAD 检测结果标志 RadioCadDone_flag
定义 CAD 检测计数 cad_max_count,cad_count 和 detect_count
声明 CAD 检测完成事件后执行的函数 OnCadDone
声明 CAD 状态机处理函数 Cad_Process
3.3.在subghz_phy_app.c 中配置 SubghzApp_Init 函数
在 SubghzApp_Init 函数中,打印 LoRa 配置参数(可选)
在 RadioEvents 中注册 CAD 检测到要执行的回调函数 OnCadDone
设置 CAD 检测的频率,接收参数,最大包长,CAD 检测的参数
开启 CAD
注册 CAD 状态机处理函数 Cad_Process
3.4.在 subghz_phy_app.c 中配置 CAD 检测完成处理函数和状态机处理函数
04 小结
本 LAT 举例介绍了 LoRa CAD 应用场景,STM32WL LoRa CAD 的原理和相关的驱动,着重介绍了如何在(SubGHz_Phy_Per)中添加 LoRa CAD 功能。
在此基础之上也可以很容易在 SubGHz_Phy_PingPong 和 SubGHz_Phy_AT_Slave示例工程中加入 LoRa CAD 功能。
当然也可以在 LoRaWAN_End_Node 示例工程中加入 LoRa CAD,但是还需要调整如下驱动,后续再补充介绍。
MiddlewaresThird_PartyLoRaWANMacLoRaMacInterfaces.h
MiddlewaresThird_PartyLoRaWANMacLoRaMac.c
MiddlewaresThird_PartyLoRaWANLmHandlerLmHandler.h
MiddlewaresThird_PartyLoRaWANLmHandlerLmHandler.c