+ o, @5 b& M$ n& r0 V* C本应用笔记将指导用户完成基于STM32WL系列微控制器构建特定LoRa®应用程序所需的所有步骤。 % M8 y0 h( p8 L
LoRa®是一种无线通信网络,旨在以极低的比特率进行远距离通信,并延长电池供电型传感器的寿命。LoRaWAN®定义了通信和安全协议,此协议会确保与LoRa®网络的互操作性。
- N9 c' i* c! U) ]0 uSTM32CubeWL MCU软件包中的固件兼容LoRa Alliance®规范协议LoRaWAN®,并具有以下主要特性:
- r2 J1 n# z7 e4 y6 G- 可直接集成应用程序
- 低功耗LoRa®解决方案的简易附加组件
- CPU负载极低
- 无延迟要求
- STM32存储器占用空间小
- 低功耗定时服务 0 ?$ C5 I9 Q1 l2 z
7 f( w- _+ }% E4 i5 V% O! x& S/ rSTM32CubeWL MCU软件包的固件基于STM32Cube HAL驱动程序。
5 R9 i+ z- w2 {6 O本文提供了有关带STM32WL55JC的NUCLEO-WL55JC开发板(适于高频段的订购代码为NUCLEO-WL55JC1,适于低频段的订购代码为NUCLEO-WL55JC2)和带STM32WL5M的B-WL5M-SUB1连接扩展板的客户应用程序示例。 5 l$ T9 o" [' s# c0 Q
为了充分利用本应用笔记中的信息并创建应用程序,用户必须熟悉 STM32 系列微控制器、LoRa®技术,并了解低功耗管理和任务排序等系统服务。3 g' q1 D f3 T; C" r
STM32CubeWL在基于Arm® Cortex®-M处理器的STM32WL系列微控制器上运行。
* K7 j' L4 k/ |" g; ~' v! I0 H0 M
# H0 ^, b2 z( ^4 R注意: Arm是Arm Limited(或其子公司)在美国和/或其他地区的注册商标。
, K5 G' F$ [8 X) s
* x' j2 `8 }4 E" iSTM32CubeWL概述 / X0 Z3 w3 F# s2 X7 E0 m
STM32CubeWL MCU软件包的固件包括以下资源(参见图1): ; M% w: P! y) Y. ~7 x8 J
板级支持包: ' s ?9 y, E+ [4 ^
- STM32WL_Nucleo驱动程序
- B-WL5M-SUBG1驱动程序 1 V: I, T% z) `5 N; o
$ j" N \* w$ D* ?- q) Y. ESTM32WLxx_HAL_Driver
( r8 O9 o" w. u' i/ [- o8 O中间件:
# H" x) }, s; }! C6 r7 ?- LoRaWAN包含:
+ u+ @' ^2 M& P/ K- LoRaWAN层
- LoRa实用程序
- LoRa软件密码引擎
- LoRa状态机 5 i! ?% i/ T" n: l6 j; ^7 f$ a6 R
7 k3 Z! c' V2 C; F. o: u. Z
- 包含无线电和radio_driver接口的SubGHz_Phy层中间件
6 o3 m' G. |& _( TLoRaWAN应用程序:- u! H9 B' G, w { Q
- LoRaWAN_AT_Slave(单核及双核)
- LoRaWAN_End_Node(单核、双核、使用FreeRTOS的单核以及使用FreeRTOS的双核)
+ S# v5 |* k4 f9 F7 x
# p" T4 g! F9 t- \2 TSubGHz_Phy应用程序:( Z: N/ u) r3 d/ B
- SubGHz_Phy_PingPong(单核及双核)
- SubGHz_Phy_Per(单核)
- SubGHz_Phy_AT_Slave(单核)
- SubGHz_Phy_LrFhss(单核)
' L. }& z4 @& |( D4 n 2 I+ u3 H1 F/ ^* i& z. E
另外,此应用程序还提供与以下设备的高效系统集成:
- p5 W, _( _' |5 _$ I2 Q7 Y- 调度器,用于在后台执行任务并在没有活动时进入低功耗模式
- 定时器服务,为应用提供在RTC上运行的虚拟定时器(在停止和待机模式下)
. V5 n/ L- q# D; A1 z( s' q3 z4 f A : R u! k/ r u: O& b" r& Y/ B
若需更多信息,请参见第9节。
8 j; l3 y9 ^; [) Q0 C ?3 SubGHz HAL驱动程序 + f3 G. U! l7 x y: w
本节主要介绍SubGHz HAL(未详述其他HAL功能,如定时器或GPIO)。
+ }2 @. s9 J+ z7 U& B" LSubGHz HAL直接位于sub-GHz无线电外设上方(参见图3)。 7 w! _! Y+ R9 W) B3 q* V
SubGHz HAL驱动程序基于简单的一次性面向指令架构(无完整过程)。因此,未定义LL驱动程序。 4 ?" b2 z+ G0 j% S2 _5 }% R
此SubGHz HAL驱动程序由以下主要部分组成:
- D' P) P) [- S& G L0 ?; Z- 句柄、初始化和配置数据结构
- 初始化API
- 配置和控制API
- MSP和事件回调
- 基于SUBGHZ_SPI的总线I/O操作(固有服务)
/ b" D* C; W+ E1 J4 y+ b8 ?" t
) T) I. V0 i1 B4 |4 W# Z: F! d由于HAL API主要基于总线服务通过一次性操作发送指令,因此,除了复位/就绪HAL状态外,不使用功能状
7 ?/ E& l& D) ~% |/ h态机。
& n5 W6 U/ k( k+ x2 e [. a, K
) R3 X* D* q; ]5 b }: E3.1 SubGHz资源
" D& B7 T& W" q! r, L# C初始化无线电时会调用以下HAL SubGHz API: 4 L' N+ U5 J2 M+ x: l% W
- 声明SUBGHZ_HandleTypeDef句柄结构。
- 通过调用HAL_SUBGHZ_Init(&hUserSubghz) API,初始化sub-GHz无线电外设。
- 通过实现HAL_SUBGHZ_MspInit() API,初始化SubGHz低级资源: # n7 y1 A S: p$ J
# r `6 ]; n& l1 {: g# G: u% ~
- PWR配置:启用sub-GHz无线电外设的唤醒信号。 0 {" ?& X" |7 k7 k3 X# F2 l
- NVIC配置:
5 Y) V5 u$ E6 X; X ☆ 启用NVIC无线电IRQ中断。
9 [, n3 Q/ t$ ]1 L# ~+ @" I ☆ 配置sub-GHz无线电中断优先级。
! r' \7 I+ G- M; @- o4 \在stm32wlxx_it.c 文件中会调用以下HAL无线电中断:
/ h, b( z3 A# \2 I# g# A- SUBGHZ_Radio_IRQHandler中的 HAL_SUBGHZ_IRQHandler。
- ?; z- t% _- p' ]1 c/ g 3 m6 x- V0 u: ]' q+ `4 i3 V
3.2 SubGHz数据传输
5 c6 N: k1 u) `Set 指令操作在轮询模式下使用HAL_SUBGHZ_ExecSetCmd(); API执行。
5 _; Y3 X3 c6 }" C8 L. N6 _Get Status 操作在轮询模式下使用HAL_SUBGHZ_ExecGetCmd(); API执行。 + V% ^- Z, o) s! v, O
读/写寄存器访问操作在轮询模式下使用以下API执行:
' H; Q' j+ p! j1 Y% J# \, T- HAL_SUBGHZ_WriteRegister();
- HAL_SUBGHZ_ReadRegister();
- HAL_SUBGHZ_WriteRegisters();
- HAL_SUBGHZ_ReadRegisters();
- HAL_SUBGHZ_WriteBuffer();
- HAL_SUBGHZ_ReadBuffer();5 {7 r- O5 j# l4 d
3 A4 z# _+ l* |9 s+ o4 BSP STM32WL板
/ ]' u1 }5 t8 a本 BSP 驱动程序提供了一系列无线电射频服务管理功能,如射频开关设置和控制、TCXO 设置以及 DC/DC+ U# e, @5 i x* f& w) t
设置。
' `+ {6 Z0 f4 B" m3 o- p注意: 无线电中间件(SubGHz_Phy)通过radio_board_if.c/h 接口文件连接无线电 BSP。当使用定制用户板时,建议执行一个以下选项:
4 Q8 O2 c! `, W3 n# r, l+ h# D& B$ h
- 第一个选项
; g; }+ J' ]* {5 i' `! I - 复制BSP/STM32WLxx_Nucleo/目录。 D- b: y* O/ o M* {# T7 P
- 使用以下信息重命名并更新用户BSP API:
0 q6 M7 \" Y) y( J* D/ n; T0 K ☆ 用户射频开关配置和控制(如引脚控制或端口编号)
1 B9 G1 X. n6 G3 t/ v ☆ 用户TCXO配置 3 d1 S- w" ?& t$ X: M+ q8 l8 y
☆ 用户DC/DC配置 7 j3 k6 v2 n- K
- 将IDE项目中的STM32WLxx_Nucleo BSP文件替换为用户BSP文件。 + v" _ m! Y$ C
☆ 禁用Core/Inc/platform.h 中的 USE_BSP_DRIVER,并在 radio_board_if.c中直接实现 BSP功能。
) r a, ^; L% S$ O: P- E4 M5 j' ~$ }& p* H M- j$ T% ~( H
4.1 频段
2 S7 `. z( |3 U/ D. g oSTM32WL系列上可以使用两种Nucleo板: 1 b" M) Y3 K- E' w' [
- NUCLEO-WL55JC1:高频段,适于865 MHz至930 MHz之间的频率
- NUCLEO-WL55JC2:低频段,适于470 MHz至520 MHz之间的频率
8 M$ K+ i6 m# \% r( |# |, F0 ? % a" h; k, @" F
如果用户试图在低频段板上运行在868 MHz下编译的固件,预计射频性能会非常差。
+ e$ |7 Y9 L2 ?8 v固件不会检查其所在的板的频段。
3 u$ B4 `! c; R% E0 o q4 e# h) G. c) |+ V
4.2 RF开关 ) z$ \$ ^' N0 B5 E5 c, P" E3 e* L6 ^
STM32WL Nucleo板内置一个射频3端口开关(SP3T),使用同一个板即可实现以下模式:
+ a( _9 j, x+ I3 q- 高功率输出
- 低功率输出
- 接收 8 G. m! p: n3 B1 n
# U/ ^7 u/ _6 @
表3. BSP无线电开关 RF状态与开关配置如下表所示。& Z1 q, i5 P. {) X! P- R n+ S
表4. RF状态与开关配置
( d X8 O6 J( K产看更多该应用笔记详情,请点击附件下载查看>> |