实战经验 | 如何在用户应用中开启 LoRa CAD

发布者:工号待定最新更新时间:2024-01-05 来源: elecfans关键字:实战经验  LoRa  CAD  STM32 手机看文章 扫描二维码
随时随地手机看文章

01

LoRa CAD 应用场景举例


在 STM32WL LoRa 某些应用中,尤其是电池供电的设备上,需要按需发送数据,如下发指令,让 STM32WL LoRa 发送数据,或做相应的操作。为了降低功耗,STM32WL不能一直处于接收状态,这样功耗会很高。我们可以开启 LoRa CAD(信道活动检测)功能,STM32WL 通过开启 CAD 功能,检测前导码的前 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_driver adio_driver.c



MiddlewaresThird_PartySubGHz_Phystm32_radio_driver adio.c 中RadioIrqProcess 函数中



STM32Cube_FW_WL_V1.3.0 的驱动中已经支持 CAD 功能 :

MiddlewaresThird_PartySubGHz_Phy adio.h
MiddlewaresThird_PartySubGHz_Phy adio_ex.h
MiddlewaresThird_PartySubGHz_Phy adio_def.h
MiddlewaresThird_PartySubGHz_Phystm32_radio_driver adio_driver.h
MiddlewaresThird_PartySubGHz_Phystm32_radio_driver adio_driver.c
MiddlewaresThird_PartySubGHz_Phystm32_radio_driver adio.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


关键字:实战经验  LoRa  CAD  STM32 引用地址:实战经验 | 如何在用户应用中开启 LoRa CAD

上一篇:为什么使用CubeMx配置NVIC时不见子优先级选项
下一篇:如何为LED切换配置GPIO

推荐阅读最新更新时间:2024-11-08 20:23

STM32内存使用及分配
堆空间和栈空间配置 Stack Size,一般小工程0X400足够,我们综合实验才设置0X1000就够用,所以默认无需设置太大。Stack_Size的值根据你程序中局部变量最大尺寸计算, Heap Size,如果没有用到标准库的malloc,就是废物,纯属浪费内存,所以直接设置为0即可。Heap_Size的值如果程序中没有用到动态内存malloc就默认不用管。 编译后空间使用情况 在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息: Program Size: Code=6320 RO-data=4864 RW-data=44 ZI-data=1636 Code :是程序中代码所占字节
[单片机]
stm32单片机与pic单片机的优缺点对比分析
stm32单片机 由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名其强大的功能主要表现在: stm32单片机特性 1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.25DMIPS/
[单片机]
<font color='red'>stm32</font>单片机与pic单片机的优缺点对比分析
求一种STM32单片机玩转TFTLCD彩屏设计方案
一、功能简介 本项目使用Proteus8.12仿真STM32单片机控制器,使用ST7735R彩屏模块等。 主要功能如下: (1)汉字字符显示; (2)2D图形显示; (3)图片显示; 二、软件设计 //显示界面1--汉字字符显示 void _show_demo1(void) { FRONT_COLOR=WHITE; LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,12, Hai XiaoYi ); FRONT_COLOR=RED; LCD_ShowString(10,30,tftlcd_data.width,tftlcd_data.height,16, Hai
[单片机]
求一种<font color='red'>STM32</font>单片机玩转TFTLCD彩屏设计方案
STM32的USRT通讯实现
1.实现平台 两块STM开发板,杜邦线; 初始化板子上的串口; 为串口开启中断; 根据需要制定两个板子的通讯协议。 2.实现过程 2.1协议制定 在工程实践的过程中,常常需要两个板子进行通讯来实现功能。现在常常使用的通讯方法常常是CAN通信,TTL通讯,RS485通讯,RS232通讯,I2C,I2S,SPI等。UART也是一种常用的通讯方式,这种通讯方式为全双工。 制定协议时应注意以下几点: 起始符,结束符和校验位 在为制定通讯协议的时候,首先应该确定发送数据的起始符,结束符和校验位;在设置起始符,结束符的时候应该避免和发送的内容发生冲突。结束符最好可以设置多位,一般可以设置两个位作为结束符;校验位需要在结束符之前;起
[单片机]
Semtech将在CITE上举办LoRa生态发展及创新应用论坛
中国电子信息博览会(CITE)- 高性能模拟和混合信号半导体产品及先进算法领先供应商 Semtech Corporation (纳斯达克交易代码: SMTC )宣布:将于4月11日在于深圳举行的中国电子信息博览会(CITE)上举办一场“LoRa生态发展及创新应用论坛”。Semtech将携手其中国LoRa生态合作伙伴和解决方案厂商,围绕“深化LoRa生态合作,共创中国IoT未来”的主题,展示LoRa最新技术、产品和创新应用,介绍LoRa生态在全球及中国的发展,分享LoRa技术在智慧城市、智慧公共事业及智能楼宇等领域的成功应用案例,全天共计21场主题演讲和专题交流。 “LoRa技术以其持续创新力、可扩展性、经验证等特点,已经成为中
[物联网]
STM32串口通信-USART全面讲解
通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个全双工的串行通信设备;UART(Universal Asynchronous Receiver and Transmitter)是在USART基础上裁掉了同步通信功能,只有异步通信。 USART满足外部设备对工业标准NRZ异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率。USART支持同步单向通信和半双工单线通信;还支持局域互连网络、智能卡协议与LrDA SIR ENDEC规范;还支持DMA,可实现高速数据通信。 如下图是USART功能框图,我们将对此框图进
[单片机]
<font color='red'>STM32</font>串口通信-USART全面讲解
Contiki 在STM32 中的移植
使用野火的板子进行Contiki移植: 开发环境:IAR+STM32 代码移植基本上参照xukai871105 前辈的教程,不同之处是使用的是寄存器的操作方式,并没有是用STM32 的库函数。 代码如下: #include contiki.h #include stm32/usart/usart.h /* For usart_puts()*/ #include stdio.h /* For printf() */ #include sys/clock.h #include sys/process.h #include sys/procinit.h #include sys/etimer.h #inclu
[单片机]
STM32的推挽(push-pull)和开漏(open-drain)
【Open-Drain与Push-Pull】 GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。(General Purpose Input Output,简称为GPIO或总线扩展器,利用工业标准I2C、SMBus?或SPI?接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。)但是在配置GPIO管脚的时候,常会见到两种模式:开漏输出(open-drain,漏极开路)和推挽输出(push-pull)。 【Push-Pull推挽输出】 原理: 输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved