你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

实战经验 | 从STM32WL55JC到STM32WLE5CC的LoRaWAN_FUOTA移植

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
9 C7 P$ x( ^3 n/ s, ?最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?$ ^5 w  O2 t3 G( b9 v- S

. n' B& ?, O1 K* U02问题描述 / U+ e7 g! S8 Q0 g& k$ F+ n
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。' a; G, k" s3 m) ^5 z( R
% ]0 H! s, x2 g" u4 L, t0 V$ H$ W& W
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。' k1 X. K7 T' m1 {

2 K% Y. l, o- W, \8 C' `6 |LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。* Q, T! `! G. @; R1 @0 B! ]- x
; `; X- u) c9 e
2.1. 对比.s 文件(两个都一样)& @$ Y& S. \. P& W# S; c

8 ?* g' _% g8 sLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
) o' m4 J6 V; C3 Z! H* A

! E' ?+ G7 e* A% y  f6 g3 dLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
3 T  D7 u0 J) D3 J
9 ?( D$ P8 y4 ^5 `8 yEWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
3 m3 n! T5 y' ]0 J

) o1 c+ t& N1 R: J5 z6 ^( j所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
: {0 s; X4 X9 c. C; j! |

6 S3 b; j6 }  X! b( f' c' J3 P所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下5 v4 c% ?6 B4 b% m. l6 w. R! J* o9 n

: O* p& U% r  D- ^3 }" K0 ^5 n注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
3 m2 k4 g9 p& _
12.png
2.2. 对比.icf 文件(四个都不一样)$ x% k* S9 b% }
LoRaWAN_FUOTA\1_Image_BFU\EWARM\stm32wl55xx_flash_cm4.icf LoRaWAN_FUOTA\1_Image_KMS_Blob\EWARM\stm32wl55xx_flash_cm4.icf LoRaWAN_FUOTA\1_Image_SECoreBin\EWARM\stm32wl55xx_flash_cm4.icf LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 这四个.icf 文件都不一样!
6 p8 T% t1 i8 ]* o) g
13.png
14.png
15.png
16.png

7 L, P9 z/ _/ G0 e3 I( j; T% J* oLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
& f& T' v2 x- x( ]- f
17.png
0 F' g/ O8 E# ]* r
因此保留原有的.icf 文件。! I/ N) J, X! G! C  N0 {9 z

' D2 K! {4 X- E! ~  T5 O9 U03移植% K: i1 q" }4 d3 W
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。$ e* L) }9 N9 A! U- I/ f9 c

4 g% M) I8 l4 w) x% U根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node, n) C. H, V  D
. ?" i; G% k: U- j; ~% \) Z
3.1. 移植 1_Image_KMS_Blob, @( g6 X# k* g" s( ]+ G
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
' X8 i, Q) L# Y3 a
18.png
19.png

/ m1 h; O2 Z) T( J4 X! T3.2. 移植 1_Image_SECoreBin # G) K1 h8 f2 P* s6 A/ `, c( k2 F
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。' z# s1 h$ _9 m5 ]' p) ?# c
20.png
21.png
6 C1 t% Y4 c: a" f1 A: h
3.3. 移植 1_Image_BFU
2 q+ ~" p, R7 `4 t* A3 ^! m6 P复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5x x.s 到 LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\EWARM 目录下 。- M  C: z  n" m- c4 c2 k
& u9 [6 M. M1 P
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
# a- E# J& F# ?# I" i" v
22.png
23.png
24.png
  1. main.c
    4 g! f- `* ^& `; e* [
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    1 p6 t" I& y' Y, Z9 y0 d' @" g
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    1 g+ h& T7 d# t, G% V5 v) ]
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    0 W" Q% l4 ?4 D- u& W/ ]* s1 i" y
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
    $ g2 T. U: @! Q; g( o! A+ V
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
    3 B- ^) X3 |# K6 x" e8 c; q3 @/ H
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field9 D3 m, p  v  I9 b. s) T
  8. "AHBCLK2Divider"
    ) J- b  j5 M/ J9 U" ?! n' o' S
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    * {9 P' ], S; s3 ^* E8 F
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:; D$ l( B/ v8 M. a
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/# E: I+ R2 `* T& P

  2. 1 g9 `2 y; w3 A0 }2 L
  3. #if defined(DUAL_CORE)
    , ~3 y7 f# {1 M5 p$ ^+ E: i
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
    8 J. V( G; J9 U  e; _
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK1 \9 D; T' P  Y, A* @, J: }
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    . ?# W- s8 z2 k( {. z9 I+ d( e
  7. #else
    & j  N' _# [+ y" O) e
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    # K# S; R' L' `
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    8 t- T; x! U  l4 v4 t
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    * ~* @$ q9 b# c6 d7 z9 z
  11. #endif /* DUAL_CORE */1 `0 z( `  Q4 C( d2 g5 c( x
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;& x5 `* H/ J4 ^+ ]
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    ) D% _( S8 F  q& c# B) R/ ?/ A
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  E8 a$ c1 t/ V0 u8 j# ?3 k
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;( n8 k3 v& t% k2 ?! \9 R# b
  16. #if defined(DUAL_CORE)
    4 `+ c1 s& \: Q0 _
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;0 g: l6 E2 ]$ a
  18. #endif /* DUAL_CORE */
    ) n' g$ ~+ L+ z: {
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    8 U* d% P0 k3 d( O: v
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
7 h& D0 C* O3 n5 w+ x# ?
25.png
$ ~2 I0 u# R8 p! L; Z% D8 `
3.4. 移植 LoRaWAN_End_Node
7 n! o1 I/ e5 ^, G复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5x x.s 到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下。, z+ r! }+ w; r2 G0 c6 v

