谷动谷力

 找回密码
 立即注册
查看: 2346|回复: 0
收起左侧

工程师笔记|CubeMX创建STM32WLE5Jx LoRa EndNode+cn1.LoRiot应用

[复制链接]
发表于 2022-7-7 17:53:43 | 显示全部楼层 |阅读模式
工程师笔记|CubeMX创建STM32WLE5Jx LoRa EndNode+cn1.LoRiot应用
1 S  s6 U5 r1 v& h5 j
引言
本篇 LAT 介绍使用 CubeMX 创建基于采用 STM32WLE5JC/STM32WL55JC 的 STM32WL 板子 的 LoRaWAN 应用。

! E1 n7 V9 k5 E6 W$ @  X
其中,参考使用了 STM32Cube_FW_WL_V1.0.0\Projects\NUCLEOWL55JC\Applications\LoRaWAN\LoRaWAN_End_Node 创建一个 WLE5Jx_EndNode 的例子。

; Z) I2 ]. u% W
关于不同 MCU 间的移植可参考
UM1718 11.9 Switching to another MCU
UM1718 15 Tutorial 5: Exporting current project configuration to a compatible MCU
需要提前准备的环境:
640?wx_fmt=png.jpg
: d  @1 ^' L* d
1.配置 CubeMX
1.1 配置 CubeMX 并下载 CubeWL

$ D( G! R; ]1 ]" E; C  a0 ~2 e
可以使用 CubeMX 默认安装的仓库目录也可以自定义仓库目录,本例使用自定义的仓库目录C:\Users\gongw\STM32Cube\Repository\CubeWL,如下Help=>Updater Settings=>Repository Forlder=>C:\Users\gongw\STM32Cube\Repository\CubeWL=>OK
6 b0 h5 m) H- f/ C4 K5 ^5 Q' t0 F7 N
640?wx_fmt=png.jpg
; o0 h* U: u: Q7 L7 n( w- O
640?wx_fmt=png.jpg
8 p1 `, G9 _, V
选择 Manage software installations 中的 Install or remove embedded software packages 下的
“INSTALL / REMOVE”

! W1 B+ ?- J4 k6 l
640?wx_fmt=png.jpg
& T1 R: q" y, @: \2 S2 R1 O  l' r1 ]
640?wx_fmt=png.jpg
点Refresh 更新数据库
640?wx_fmt=png.jpg
7 g9 X, v, ^% v6 W0 H" d
! r* J0 R- @' a
Fresh 结束后,点开 STM32WL 左侧的黑色三角,选中 STM32WL 下版本 1.0.0 的 STM32Cube
MCU Package for STM32WL Series,点 Install Now
  U' y# N6 x2 W& D! e  {- m( M
640?wx_fmt=png.jpg

& H4 B! ]- C4 c3 |+ Q
点击 Close
) O5 H7 X3 i- p# u( j
2 I+ Z# v: t; F2 n2 b- H" Y5 a
1.2 CubeMX 新建项目

! a' W4 L% H2 j6 F; R; H$ Y, c
打开 STM32CubeMX,在 New Project 下有三中选择, 请根据需求选择 New Project 的方式!
640?wx_fmt=png.jpg

5 f& Z0 X7 S7 ]( n' ?; }$ u8 L
1.2.1 Start My project from MCU

3 P' s2 A: o1 H* X7 L3 J
第 1 种可使用于所有的 WL 产品,只能生成和配置的用户自定义(User Defined)的LoRaWAN/SigFox/SUBGHZ 应用,不能生成 CubeWL 中 AT_Slave/EndNode/PingPong demo
0 ]4 k4 H* m1 N9 w- e/ ]# m
1.2.2 Start My project from BOARD
第 2 种适用于 NUCLEO-WL55JC1 和 NUCLEO-WL55JC1 两种 Demo 板,只能生成和配置的用
户自定义(User Defined)的LoRaWAN/SigFox/SUBGHZ 应用,不能生成 CubeWL 中AT_Slave/EndNode/PingPong demo
' W% b; x/ O! B& O
1.2.3 Start My project from EXAMPLES
第 3 种适用于生成 CubeWL 中 NUCLEO-WL55JC1 和 NUCLEO-WL55JC1 的 Examples,可生成和配置 CubeWL 中AT_Slave/EndNode/PingPong demo
: b+ W/ C8 k6 e$ }6 e
1.2.4 Start My project from MCU STM32WLEx
在 New Project 下选择,”Start My project from MCU ”下的”ACCESS TO MCU SELECTOR“
% o/ @0 O4 Y+ v

8 N* ]+ w1 `7 o9 t0 d0 v- S: o
640?wx_fmt=png.jpg
4 k- q& W; u" l! O3 {- b1 _
640?wx_fmt=png.jpg
% I  b' S# a& a* `
640?wx_fmt=png.jpg

) S4 y3 G) ]6 l! o3 C& ]
640?wx_fmt=png.jpg

