7 x: {, H3 c: w2 ~本应用笔记将指导用户完成基于STM32WL系列微控制器构建特定LoRa®应用程序所需的所有步骤。 % I: Z! K5 a+ F: t" e6 y+ T
LoRa®是一种无线通信网络,旨在以极低的比特率进行远距离通信,并延长电池供电型传感器的寿命。LoRaWAN®定义了通信和安全协议,此协议会确保与LoRa®网络的互操作性。 $ ^, h9 A$ V9 D7 }7 L
STM32CubeWL MCU软件包中的固件兼容LoRa Alliance®规范协议LoRaWAN®,并具有以下主要特性:
/ @; x5 G; x7 L- 可直接集成应用程序
- 低功耗LoRa®解决方案的简易附加组件
- CPU负载极低
- 无延迟要求
- STM32存储器占用空间小
- 低功耗定时服务 . Q; ^1 W7 Q" U
9 B& B% o0 z( e( f! |5 D- `' JSTM32CubeWL MCU软件包的固件基于STM32Cube HAL驱动程序。 ; ]" q. B( B# J' H: m
本文提供了有关带STM32WL55JC的NUCLEO-WL55JC开发板(适于高频段的订购代码为NUCLEO-WL55JC1,适于低频段的订购代码为NUCLEO-WL55JC2)和带STM32WL5M的B-WL5M-SUB1连接扩展板的客户应用程序示例。 ( R K9 Q, ]; i7 _' W, v
为了充分利用本应用笔记中的信息并创建应用程序,用户必须熟悉 STM32 系列微控制器、LoRa®技术,并了解低功耗管理和任务排序等系统服务。' r- B, X7 Q1 O3 Q2 m
STM32CubeWL在基于Arm® Cortex®-M处理器的STM32WL系列微控制器上运行。 2 n0 p7 Q' r0 l: s( R- v+ u9 Q
' k2 K2 U( r( a, v5 y注意: Arm是Arm Limited(或其子公司)在美国和/或其他地区的注册商标。# J7 _' J0 A! l- |
" }" [7 R6 O( b6 m. g
STM32CubeWL概述 3 b/ c) N R2 Q+ x
STM32CubeWL MCU软件包的固件包括以下资源(参见图1): 1 k# T' i% d1 m2 N
板级支持包: 5 r" Q0 l$ U! G
- STM32WL_Nucleo驱动程序
- B-WL5M-SUBG1驱动程序
4 M1 D) Z) T8 \8 D- X r
0 z/ t9 V+ B$ I" }7 {5 eSTM32WLxx_HAL_Driver
/ z5 ^- Z# p! K( ^+ h中间件:
9 I" x: Y* O: _/ c* \- LoRaWAN包含:
) E: d8 w2 e& z0 m& [- LoRaWAN层
- LoRa实用程序
- LoRa软件密码引擎
- LoRa状态机 + @. v% W* M$ L4 ?' _4 ~- p' F A
8 R5 |0 b$ U7 ^% [4 C8 ~$ T
- 包含无线电和radio_driver接口的SubGHz_Phy层中间件
2 V# c w7 u1 dLoRaWAN应用程序:7 H) a2 n" Y; G6 J* Z
- LoRaWAN_AT_Slave(单核及双核)
- LoRaWAN_End_Node(单核、双核、使用FreeRTOS的单核以及使用FreeRTOS的双核) x' z F9 B& I9 H9 n! Q$ m
; h& }+ ~( W" m; L! d8 W
SubGHz_Phy应用程序:
0 E1 o' Y6 H7 t ?- SubGHz_Phy_PingPong(单核及双核)
- SubGHz_Phy_Per(单核)
- SubGHz_Phy_AT_Slave(单核)
- SubGHz_Phy_LrFhss(单核)
# M% B' N4 l8 L% M; k, w ) X+ E; @2 p9 U( w( \
另外,此应用程序还提供与以下设备的高效系统集成:
% r) ~ C+ O- l- Q7 l9 `- 调度器,用于在后台执行任务并在没有活动时进入低功耗模式
- 定时器服务,为应用提供在RTC上运行的虚拟定时器(在停止和待机模式下)
, ]2 ?8 `- F L, P$ [+ ` ; ^! i1 A. y# |' ]7 @: w
若需更多信息,请参见第9节。
$ n& N& h" q$ @! R9 ?) L3 SubGHz HAL驱动程序 ; D" B. g- @; ]# F. J9 i6 B% m! O
本节主要介绍SubGHz HAL(未详述其他HAL功能,如定时器或GPIO)。
+ X6 j- E; N' ?8 c N" `SubGHz HAL直接位于sub-GHz无线电外设上方(参见图3)。
/ _: e8 d8 d! C$ y; b9 }% e+ R4 RSubGHz HAL驱动程序基于简单的一次性面向指令架构(无完整过程)。因此,未定义LL驱动程序。 $ L9 u: O5 R* c4 i
此SubGHz HAL驱动程序由以下主要部分组成: ' ]( F8 p" d* [
- 句柄、初始化和配置数据结构
- 初始化API
- 配置和控制API
- MSP和事件回调
- 基于SUBGHZ_SPI的总线I/O操作(固有服务)
9 Q% e! ^. Q. K5 R2 L% L# |
% Z. S$ }3 F: {1 g, T7 M由于HAL API主要基于总线服务通过一次性操作发送指令,因此,除了复位/就绪HAL状态外,不使用功能状8 ^6 b; N: K. n3 L2 V
态机。
) i5 }0 X4 x, f @ 3 M8 N) s+ f; J6 F
3.1 SubGHz资源
# @4 {+ W; B* Q初始化无线电时会调用以下HAL SubGHz API:
8 `( ^# n* _; [- 声明SUBGHZ_HandleTypeDef句柄结构。
- 通过调用HAL_SUBGHZ_Init(&hUserSubghz) API,初始化sub-GHz无线电外设。
- 通过实现HAL_SUBGHZ_MspInit() API,初始化SubGHz低级资源: ; L, Q2 N# ?( j) }' x. \$ m- t' L
* p# u$ m5 |4 |* N5 V6 B1 t* \" i
- PWR配置:启用sub-GHz无线电外设的唤醒信号。
R) }) [- W" j - NVIC配置:
) t/ n" p! i( W: g ☆ 启用NVIC无线电IRQ中断。
9 o6 R& N4 x8 }8 S ☆ 配置sub-GHz无线电中断优先级。 ! l$ ]# h& ^6 ?5 a0 D4 j8 ^3 Z7 O$ f
在stm32wlxx_it.c 文件中会调用以下HAL无线电中断:
0 X3 }9 O5 O1 @4 N# c5 Q5 z- SUBGHZ_Radio_IRQHandler中的 HAL_SUBGHZ_IRQHandler。' m0 r4 y; P# t$ `2 B, ~- M: Y
2 s+ P( ?8 S2 q( X- D3.2 SubGHz数据传输
1 [; f$ i T3 p5 A( kSet 指令操作在轮询模式下使用HAL_SUBGHZ_ExecSetCmd(); API执行。 y. S+ _; j+ ^
Get Status 操作在轮询模式下使用HAL_SUBGHZ_ExecGetCmd(); API执行。
' @2 W8 Z( U7 V( I0 e$ X读/写寄存器访问操作在轮询模式下使用以下API执行:
( S9 b; j$ p5 ?- U4 q- HAL_SUBGHZ_WriteRegister();
- HAL_SUBGHZ_ReadRegister();
- HAL_SUBGHZ_WriteRegisters();
- HAL_SUBGHZ_ReadRegisters();
- HAL_SUBGHZ_WriteBuffer();
- HAL_SUBGHZ_ReadBuffer();
# F/ M z7 a7 ?1 T, }9 P ! _! R k0 r, o7 T
4 BSP STM32WL板 ) c r, a7 P; X
本 BSP 驱动程序提供了一系列无线电射频服务管理功能,如射频开关设置和控制、TCXO 设置以及 DC/DC
9 g( ^% Q, R7 [% N: k6 h" ?( X& E3 B设置。
: ~! M$ a$ y! b8 k6 O% K注意: 无线电中间件(SubGHz_Phy)通过radio_board_if.c/h 接口文件连接无线电 BSP。当使用定制用户板时,建议执行一个以下选项:
% v& y) ?; f( j" Q
+ w3 _8 p2 a5 T2 R- 第一个选项! w' W! u6 ?4 c! i& x/ s, a
- 复制BSP/STM32WLxx_Nucleo/目录。
a* Q4 M J! D2 s - 使用以下信息重命名并更新用户BSP API: ) k, P) d2 f$ P
☆ 用户射频开关配置和控制(如引脚控制或端口编号) ) I0 V- N5 V9 k% N
☆ 用户TCXO配置 * [4 D' }3 W6 F1 Y
☆ 用户DC/DC配置 ' K2 V( m' J. h( X2 D# ]
- 将IDE项目中的STM32WLxx_Nucleo BSP文件替换为用户BSP文件。 : B0 t. W {# b: Z7 o- I" ]$ _4 y
- 第二个选项
* I; X# J. s0 I5 L- [; v& M ☆ 禁用Core/Inc/platform.h 中的 USE_BSP_DRIVER,并在 radio_board_if.c中直接实现 BSP功能。
+ ]! t* q" u* m0 M9 G2 O+ ~- I
3 _; k8 r6 h( W5 b. x y" K) |4.1 频段
. Y# k/ f! B0 ?. dSTM32WL系列上可以使用两种Nucleo板: 6 R3 Y5 k' K; X9 @ e) [ @
- NUCLEO-WL55JC1:高频段,适于865 MHz至930 MHz之间的频率
- NUCLEO-WL55JC2:低频段,适于470 MHz至520 MHz之间的频率
& l& U: `8 n& F& } 4 ]$ R* G5 i+ y. v4 ^3 T
如果用户试图在低频段板上运行在868 MHz下编译的固件,预计射频性能会非常差。
: V, o! p6 o) N- A- q& @; `6 x固件不会检查其所在的板的频段。 v. @4 [& n C S
1 ^) q& r: p- Q9 B) e1 N
4.2 RF开关 * g0 z- b) s# a' g; ` t
STM32WL Nucleo板内置一个射频3端口开关(SP3T),使用同一个板即可实现以下模式: 5 |. q2 h" W( w T0 }& t6 s
- 高功率输出
- 低功率输出
- 接收 $ q: K0 I& E9 t; R x k* i
: ~ J9 L0 a' ~1 _0 \4 ?2 i
表3. BSP无线电开关 RF状态与开关配置如下表所示。
7 M0 U; u# ^, q/ {& L表4. RF状态与开关配置 , i1 |' T/ a$ a9 |1 H+ t
产看更多该应用笔记详情,请点击附件下载查看>> |