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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  ' p4 {" d- i1 f6 [
最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
2 b6 E& s+ ~. ^; ^: D8 k
2 O( x; V5 g6 s7 Q: G02问题描述 6 S  E" d3 y" f7 j+ X! |/ A
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
5 t  V0 k$ d8 t8 y! i

4 z5 o" |4 {) R" [: b先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
% _; y) R3 z+ M& q/ W7 V, M
% L, H& A5 g: R) Q. V/ F7 W; X
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
. m1 O4 G, m; |) X5 n2 q* c
+ V" o; f4 @3 G2 L6 L2.1. 对比.s 文件(两个都一样)
, Y+ k; Z3 h1 O8 q1 Q9 c1 V
/ r/ v* ?) H) J5 C2 j! t" b  {- PLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
" m2 n+ t! E- z. [9 S- i3 V: G" Z
, K' K% r/ b4 B  w
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
( s* m: r* c; s: W- E# l- W; X# o1 s4 X% e0 t9 z! y- Z. 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 是一样的!
7 r$ ]5 d. |- }* K& p$ d9 K: U

& J. k% g) P0 T- l5 J5 _9 ?所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s1 J. E6 A* l$ o9 A2 Z* b

+ z% u6 [; n. X" k- H+ B0 m所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下% g* ?. q9 d8 c( o' d0 v" ?7 k

. H5 `! O* c7 ~& F# `0 ]注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
" @) L, F# i% G
12.png
2.2. 对比.icf 文件(四个都不一样)
* ?3 n% v3 Q( N; a" B0 `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 文件都不一样!
" f1 s# u, W: A+ o
13.png
14.png
15.png
16.png

5 J9 c9 i2 ~. i! y; r  E$ T9 q' OLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
# J9 s; p; ^' T5 k  s
17.png
! O) E5 z* U2 M" U
因此保留原有的.icf 文件。
0 P1 J. [; g  k0 y
  {5 @5 x& Z' Q" M$ B03移植
+ F2 R+ p- H& y$ B8 T9 I以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。8 R9 X4 `+ \8 f8 N

6 t+ @" x: j5 ?* y  e" G' F根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
: u/ R4 }0 Q9 j5 X
5 P1 a  |. Y# T- {+ a3 _3.1. 移植 1_Image_KMS_Blob  r/ f; F4 @5 m; Z, p4 F
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
( h: G' s( a9 n, \% R+ g5 V; b
18.png
19.png
1 e$ r7 Q) L# g% R+ G( J5 z$ j! J
3.2. 移植 1_Image_SECoreBin
( t8 L$ o1 X1 t  Z打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
) y, S7 U* Z" L* g3 K1 q# s  i8 w
20.png
21.png

& N: y4 @2 c) _4 h4 e$ T2 G" W3.3. 移植 1_Image_BFU8 A( K' x2 Q9 G
复制 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 目录下 。
3 f4 R* O7 e" W# J. W
0 D9 P4 U& f: M. {6 G打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。( x4 z3 W: B% @0 `! o$ S7 @
22.png
23.png
24.png
  1. main.c
      x  A3 k! ^; q/ p
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined/ p1 I1 {) t! V7 `
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_( z3 X+ e/ v* U
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93. j) n9 c/ ~, h; h; @" ]" y
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of2 e, T. Q+ o  @, r
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT* [" G) C+ N: q" q& z
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    4 j, w: ~2 F- |1 ^4 B
  8. "AHBCLK2Divider"
    % \; q2 J' l! ?5 E7 O8 r
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_3 g) `) Q0 E6 ~! D5 V2 g0 i
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
9 ~% ]; a! e8 L: \! Y% L. E- j+ y
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/8 N: s  n$ ^/ V$ x" s" g
  2. + A/ L6 Z. u- @% h
  3. #if defined(DUAL_CORE): v( J( G' D6 ]5 @: D5 v
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
    ; X. j' x/ [& D: n
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK, \0 _& m5 |" S- l/ x
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    / l+ y4 T- F0 v8 ~& P& l7 J
  7. #else7 B% P- I4 y9 g7 H# G0 G8 y/ o
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    3 @5 o9 ~9 t/ T& G
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    & @# L9 m9 w8 ^  q# p6 X! ^$ ]
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;  o, K& W# [* Y# \: c9 p
  11. #endif /* DUAL_CORE */; ?" H! H# L( n) V
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    8 G* p7 v6 {" l9 u' x8 k7 y9 {
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;$ L9 }/ X' ?& p6 n" m- S  T+ d
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    ; t- E# @) |+ x, {' K. F
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    ! n: {0 }- E# z( ?4 z5 R7 _
  16. #if defined(DUAL_CORE)9 c  }3 m, \2 u# Y: f( u* v
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;5 a! E2 {" m0 y' n% W  A
  18. #endif /* DUAL_CORE */! u! o# q! Z; M% }, a
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    ' w, @" j8 z$ n) Q
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译, ^4 }2 `& _& S% ?; V- `0 j- {
25.png
& I: W4 f; q% A% m* S; h; r
3.4. 移植 LoRaWAN_End_Node- H: W; \' }  ^1 t# 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 目录下。
3 Y: Y# k0 f1 n+ F. J+ D, \. e$ m+ H" X. ~1 B; z
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。; K/ P7 r" c/ `4 ~- H9 ?
26.png
27.png
28.png

8 f0 ^4 ]( |; ?修改代码如下5 m- {! Y% X6 g# u
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)* H, }1 J7 h' I* A
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx," C' l: d: V, C' k. c; a$ b  d
  3. DMA_CHANNEL_NPRIV) != HAL_OK): Z, {% Q& W  M1 C  Y9 @
  4. {5 j  }5 z' W8 s8 _
  5. Error_Handler();4 l; t# W" i- B
  6. }8 [, ^  O* u0 c! z9 y( _$ G& B
  7. #endif /* DMA_SECURE_SWITCH */% [  O2 p7 J2 |4 S  |' R
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:, t2 i2 N6 Y3 L  t9 e4 M/ v
29.png

% x3 V% g0 C  Y' x5 Z0 E- y3.5. 移植 disable_security.bat 4 G: u( f1 O' u& j8 y
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。; l/ w/ b" ^, L/ |7 t- p2 D0 {# O5 T3 v
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
      D+ @. u9 B2 B* V" N# L5 @
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof' Y: ^/ r6 o5 ^! \2 n
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    8 ]6 m3 m/ @! Q/ w% s# I- }/ t9 e
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof& X/ A) q8 ?( t/ M) _% v
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
    ; a7 \! i: B. q' V: [2 x9 c, N
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
    ) V0 I# m/ d  G& x; }/ O; M
  7. REM echo ------ Security Configuration ------
    # x7 z& T8 z' V7 I% g
  8. REM echo HDPAD: User Flash hide protection area access disabled
    9 u/ X2 M/ M+ Y+ _& H+ I! [
  9. REM call :write_ob HDPAD 0x1 || goto :eof. Q( F  ^% \% m- u6 G' M
  10. REM echo SPISD: SPI3 security disabled9 e1 D3 }3 e- ~  ^4 X6 p8 T; S/ a
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    ( E# U# J" R/ C2 R' w
  12. REM echo SBRSA: Reset default value of SRAM Start address secure' e# ]3 V: G3 j0 H
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    0 h" j7 d/ n/ q4 m0 I5 P
  14. REM echo SBRV: Reset default value of CPU2 Boot start address) R( W3 l! ?1 C+ z8 N. x$ P
  15. REM call :write_ob SBRV 0x8000 || goto :eof; @# I, |4 t& b, ~
  16. exit /B 02 b$ Z8 ^! ?% e9 a( S
复制代码

0 \! X3 W5 b# [5 R' L! A/ K3.6. 配置 setenv.bat
2 V2 M+ i$ \6 ]7 H$ c% |& `" R
, N7 j' \' l. [% N( d在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 ) @# k- e' d) [' G

2 B1 [0 |1 g& Z2 Z04编译* m$ l$ ^8 D9 t- }& f8 u4 L- H  B; J& }
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。9 |' X6 f# D( Z5 p1 y+ J5 t' b
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
$ x# I* y' y3 w
32.png
33.png
' U$ Z2 x1 F; J5 g8 H  Q
05下载0 }/ W1 v; e! ~9 T- V9 k) ]6 w
通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。4 Z7 G, Z# F$ `

+ Y9 x8 {/ j1 ?$ U9 B) j6 A06运行. l5 x. y0 a8 X; R4 ?& g
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
6 I' n) u% Z( C. E2 X6 E8 ~

& G" k; C# H+ A+ R07小结8 N: c% E: ]( m; S# H% P* d2 F# M5 K
移植要点: 5 C$ c7 N  P4 u1 L0 D5 @/ d
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
2 L' x( W! k% Y4 y, M; L2. 保持原有的.icf 文件
7 M& g! Q" M" ?) y% X3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 ( c& _! K- N+ e' u# L1 W
4. STM32WL55XX 改为 STM32WLE5XX
& z8 ?9 k9 u# A' N+ T5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
9 l) w/ q* t, _) N  V& S0 r6 g* ]! g! J
* {9 ?4 D8 t, R
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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