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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
3 Y* o+ c5 t6 v: Y* ^最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?3 B" f/ k7 U* W2 Q
( t5 V! t( D9 R& {
02问题描述
) B0 @1 J, h+ @4 A3 }以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。, D7 ~5 F1 _. |) }' X/ b6 }

6 a9 [8 g& ]5 b5 |: x' E. n7 h先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
/ @" N0 |3 H. g6 J

3 G$ M1 }4 n4 R% qLoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
" E- q/ N; f) @- k1 K+ L' A* B7 W& z/ w" A
2.1. 对比.s 文件(两个都一样)
) d# K$ }5 ^8 b- B/ `+ d
) F2 z( w; C/ gLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!4 P; t$ K8 l( C) ^$ \& O$ O
1 q- W  k0 n# H$ e) M
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
. U4 f. Y0 F% L" J( Q. V+ F6 `. ?* J; t9 B3 ?2 B' o
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!4 `9 s4 t# m8 |5 @  X$ }

1 ?$ X" ^1 a* b; P所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
( b$ L5 X7 H3 ?4 c# z2 w
0 H# X/ _( c$ l# Q+ u- j
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下! L- \8 m/ _+ q8 P# w
: v) q! W; P0 m% T" S. H8 g& L
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
! [: B* t2 |5 ^" j$ b
12.png
2.2. 对比.icf 文件(四个都不一样)
1 Q6 W6 x  m1 V& e, U) O5 XLoRaWAN_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 文件都不一样!1 B8 I( d$ W+ ~, k8 @6 _
13.png
14.png
15.png
16.png
, T6 d8 [* J. H6 w
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!, D4 Y* @( I2 i$ ^
17.png
, k. X8 R- m) Y) |8 y
因此保留原有的.icf 文件。) O+ `: ?! ~& C  L/ K

9 }2 x1 O/ r0 z03移植
9 `( r  N- r  s* F, ]0 \* E3 q5 @, v* K: B以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
8 {+ q" W; S+ {3 A1 R' Q4 ^: l* H0 Y' Z* ?
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
/ q) {  l1 f* `2 e; a0 m1 j0 h3 n2 ]4 J, P
3.1. 移植 1_Image_KMS_Blob
& R* g; |6 W, u- ~1 V& W. @0 X打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
9 o) f, W/ Z' q5 c0 z5 x
18.png
19.png
' G4 h; V- X7 h0 G9 A, Q$ v' U9 K
3.2. 移植 1_Image_SECoreBin - `  H( k, g& H8 X! k4 D- q3 m( Y
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。9 H/ M! P5 n! D, I* ~4 u5 ?: N2 f
20.png
21.png
" v6 j! E' |" M6 C
3.3. 移植 1_Image_BFU! v0 d6 l, l8 c- p4 B
复制 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 目录下 。
, T. U0 M- o5 E
1 o7 d: Z3 {# S) P0 e$ k- c打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
; I% [: K; w( q
22.png
23.png
24.png
  1. main.c
    2 V: `2 S$ ^. V- O
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined6 a* G8 N/ ^8 B5 M3 a% _
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_) V% _' H8 U4 v  i. x
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    ; V( a/ S4 ~& t/ y: i
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of4 P  a9 ?6 h% S3 |4 m! _/ @* M
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT: S5 X: C* V: A! L* K
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field* @, v( N  o2 g
  8. "AHBCLK2Divider"
    8 Z1 }% [, b9 f7 c3 C
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_! P/ u5 T7 X2 v2 J( T* R3 K7 _
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:- g5 I# ~, Y( F0 Y& {/ F2 O
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*// ], n+ ]( F7 R# R& ^4 l7 f

  2. % n3 Z% k8 I( R& O5 m8 y
  3. #if defined(DUAL_CORE). W" M0 R& T1 s9 M. M3 [0 W" S/ n
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK26 E& q$ v; l2 P" A8 X0 L- v
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    $ l. j# e. U2 ~, \6 F" ~
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    ! F" E1 a$ v# |; @$ L
  7. #else
    : b) ?( g5 r$ X- R$ e$ i5 ~
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3' j( s: A" V" a9 L# T
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    ; }4 L9 T/ a" M+ S& \7 J2 ]7 `
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    4 A+ H& K( q8 `- u' D9 i! s
  11. #endif /* DUAL_CORE */# Z8 l" b2 v. H& S
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    / g+ k9 Q5 Q) _
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;0 Q! p8 n! S  [, J& b7 q) H
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;! \8 \( Q) |, r! x7 P" \3 i+ S4 l- h
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    ! G6 l2 H0 }, l# z
  16. #if defined(DUAL_CORE)& ~2 ^3 Y7 l. R# y: ]2 a. }
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;+ |" _' r4 C: T3 i+ L3 N* G
  18. #endif /* DUAL_CORE */1 t3 f8 b* n& g. S. o! r
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    5 x( b: g+ }8 Y/ m
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译, t0 j1 _8 K5 S$ E0 R% l
25.png
7 C# T* u7 D% Y2 F4 c' ?7 P. ^" O
3.4. 移植 LoRaWAN_End_Node
4 h" R2 t5 L/ }# s复制 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 目录下。
7 j' l1 \4 b( I  D- |
# u6 V- G; @& w$ ^9 N1 x打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。, S! z1 E9 o1 d2 q" N( A
26.png
27.png
28.png
% C. g4 ~; o% v- t8 d: E
修改代码如下
* H2 c( y+ G# ^7 r# J
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)
    8 [  W8 V3 |4 Q% r' O
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,: m2 c+ [  Z" T6 d. W
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
    0 I7 H* Z& W7 Q, \
  4. {
    4 c$ X, s3 X, L1 |% U  q' p
  5. Error_Handler();
    ; t) O0 w+ T! h# }& }
  6. }' i0 w3 |1 S# l* q/ v" d
  7. #endif /* DMA_SECURE_SWITCH */3 h/ }+ L/ T" c+ P; ?! z
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:8 V3 b: K- @- C2 k
29.png

- U& L* w/ n) N- C1 k2 B3.5. 移植 disable_security.bat 4 `* O) H8 i2 W9 ]: ]5 C
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
$ m$ F0 I$ F: i9 V3 u) L
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    ) |. M1 C/ k$ y6 N, J: L7 V! k
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof9 l- L; K6 d7 v
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    4 n) q% E6 ^% q4 I4 y; K3 w. u2 l
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    ( J4 J2 G. F+ a
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled$ _; H% a8 @6 a, V- U
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof% P; v  h2 S" t& _: p
  7. REM echo ------ Security Configuration ------) x! \" _2 H7 D4 u* ~
  8. REM echo HDPAD: User Flash hide protection area access disabled( n* k9 ~- S. _5 k2 K9 X' y- m5 W
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    9 Q6 q1 D; z- j# q) c
  10. REM echo SPISD: SPI3 security disabled
    8 k( o& R2 g' j* {2 ?$ |
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    - O9 x) N& q4 `" E
  12. REM echo SBRSA: Reset default value of SRAM Start address secure% Q, Q5 J! A. @5 e) c) k
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    + @7 ]( V! p+ |- R$ i3 f
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    ) D; Z# N1 C0 |
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    0 I) d. s% |0 x( t) }4 e( y- P
  16. exit /B 0% i0 I; @" G! O8 F6 d4 {
复制代码

5 ?2 v: _: V  X7 e5 e: p; X3.6. 配置 setenv.bat 0 U* m1 E+ n/ |- r+ I

/ f, j& D) j* s- P: B% c$ _2 }在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 ; x  z% G" z- ]& y! g% M, U

, u# u( c5 _. c* X6 s( j4 T04编译
! f) G; O, m  _" C& b1 S- t可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。7 z& G2 h5 J7 o
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!" U  z( a0 ~3 v6 R' s
32.png
33.png
2 z, D% F# Y' |; [' Q
05下载: S0 w; m+ f& a7 ]6 S
通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。. J- r, M- Y* s4 c  ~1 s' Y
# B) M: Z; i: W
06运行* k- W6 S) w9 U% T$ c% l% G
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
  g: c, l' {7 p) G

1 G9 y+ e% u# p+ T07小结
  X9 n0 H5 L' I# J移植要点: / o. z1 P$ H* P& Q, w7 y
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 6 r, e  x  K/ j' C
2. 保持原有的.icf 文件 # t! [* ^1 P1 B9 A
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 3 A  a( \% ]" ?4 b6 o8 }3 F/ F+ W
4. STM32WL55XX 改为 STM32WLE5XX
6 \8 I$ i: D( B) d5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。" P8 r0 ?, M" s& O

9 _) L7 }1 E7 q( B
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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