+ I1 k5 r2 m' F( Y. u) l
640?wx_fmt=png.jpg

# |1 x- M5 V: q1 s! a* R* H" A
640?wx_fmt=png.jpg

, N: Y! J+ n9 F! b6 @/ D
640?wx_fmt=png.jpg
9 d8 _! u/ B* U
640?wx_fmt=png.jpg

" |% a" ^  [1 \# O
640?wx_fmt=png.jpg
- Q2 }1 D" O: u5 ?3 y
1.3 CubeMX 导入参考项目

, m- N0 q! {5 F7 B. @( o9 X
640?wx_fmt=png.jpg

* i! q( V4 d! H, i, Q
640?wx_fmt=png.jpg

! v2 P! e6 L7 S* Q0 c
640?wx_fmt=png.jpg

( C! O$ K* v- X9 y9 T( c+ X# y
1 V) `; r& F1 F+ o% v3 M
640?wx_fmt=png.jpg

5 w% G% P5 b2 J" t: i3 ?. c$ h- D; h( E! ]' Y
此时再查看 File =>Import Project 选项,变为灰色,表示新项目已被配置,不能再 import 参考项
目。

; V# ^( U# V- M0 `
640?wx_fmt=png.jpg
# N3 `' E1 q6 p# [2 I  T% ]+ m
1.4 CubeMX 配置项目

# m7 X* h  Z) x
1.4.1 CubeMX 配置 Project Manager
选择 Project Manager
1.4.1.1 配置 Project
选择右侧 Project 并配置如下:
8 t$ ]: Q: _0 @3 S4 g' d
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg

+ V6 k2 H/ {2 s0 |% d, i% Y
注意:
通过 Browse 选择 Project 保存的目录
⚫ 项目名称 WLEx_AT_Slave 创建在STM32Cube_FW_WL_V1.0.0\Projects\NUCLEO
WL55JC\Applications\LoRaWAN 下,和LoRaWAN_End_Node 同级目录,即C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.0.0\Projects\NUCLEO-
WL55JC\Applications\LoRaWAN\WLEx_AT_Slave,以便于与 LoRaWAN_End_Node 进行比较

* V9 W( c. B/ ^4 k2 G" {
⚫ 配置 Application Structure 为 Advanced 与 basic 有什么区别?
Application Structure 为 Advanced 时目录结构分类分级目录更清晰。
Application Structure 为 Basic 时,所有的*.h 都在 WLEx_AT_Slave\Inc 目录下,所有的*.c 在
WLEx_AT_Slave\Src 目录下。
' R6 S. u2 \! v1 U
一旦生成过一次代码后目录结构就无法更改了!!!
( M% w4 ^8 a8 I4 N% \
640?wx_fmt=png.jpg

: c' s5 }( T8 M
1.4.1.2 配置 Code Generator
选择右侧 Code Generator 并配置如下,选择”Add necessary library files as reference in the toolchain project configuration file “,这样将不生成 Drivers 和 Middlewares 目录。
选择 Generated files 下的“Generate peripheral initialization as a pair of ‘.c/.h’ per peripheral”
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
注意:
⚫ Copy all used library Package (如复制 Drivers\STM32WLxx_HAL_Driver 下的所有驱动)
WLEx_AT_Slave 复制到其他目录下,还能工作

* X, }) a$ k$ O6 \
⚫ Copy only the necessary library files(如仅复制 Drivers\STM32WLxx_HAL_Driver 下使用到的驱动)WLEx_AT_Slave 复制到其他目录下,还能工作
, g  m5 p' n1 @8 m/ S7 {0 N
⚫ Add necessary library files as reference in the toolchain project configuration file(不生成 Drivers 和Middlewares 目录,仅参考Drivers\STM32WLxx_HAL_Driver 下的所有驱动)
WLEx_AT_Slave 复制到其他目录下,不能工作
9 ]2 z# y& G0 A& o8 f$ `/ @2 O( [
参考 UM1718 4.9 Project Manager view
640?wx_fmt=png.jpg

: O3 I/ O( ~+ x
3. 配置外设
2.1 使能外设
" R) t0 k6 C$ z" B: p
2.1.1 Middleware=>LORAWAN
Middleware=>LORAWAN=>Mode 中勾选Enabled,LORAWAN 功能就使能了,同时SIGFOX 和 SUBGHZ_PHY 就失能了,默认界面如下,后续再继续配置 LORAWAN 应用。
640?wx_fmt=png.jpg
2.1.2 Timers=>RTC 使能
Timers=>RTC=>勾选 Activate Clock Source,并配置 Alarm A 为 Internal Alarm A
640?wx_fmt=png.jpg
2.2 RTC
配置 Alarm A 为 Internal Alarm A
640?wx_fmt=png.jpg
Clock Configuration => RTC Clock Mux=>LSE
在 Clock Configuration 中检查 RTC Clock Mux 是否配置为 LSE
640?wx_fmt=png.jpg
Timer =>RTC=>Users Constants
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
Timer =>RTC=>Parameter Settings
640?wx_fmt=png.jpg
Timer =>RTC=>NVIC Settings
640?wx_fmt=png.jpg
Middleware => LORAWAN => Platform Settings => Timer Server => RTC
640?wx_fmt=png.jpg

/ m7 n4 U% j$ Z9 P) A
2.3 DebugLine
Connectivity=>LPUART1 (AT_Slave)
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg

( Z' Y; s8 N; y8 x  r/ x) c7 `1 l& S
640?wx_fmt=png.jpg
# N* n& }$ d/ k1 @! U, v. J1 G4 g' E
640?wx_fmt=png.jpg
1 l- g" B' r, D3 B3 l
640?wx_fmt=png.jpg
' k; c( o/ y8 r/ C
640?wx_fmt=png.jpg

! _; Z% s) d/ i. Z8 j( C; C/ v' N
Clock Configuration => USART2 Clock Mux => SYSCLK
% @. i8 C* M/ I1 Q1 }
640?wx_fmt=png.jpg

! @2 ?, e. ^- B- a! G4 n
Middleware => LORAWAN => LoRaWAN middleware => radio_board_if =>Activate Debug Line
/ _; Y% h- s0 b7 O% h
640?wx_fmt=png.jpg
Platform Settings => VCOM => USART2
640?wx_fmt=png.jpg
  ^* R% z! M2 W4 H) R5 \
2.4 System Core => GPIO (RF SW CTRL / BUTTON / LED)

7 v1 H2 ?1 y4 [& J+ w' M3 w$ c
2.4.1 RF_CTRL
NUCLEO-WL55JC
640?wx_fmt=png.jpg

) T# N' d3 i; ^1 G' S& d0 D
640?wx_fmt=png.jpg
1 {7 ~" W2 X; _" A) N
640?wx_fmt=png.jpg
: u# V' ^3 D5 ^
640?wx_fmt=png.jpg
$ G0 T& o- X; S/ q
2.4.2 LED
5 C( k" y& a" K# t* O7 S, m! M
配置控制 LED 的 GPIO
640?wx_fmt=png.jpg

4 \' c$ B3 p6 v: e2 \' I+ c
640?wx_fmt=png.jpg

7 Q0 _& y( L2 ~% w
2.4.3 BUT
配置控制 BUTTON 的 GPIO
640?wx_fmt=png.jpg
; u! e# z# ]5 r/ N$ R( ^

0 K! Y6 ^' H6 }/ p$ L/ A: D6 |
640?wx_fmt=png.jpg
: N+ k+ m5 t- u. I0 G/ a' P0 D
640?wx_fmt=png.jpg

# S2 N0 y3 V8 C+ ]) E; T
640?wx_fmt=png.jpg
5 }  R: w- s9 E0 y" K
2.4.4 DBG
640?wx_fmt=png.jpg
+ k! [" @5 n: k1 Y
640?wx_fmt=png.jpg
: E3 G; v# t( R  {' z8 c
2.4.5 SWD(可选)
需使能 Trace and Debug => DEBUG => JTAG and Trace => Serial Wire
640?wx_fmt=png.jpg

( ?8 Z+ i1 ^$ y# w# F) c
640?wx_fmt=png.jpg

( M0 S; j8 I7 R# {& m, B; ^& E  T1 [; g+ Q" A* X( B% `, p/ m) h2 @
2.4.6 Middleware=>LORAWAN=>Platform Settings

0 g0 h, B, H: E$ y, B
Board resources => LED & BUTTON
Radio => RF SW CTRL
Debug = > Debug Line
9 K* X8 x* Y' i' J* l4 L2 {3 ]
640?wx_fmt=png.jpg

1 ?  r! u6 L  }) A: M9 g
/ g/ D; n6 \: U9 J
* z$ |8 o$ T8 ~6 m6 {- E
2.5 ADC
Analog=>ADC
, p- c4 s% N7 }. B- R' U' l
640?wx_fmt=png.jpg
! |; \8 r* U5 g8 c( k2 R
640?wx_fmt=png.jpg
* M  t5 n; A5 l0 O5 B
Middleware=>LORAWAN=>Platform Settings => Vrefint T calibration => ADC (EndNode)
/ ^4 E2 U& e6 q
3 STM32WL Templates Patches for CubeMX
+ ^& w6 Y, K0 |9 g: R5 K

2 I3 t5 ~% X0 L- M" m
STM32WL Templates 在如下目录,如需要可自行定制自己的 Templates
640?wx_fmt=png.jpg
针对不同的客户定制化的板子,硬件外设配置不一致,客户可根据需要定制化自己的外设配置。
从 NUCLEO-WL55JC(BGA73) 移植到STM32WLExCxUx(QFN48)定制化的板子上,射频开关(RF SW CTRL),按键(BUTTON), LED 的配置会不一样,可能导致编译错误,如想生成的代码不会产生编译错误,需要编辑一下 STM32WL的 template。

7 I1 p5 y+ C9 P! n# r, V
3.1 CubeMX template patches for stm32wl
请参考
640?wx_fmt=png.jpg
7 U' [7 f& S% x/ E9 a
3.2 CubeMX Updates from v6.1.1 to v6.2.0
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
  X# C- u) [$ o5 _1 Y. R  N
3 z* \( `! |  A- X/ _
4.验证
4.0 参考工程) ^3 ~  N) `: T  g* s* |2 A
640?wx_fmt=png.jpg
4.1 生成代码 GENERATE CODE
此时,可以先选择 GENERATE CODE 生成 Project,(如需,请自己选择项目保存的目录)
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg
- g; e& }" G  d7 {' C  o
640?wx_fmt=png.jpg
' C" M' G# m5 A9 z: |$ R
可选择 Open Project 使用 IDE 直接打开 Project。
或选择 Open Folder 后,还需再选择 EWARM\Project.eww 打开 Project
640?wx_fmt=png.jpg
4.2 编译并下载
用 IAR 打开STM32Cube_FW_WL_V1.0.0\Projects\NUCLEO
WL55JC\Applications\LoRaWAN\WLEx_AT_Slave\EWARM\Project.eww 如果 IAR 之前已经打开了 WLEx_AT_Slave,在每次重新生成代码时都如有如下提示,选择“Yes
to All”
640?wx_fmt=png.jpg
按 F7 或选择 Project=>Make(F7)来编译工程,如果编译无错误,选择
Project=>Download=>Download Active Application 下载 WLEx_AT_Slave 应用

) c9 k' m. K9 U7 D8 r& X- L
) J) L3 H8 G" F$ a' i# a* _
5 接入 cn1.LoRiot Network Server
如果不需要将 WL 的 Sensor 数据转发到 cn1.LoRiot Network Server 网络服务器上,可跳过此步骤。
如果需要将 WL 的 Sensor 数据转发到 cn1.LoRiot Network Serve 网络服务器上,需用 CubeMX 重新配置下
LORAWAN 的一些参数。
5.1 WL Sensor End Device 信息更改
5.1.1 配置 REGION_EU868
默认配置即可
! b& l2 ], u/ ~4 o! q) \
640?wx_fmt=png.jpg