9 ~) z2 O7 B6 Y' d: y# P) v打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。4 G1 J: K% d6 r" T/ `& v  O* Z
26.png
27.png
28.png

: C' _* P* s1 _% b3 Q2 g) v修改代码如下
0 \& C' p- ?$ P- N* m
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV), o1 E! b: U1 G# g' F  o& \9 B
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,8 ]5 J9 I/ e; }/ a4 a
  3. DMA_CHANNEL_NPRIV) != HAL_OK)4 _- l7 [. ?6 G' J6 h5 Q
  4. {8 F4 i2 f- `! y0 U  O+ F, x
  5. Error_Handler();
    : X- x3 O( y% W
  6. }
    0 g' D) L' H# p6 ^/ ~# d* l
  7. #endif /* DMA_SECURE_SWITCH */
    8 W+ B5 f$ R: |4 b- ?- G7 T. w1 @
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
: g% o" @/ }, z. H9 n
29.png
( S  ?- _# K* g$ j* v% j
3.5. 移植 disable_security.bat 7 d. T# R7 w% E2 I
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。2 `" T" J$ ?. C% j, D
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    " M4 O8 i# Z- Z1 @* @' P' }
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    " u, s- d% S1 W7 [+ p
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    : Z$ }& P7 a9 t+ \# H6 E" h/ K* Z
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof4 N1 `* Q/ w  F* E
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
    * M! {) a. F# k, i4 ]8 m5 z
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
    , h9 i! t3 H3 }" b, ?2 \+ |" i0 Y* f# Z
  7. REM echo ------ Security Configuration ------5 K; v. f1 _4 o$ x; g& [' B- ~7 b
  8. REM echo HDPAD: User Flash hide protection area access disabled
    - |: l' V* N: L5 u2 n3 p
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    + u0 t& t8 o  z" j, C: H2 g
  10. REM echo SPISD: SPI3 security disabled
    4 q7 M. r7 \2 t! Q8 C7 S, n0 [: g4 u
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    6 {5 H$ o2 g7 o2 e% z- Z( g1 u
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    ; m  J5 ~8 R: D" Y7 Q/ z+ L+ j
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    1 G2 c% a2 h5 z: C
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    7 x$ [6 |- t% G, H  \
  15. REM call :write_ob SBRV 0x8000 || goto :eof6 i$ r- Z9 G0 _
  16. exit /B 0. F+ _8 S* g+ B) R
复制代码

0 H4 C6 v% w: V; g9 g3.6. 配置 setenv.bat
/ N  d1 F7 M  C5 z  P6 |
# c# w, l# d! a1 O在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。
* K; K5 j4 l% `' `
: ]5 n5 o/ A: E04编译4 F8 G2 k; w* X
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
! {" M' i- R8 l7 W
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!& ]) i3 n) C' Y6 Q! S7 ]$ `* k8 e
32.png
33.png
) z) c& _/ K# w/ E, E, y# i
05下载
6 q5 R& F4 c6 R$ X通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。$ a$ `# C, m/ D4 ?- U

+ d$ m  p1 g3 `) ]& Z; C& x06运行5 l5 w4 f5 V/ V& {
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。4 r& P6 n* \3 Y% F* ?
8 T/ d3 J9 d  D$ Z# c) Z( Y
07小结; p" E, ]$ p8 Q
移植要点:
' d8 M7 Y  S, k  F7 l3 K1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
4 p- T( z9 V* p3 [, i4 ^. n* C7 i2. 保持原有的.icf 文件
8 u( j+ @$ i" \6 O  M4 }5 t! V! m3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
' l2 z7 }$ X3 }8 A2 j* W* r4. STM32WL55XX 改为 STM32WLE5XX
8 T# K3 n$ [7 X' y6 M& m5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。# G7 o5 ]! ^& N; a$ @" ~: R4 j
/ A% C% x; n9 T1 Z4 m: ^
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版