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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  2 ?- S7 m- H- o9 p# J0 U  r
最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?6 j+ H% z( r. _: T# x0 t1 X* ?
. ]1 h$ B! {5 {, X9 \; B! C
02问题描述 3 `8 H7 `! q( t4 j' i" ?6 R
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。  q# ~& j' F' y7 Q5 C+ R* ?: ~

. m! }( r$ N/ p' J4 T6 y% F0 S先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
6 n9 ?* h' i7 c  q; b& d2 X) P
. p% h  `9 X& V' Z; J
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
& M. g% z& }, c/ q5 k6 G+ {2 {0 M& P" W7 t! @
2.1. 对比.s 文件(两个都一样)2 }/ R; c! h: M. I

7 ?# i5 r1 E5 e6 g; O+ p& Y# jLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!" y, M* _3 ?- w, y# c+ h

+ @" j' N+ }' |! n7 ^3 S* QLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!" ~$ ^. [) P5 h, _2 B7 B. [
- H. n$ U8 \/ E3 p; G5 m
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!5 }# b* N5 d3 R& g( h7 ]) c" Y
$ q  f4 F4 K+ Q0 r, a& A
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
9 k# s" b. c. ^& P: R
4 t6 K; |! j# m; T
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下
) q" m6 g9 l+ _; J  D# p# r7 K: x

9 v& E3 R  e7 z- O: L: E; V5 w& w注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。1 R6 x" T6 A) s8 G$ U% L0 @
12.png
2.2. 对比.icf 文件(四个都不一样)
7 l0 ^+ d& t0 G( BLoRaWAN_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 Y) D& n& d# m% b6 M
13.png
14.png
15.png
16.png
& W; T/ N) G% Q6 v9 K
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
. X. T1 D2 Q) I* s6 O! Z: v6 F
17.png
3 J5 O/ b6 [7 F' Z& l  q( h! A2 I
因此保留原有的.icf 文件。: k; Q3 @, _6 q. K9 x3 I. g/ K$ E
( c$ {" ^0 \; j, j, n
03移植- |  U# H6 @+ D
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
6 _2 ~) B7 @6 `$ i0 y) U4 U* b2 n3 W
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node4 W( Z" q% T' T  s
* v/ c. h0 _2 Y/ x5 L. H7 t
3.1. 移植 1_Image_KMS_Blob8 G; z5 E  Y+ j6 v
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
2 v% N+ |4 r" T  b/ F/ \" Y0 n# Y
18.png
19.png
" }( {; E( b( Q& n! j
3.2. 移植 1_Image_SECoreBin , h4 u& y' O0 u
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
% K( N2 \+ G: b) h5 e7 G
20.png
21.png

1 W2 ~' C$ ~# Z5 I3.3. 移植 1_Image_BFU/ e% h6 j1 B% r, N% 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 目录下 。( L8 d. k& H' J- }; h- v/ W" l) v
5 B  ^% M% u$ I( s. O/ L  g+ |1 z
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
" N9 O! ]! h7 w7 O% q
22.png
23.png
24.png
  1. main.c/ f* f5 ?! {. i' V
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    ! I9 m9 W. a& F! y  q# {. i' Z2 N
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    ' L) n& d% ]7 F  }0 Z" i0 t! }! x
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c934 M8 `0 a2 `& K5 F, y9 _
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of7 h" w; O4 D  V/ u; D
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT/ l( E1 }- {9 \
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field1 F& u' T5 J" x# s! N2 a: x
  8. "AHBCLK2Divider"' `' u8 c/ j( e
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_+ _% s* w- T6 O7 z
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
( @$ m0 |+ J% D' ~) \) q
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    . K2 B: O. c) B- E
  2. . ]/ |' c# t3 K5 {; E( M3 `; h* l
  3. #if defined(DUAL_CORE)
    ! i& X( }$ Q1 v& l
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
      H* E8 h3 ^' ?0 s4 i+ v
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK; u( P* o" g, s) }( ~
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;& K2 _6 ]+ I( A+ B
  7. #else
    2 [( @0 @( B. v! F7 O) n0 u/ M
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    6 |/ y2 X0 Q7 o, ]( C" M& r
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK+ j5 D* a' r- K, x
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    * k, p, B1 L& i, b3 t- u
  11. #endif /* DUAL_CORE */
    4 g# j% e7 W! R- M# M8 _* v1 N
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;' C) ?( d  x3 z9 E
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
      \8 N! V  N$ k- R
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    # f8 N9 y: i6 ^: Q+ H* V' S
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    2 c  V' `/ D0 {
  16. #if defined(DUAL_CORE)
    ; o% B2 G! z6 E7 o. V
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    # h2 D; M+ z- ~9 y7 ^
  18. #endif /* DUAL_CORE */( z9 d/ n, p, h9 y
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;2 n9 J) C! h& G& C
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
( v8 Y0 l& {: e9 v- t& w) l
25.png
: v, o, F; T% m+ e/ k
3.4. 移植 LoRaWAN_End_Node3 C5 T9 D! H/ ]; ]
复制 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 目录下。
5 S" M7 r  W9 x- N8 h- H4 C& }6 b- O1 u/ O$ ^. `
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。- P( i& B4 Z/ [) Z/ J: H6 o; G
26.png
27.png
28.png

/ v3 w6 z: G5 Z# o- O* H7 v' ]修改代码如下9 ?4 f, `6 |$ b8 Q% w- U0 X
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)2 Q+ H- v( J3 ]% q
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,8 M$ \9 a. t& H, q
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
    5 d$ D! b" Z( k7 Q. f# J7 X2 r
  4. {
    " M% g. g  |- v: L/ ]4 m3 x7 A
  5. Error_Handler();
    3 }, v3 r9 I) d! i! T
  6. }
    , M* K! A3 s8 j  L+ h# Q
  7. #endif /* DMA_SECURE_SWITCH */8 g3 ^* \5 U. W" U. }; M9 }; F: R
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:: Z. F9 M' W, H- U7 x
29.png

+ X5 }. c3 e& [7 p. @# V3.5. 移植 disable_security.bat
6 k$ R! }5 }: l$ n! i' W7 Y4 ~STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
3 c1 e, e0 U3 ?( c
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes0 O' c  i8 \4 v# f1 s4 L- O( s
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    + V" U# P; g  e5 C/ ]3 m
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    , {/ @" M& o5 K9 N! N& s, Q6 q
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof$ A# L! }# ]# n& B
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled- u; \9 |- h4 L# M" b1 @
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof# E$ H' G" a: b- Q' ?
  7. REM echo ------ Security Configuration ------
    5 f( H2 s1 N' i: X
  8. REM echo HDPAD: User Flash hide protection area access disabled, \: M! i# z1 _  H- \
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    + |( m! C. _: m/ {$ \
  10. REM echo SPISD: SPI3 security disabled
    ; Q2 @* b1 m1 J& ?' w
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    - v  v' j( h. J9 N: V% V1 j; S; [( P
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    & Y; ]8 @3 N! W3 E) E* Y- Y' U, \
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    ' H5 }6 V1 W7 v- p' w3 G7 i: J
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    " L8 c4 {4 L1 ]$ ~5 l* B  O6 [+ y
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    " I* ?& D* U) h) q3 ?- D3 x8 @2 V3 }
  16. exit /B 0
    8 @" G9 J# ^8 |8 j) \
复制代码
4 L! q+ m) w! U4 X) j
3.6. 配置 setenv.bat 9 z3 \, ?% t2 w! [: J- I; D

$ E7 [! l' G, Z: K4 G) a在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 0 u. h6 r) d" e8 D! ?
3 L7 t/ E" y, h( L! g& ?
04编译: m7 Z% o* F. }9 k7 i" b$ d; T
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
) M, Y) C! f# F5 ]$ U2 D
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!9 R/ N+ ?  |' e" s7 ?
32.png
33.png
9 A' n# C8 e& O6 W/ b
05下载
% L, `1 I+ R. r通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
9 }1 f4 C5 e4 o5 z- x8 N/ m0 o0 @8 _+ E( e" {- l# m( v
06运行  I3 m, t) y; C( [. W& ]
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。7 _5 k" t# h' w4 q$ r2 ^

3 L. u4 G6 {! J- T; g2 y2 ?8 H07小结) }" _1 y" P/ t4 ]# Y
移植要点:
$ f; w. ]8 e/ m8 c  O6 s1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 6 I1 L8 c% }4 K" `
2. 保持原有的.icf 文件 ' s* o$ b% S1 y" V  t
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
9 ]  B5 S" o$ Q! U/ [1 O4. STM32WL55XX 改为 STM32WLE5XX
$ C# d& f7 t0 _5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
) q: T3 I" L4 W; x3 c/ P
6 W3 ?0 J% B( y9 M$ E& B
赞 收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版