$ g+ M9 N9 T, q6 M
5.1.2 配置 REGION_CN470
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg

+ v6 u9 U; o4 T% j# f
640?wx_fmt=png.jpg
/ R% p$ \" i/ F& V* u  m
640?wx_fmt=png.jpg

7 E1 \! d0 `* H1 v- O
640?wx_fmt=png.jpg

/ W9 Y( R& ]9 _8 L- W$ A* z. h
640?wx_fmt=png.jpg
# N2 d: y- g" ?

! c4 a. g5 h4 ~, [" ^# P9 W
5.2 配置 DevEUI, AppEUI 和 AppKey
在 LoRaWAN\App\se-identity.h 中更改设备信息 DevEUI, AppEUI 和 AppKey

! a4 p& X/ ~1 U6 P
640?wx_fmt=png.jpg

3 [' E! v2 X1 q) `; c3 V
DevAddr 不需要设置静态地址,可以配置的
% ]1 z) O) m7 c/ }. E2 w* B
640?wx_fmt=png.jpg
8 C& {' W+ y' B( q$ U2 H
640?wx_fmt=png.jpg

( k# r9 A1 g! l0 T
5.3 转发到 myDevuces Cayenne 应用服务器(可选)
6 b/ K1 v7 \9 i7 x# p
640?wx_fmt=png.jpg
: Y+ R, o  r% s4 u0 N" c
5.4 WL Sensor End Device 信息获取和确认
+ x% R" [0 J0 _9 ?5 b8 \
其中包含更新过的 WLE5Jx_EndNode.ioc
用 IAR 编译 Projects\NUCLEO-WL55JC\Applications\LoRaWAN\WLE5Jx_EndNode\EWARM\Project.eww,并下载
到 WL 中,注意 STLINKv3 的设置。
连接 WL 串口到 PC,PC 端打开串口,配置如下,然后重启 WL,会看到 DEV EUI,APP EUI,APP KEY
Open a terminal emulation software such as Tera Term and configure it with the following settings:
– Port: (Virtual COM port number assigned to the board)
– Baud rate: 115200
– Data: 8 bit
– Parity: none
– Stop: 1 bit

8 Z# ^8 }  K9 B' ^2 z; K" Q9 M! M/ G! l% ], U9 y+ L& }* z! @  }
640?wx_fmt=png.jpg
640?wx_fmt=png.jpg

" k* a6 I4 @5 A( Q) G! t
640?wx_fmt=png.jpg
, Q$ N( S& |5 d
640?wx_fmt=png.jpg

/ A- G2 r& ^9 Y* p5 z
640?wx_fmt=png.jpg

; |/ l2 k' N; [) s6 H
640?wx_fmt=png.jpg
* d% X7 n& ~+ M/ U/ h( x7 N8 n8 Q

. @2 ?9 G* y! _* R% I: Q3 L7 i

2 |+ C2 \4 a: |' A, c
( \. Q' U1 J( O+ `$ `

本帖被以下淘专辑推荐:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-3-29 17:45 , Processed in 0.133997 second(s), 37 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表