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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
: c- }0 Q: H5 ^+ {最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
4 U4 N  ^$ b5 j. |1 N& l1 p/ U$ t* z0 H7 \! y3 d3 [  G( r
02问题描述 ' m; _7 A# v$ S1 b7 F1 `
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。( G" T7 Y& g4 h+ H
5 W  |+ G/ ^8 B" b
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
9 U9 w' `" ?+ S% m) A1 s8 K7 G& @
/ W) K- K7 b: I" Q7 l
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。" \. H3 F6 n' |9 O
. T; P4 P2 ^/ ^+ y) _
2.1. 对比.s 文件(两个都一样)
! U4 z& x7 z( ~/ m( ?  ], x8 R. u7 q! V
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!! F5 g) h: x1 r9 R& t" S' f
$ }9 Z5 Y% A7 L. R8 Y, k! |! S
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
2 F& l0 a! K+ b" I8 I
. X: q8 v7 l! _/ D- \9 x: aEWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!0 h9 i7 E& x  d7 Y

1 g6 G6 ^6 \% ?9 c所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
, d0 N/ b4 m6 s  I( Z! W

& Q* K. C; h2 x% _, k/ ~所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下
( I1 ~  L# W$ Z# |& g
& h# A" ~* M# t0 x9 y( W$ W4 [3 H
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。8 K7 F$ N$ F% d. h# Y
12.png
2.2. 对比.icf 文件(四个都不一样)
: Q9 W2 a8 h# I' J/ Q% j' u8 \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 文件都不一样!
2 L- G6 T1 O/ p$ y. q
13.png
14.png
15.png
16.png

5 o2 R+ ^- y7 S  BLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!, j5 M; }, y7 G) d, j
17.png
' K5 @; l* j( P" \. ~2 D
因此保留原有的.icf 文件。7 `0 s/ l# V9 ^- M( M8 p
  U9 ^1 l- n2 A8 K* s
03移植5 L; `' R3 k( u% w% m& S0 D
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
4 A, ]" h8 G- S: A/ L& J0 Z. ~* d% B8 C
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
& r/ ?4 l) Z; D) Q' ?- S4 q4 M3 ]* Q; s- G. w7 b
3.1. 移植 1_Image_KMS_Blob
  I0 K* x( t  m打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。0 h# Y1 A# j/ X/ n+ \2 u% O
18.png
19.png

3 }+ x$ X; S, a0 o# A% |& a3.2. 移植 1_Image_SECoreBin : E' I, v; D5 O; q6 {
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。& o2 ?. K' J$ B
20.png
21.png
( W, y) T# `6 f5 G
3.3. 移植 1_Image_BFU
" t( J9 s+ h  U5 q复制 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 目录下 。' G. T; t6 h- r0 i' @! \
1 E& m5 B) a. \# O2 J
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。2 {3 G7 c" L' @# p. C; Z8 i
22.png
23.png
24.png
  1. main.c; q" s4 e5 U3 \2 ~! W$ @
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    9 g9 R) y2 g" Q7 A# m& v/ L% U
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    ! J' A8 t# _" U; v8 h3 y: E
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    4 k  m/ D: n9 n3 A- r) V( N
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
    7 @. s; ]$ ?  G. A
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
    3 @( q/ n9 X* h! y) U! z
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    8 L% ~" t2 Y" a& C! }
  8. "AHBCLK2Divider"
      `: l6 H. _" D* [3 I
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    : }+ T# t0 B: Q$ p$ d9 M
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
4 t# W8 _. S& b% e) b
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/$ H" c/ Y% d! G; _; K  v) q
  2. 0 \; g& [( X$ ~- V
  3. #if defined(DUAL_CORE)
    ' l0 {" B& i/ K
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2. `: h; m$ s2 t$ m% ^! U$ \( X
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK% ^! w9 T( Z$ D- u7 {0 \
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    ) {# `  }: q6 \8 M
  7. #else" l) N2 b+ `5 |+ `3 L+ f* O1 H
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    " p% h6 ?3 l, ]) g) S  n
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    - \1 T6 i6 U8 {+ c' n0 [' p3 d! s& N1 [$ F
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;1 k! t1 G  d1 ]! z$ a9 u
  11. #endif /* DUAL_CORE */
    8 M: J4 v/ K! d# ?2 N' s
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;# A' i( \% ~  [4 T
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    0 ]) o+ |0 X/ z
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;5 t# Y/ E9 A/ ]9 n
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;- [! G5 Q0 L3 X4 `- H) H" v6 m
  16. #if defined(DUAL_CORE)
    , A* w! n  B+ E
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;& ^% s7 J. y6 X0 I5 m% x6 h
  18. #endif /* DUAL_CORE */
    9 G$ e+ Z5 k0 N6 w: l2 ]: e, G
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    , }3 V  m, }* ?. h  f
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
3 {7 g+ a" ~/ `5 D, e9 \
25.png
: _' z; N. @% }$ d; W9 R0 |4 P
3.4. 移植 LoRaWAN_End_Node$ K; M: w- Y+ f6 t: c" F
复制 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 目录下。
$ S: l4 Q4 C0 ~+ E, c! g9 `9 M; j: K) U" }1 m# e6 n
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
  D/ f) l* R& ]( X0 _; S
26.png
27.png
28.png
  p, [' I5 m# f
修改代码如下9 m, p5 C2 O3 ^
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)" F; z5 @6 p- b$ B% |4 f
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    " S# F9 A, P4 K7 q) M
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
    + S# ?+ O' V+ X6 T) a4 O9 E, ]. X3 }+ t: @
  4. {
    : k, n1 o" B: V% u  ]
  5. Error_Handler();" E! j9 x0 I9 j' n4 K
  6. }! q( Y2 n" `5 f8 K2 H1 k
  7. #endif /* DMA_SECURE_SWITCH */
    # E% N5 T% v! k8 b3 }. E4 q8 B
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:$ L# j: G# X6 [# g5 f; x+ ?
29.png
6 h! j( o  n0 X# F( \2 z
3.5. 移植 disable_security.bat 8 v& n7 D2 D  |! P
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。0 Y! y* `8 J! H7 `1 O: e
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    ' b4 U# m& W! D# a3 y
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    ! L5 K6 p7 K; f+ b7 f
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    + r: l; ^8 M% m, l) e0 ~
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    0 O7 ?. u9 V# B9 a& `( k2 w
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
    7 d% F: k6 X* l, Z
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof% j! x9 c4 v  m9 o% O
  7. REM echo ------ Security Configuration ------, f/ w( E2 V- `# A7 u
  8. REM echo HDPAD: User Flash hide protection area access disabled
    4 V' P! b2 e9 n  {" ?& ]# h( Y6 F
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    ( ]/ ~4 {% w; N$ l8 u  W0 g! p
  10. REM echo SPISD: SPI3 security disabled
    * q6 W/ E* o/ P
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    3 n: ~2 M. B( `* i  l
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    6 K3 d5 r2 [" j0 A0 h
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    & Z# o! G/ m' {" |3 w' u4 e* o* Z
  14. REM echo SBRV: Reset default value of CPU2 Boot start address/ \4 P9 [6 K+ _0 F; V, {9 l" c! R
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    ( R9 g- o5 ?+ n* N
  16. exit /B 0
    & j$ P- ~4 Q# H4 b/ q: {2 u% Y" l
复制代码

2 o7 o) I: \1 D  h: y3.6. 配置 setenv.bat
0 K* C) p9 S2 ~& W, |7 G0 N' ~9 v5 V, m9 e- K* W
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 # C- ~, C% ?" ]$ b1 k7 |1 P

4 w( P1 I* J( \+ i04编译( e0 \. b$ c( b2 `" C
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
2 {4 [$ e0 |) b0 k& p7 {
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!' @8 t# o; V9 P" }
32.png
33.png

6 j9 S5 y! I3 M7 Z05下载
2 N* E( M7 |+ C+ T3 I; l0 s& I% S3 |5 S- ?通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。; P" o9 p3 M3 G$ B
9 W: L: h5 m, x# J
06运行; e; x% I. t: k/ v, I& T
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
! ^5 K6 ~2 b, x% p9 _0 _3 q' k- }
2 ^  I+ A2 g0 D7 c: f% N
07小结3 l6 y  n2 N1 L. w& z
移植要点:
1 C/ M9 b! |1 t1 o! P1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 " O9 K4 c) F7 d' N. F
2. 保持原有的.icf 文件
3 X' t7 O4 ^2 z* h& V% x0 \3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义   l. R) C( I# G+ c- [
4. STM32WL55XX 改为 STM32WLE5XX 3 a6 g3 d" `4 ^' y. Q
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。/ M1 A8 V5 f2 P0 i  c  H

' {* h0 T& T3 }: m
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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