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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
4 V( b% L3 u' @4 K% X1 j最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?% }# L! T4 r3 j+ ?

/ q: R) b  }  Z. A# v02问题描述 * ~" c; u( q5 C
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
" s  B& u# N9 S# q

) i. S6 i- Z. C1 |先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
+ K% }5 b0 I  ]" H+ ^, U8 K
/ ~6 L5 Y. b; L. V; d$ C
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
3 s1 D5 N- F4 t% \
4 g1 O; Y1 @" _4 H6 F! D" s2.1. 对比.s 文件(两个都一样)- `7 j+ f$ K5 y8 R
, E/ H1 c/ C0 w
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!+ P. m$ F' s5 I0 o4 y) L, `
9 P3 Y& ?" V; E
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!4 F, a6 l- b! A# S, _9 K

$ W$ A" Z$ e1 ?7 r* A% FEWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
) e8 C7 V( Q: x! P1 U1 F) b
# d, x: ?; J: j; H5 K
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s6 G) j4 q% ~9 u
$ n( C8 @7 q6 B" L0 u5 r
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下2 N# @7 _  p# |, u: @1 |
* A& Z" m. B- w" m" M/ ~$ I
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
6 u1 y/ K9 m) ?- J, l$ N- n
12.png
2.2. 对比.icf 文件(四个都不一样)
( _' T8 N1 m, {' qLoRaWAN_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 文件都不一样!
# {+ q% f5 X9 ?. V* V
13.png
14.png
15.png
16.png
2 v. R; u2 K! ?* Z' q
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
# {5 M1 y) J6 D
17.png
  Y' n% o% W' X  i
因此保留原有的.icf 文件。0 @1 W# B& T" V9 p: g2 A: `
1 J4 u, z% e3 {5 q
03移植
2 q3 J0 `  L( \以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。, A& P8 }* o+ J/ j& n

7 w5 `' {6 ?- }  ]  k7 k$ w根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node" u2 B, Z- z( Y- M* ^
6 e" H6 @% X; r7 X- o0 o
3.1. 移植 1_Image_KMS_Blob0 V! @3 Z( S8 E. r( u4 I
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
# h# s6 j; w5 J! j: F
18.png
19.png

- ^" q1 O$ X& c# _7 f7 Y$ f3.2. 移植 1_Image_SECoreBin
! y% _  g# \1 Y打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。7 E, ~5 x3 n' s3 A+ G; g
20.png
21.png
( S& S+ B( `% `" k( z$ _' r
3.3. 移植 1_Image_BFU4 f+ u- o" }9 l/ u. k. x" g1 r1 n1 N
复制 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 目录下 。- l) B3 `- {7 `1 t
- n( C: o8 P3 u9 j
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。, Z2 |8 X6 l) B5 m% z+ x9 f
22.png
23.png
24.png
  1. main.c
    + }* _1 @7 l& I4 U0 o' E2 P4 j! F
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    0 B; R8 q' C/ F3 S
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_8 h9 i  j$ z: o% P
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c935 d: Y6 O# l1 H5 V; W; _0 z! P6 f
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of: U2 `6 @0 N" C/ n
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
    ) u" S- l% w1 @8 F' Z
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field2 a1 ~3 W5 u/ Y1 H
  8. "AHBCLK2Divider"- k2 S0 |0 x( X4 ~0 a9 X, s' N1 t( H7 _
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    $ Y4 i7 s/ S/ ~+ v/ n
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:2 P; L0 O2 T3 X, V1 J) U
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/1 i! ^7 r# u' n

  2. * B$ x* Z# J: Z
  3. #if defined(DUAL_CORE)$ z3 j9 r9 `) v0 ]! E
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2) t# S: T* S4 b  }
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    1 b) v& x6 o' G4 T. R, C" Y
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    4 _$ A2 V9 `* Q0 q4 _
  7. #else4 n- M. O9 Z1 ?  w- W2 m
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    + B3 {/ `% c( e2 E; r* y
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK2 t  N/ s; }" X9 |3 X, h& b/ {" ]( t
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    ) {, I) U4 k8 \* V% X
  11. #endif /* DUAL_CORE */. m/ f4 j' C7 q6 E
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;; F+ U& `1 y3 _
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    ; a+ _1 c' |! ?; m% X3 o
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;8 z& y' W$ [/ b0 z4 {  \7 z
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    ! `2 d6 `4 A* L% q! W* d
  16. #if defined(DUAL_CORE)
    4 M$ }+ ]  o1 I" L8 g
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    2 V1 ~1 H$ s2 d" k2 b5 w
  18. #endif /* DUAL_CORE */
    ) `  j, X  w. G4 O0 g, X; z
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    7 V, Y2 k1 Z% v0 N$ n
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译6 @" o( d1 F0 M' ?
25.png
7 h% D/ D6 N9 ~' T) [- e
3.4. 移植 LoRaWAN_End_Node7 V4 o' M7 m+ {" b* ^
复制 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 目录下。/ X4 `6 ]3 w. I
( W  b; A, _1 g+ S: n4 S
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。4 n3 q4 Y& E! I. l- d/ I1 r  q
26.png
27.png
28.png

3 e2 f/ W% K% y/ E6 Y( S- f修改代码如下! G& g$ L; z: f) e- T; g( o1 V& z. c1 ~
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)9 M3 M9 }) Q# q' d
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,9 O  ?% _8 t, A0 c# O
  3. DMA_CHANNEL_NPRIV) != HAL_OK)+ }- n. u  `1 K% P* t" Q4 C
  4. {0 h. D  n: S1 Y% o+ ^; x; e. `
  5. Error_Handler();% O8 e5 M7 S: K5 i" |, d% u
  6. }, v- E( a/ U) G
  7. #endif /* DMA_SECURE_SWITCH */( P" U. M& J0 x1 A. Z# S. j
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:' s% u/ G$ c; i& s
29.png

# K7 T0 k( G8 {9 t3 A/ P6 Y3.5. 移植 disable_security.bat
1 h6 P" L* c$ p) J5 l, o( j& Q) nSTM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。6 s0 ^+ V& ?5 `0 M! g0 s- @6 |$ C
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    " g' {! R) m# [/ I
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    9 E( k/ K- [9 v$ v$ Z7 m
  3. echo BOOT: CPU1 CM4 Boot lock disabled9 f6 V- e$ G! _3 S, T* @- W
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof; S4 G8 q# f5 J0 `! n0 R2 `
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
    * m5 v% h7 h5 C4 o
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof0 Y) i! [- C7 J% ~1 P5 }
  7. REM echo ------ Security Configuration ------
    5 a! S1 s2 a2 y9 u4 W
  8. REM echo HDPAD: User Flash hide protection area access disabled8 K8 X, s7 U$ F9 P5 W
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    & g) p* y2 k5 I2 m, s% q1 R( W& A7 Y
  10. REM echo SPISD: SPI3 security disabled
    - t6 |6 s1 ^4 C
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof  Y) K5 E! Y, e7 e  k+ L
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    % F& s( B$ G# _$ B: H
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    ! S5 a  P3 D$ E! A. c' i! K( y
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    0 \  k( n0 B5 Z5 M# _# N( z: u( w; n5 p
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    8 c+ ~) h( C# v: H5 W* X
  16. exit /B 0
    # M" f  z6 [0 y! B& y- w
复制代码
) H! c' B+ R/ p
3.6. 配置 setenv.bat
# ^/ ^# D( k+ |& \' |, X
, c, ~) h! a; s3 T, S2 i, Y在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。
/ M) O7 G4 E% z4 C5 p
4 |% |7 q1 [6 d1 J04编译7 n8 s$ b* L* i; Y2 T
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
: a& B+ ^$ p6 o6 Z
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
8 {7 D- `! y. d
32.png
33.png
$ T: n7 ]$ G8 R& I/ A
05下载% N$ Z3 D4 @+ ~" w7 ^+ p
通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。& H' z! ^" D* B# _% S5 |+ o
  L" h1 b+ E! U( A  y( K! s
06运行  v# W: u) U; k7 D  Z8 r
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
) v1 x8 T2 B7 A. C' E" p* H8 V
* Z' y4 i: J" N4 O1 Z2 a1 U) E
07小结: R8 J. |" b4 I
移植要点: + w  V4 N8 W3 \
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
& S( V: A3 Q/ R, S2. 保持原有的.icf 文件 ) f3 I4 K# I! K' E' i5 e* s
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
) c3 @2 |3 q% ^/ l4. STM32WL55XX 改为 STM32WLE5XX   R3 S; C" {% s0 z5 ?2 z' w
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
& N* j& F3 s8 s+ v+ x, f; Q6 O& q- c) @+ W
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版