请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
1 E+ a* E* Z+ U' B最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
7 K$ Q2 H  n4 Q) [+ D
; a# u3 ~. d! K! ~7 q- V! I4 X  N02问题描述
& g+ m/ a! P( R4 f$ {以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
2 q# u# E/ f# O0 w" n

" K1 c* h( ^  G( _/ w* U先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。# V" N- K9 l4 M1 Q

* t. g. l& r% N; v3 j! lLoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。0 h- ?# J2 D0 O' x

% w- |# S6 L$ {3 G2.1. 对比.s 文件(两个都一样)( L/ M% P; l5 U3 V9 J7 S, T

8 c* r/ m2 ]  I2 [; dLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
1 f# [: j" @$ M2 v' `  K
+ ~! G9 Q, ~. i5 O: h9 o
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
8 `6 T8 \0 E8 a$ [/ Y7 |$ K5 d4 I" R, O* ?. _4 u
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
9 m0 o+ p+ h. _  k

  t4 R% t* S0 G所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
, s+ p1 L6 H  w; u$ g4 v

  c; Q$ f6 n/ \. O& 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 目录下
( @6 m" m( a7 k& b" {2 o0 R

5 F# i) B( `& J, e, Z4 j  c注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
  H' g# G2 y8 O/ F
12.png
2.2. 对比.icf 文件(四个都不一样)) ~% P! l$ \/ u7 E/ [) ]1 i
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 文件都不一样!9 p: A" L$ ]0 r  h  r
13.png
14.png
15.png
16.png

: a1 h" \5 j* V& |5 s& \LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!  H% H- i1 I3 I" f+ g* L
17.png

$ h' B+ g5 d6 {( T4 N因此保留原有的.icf 文件。1 m4 n* k! k- e" O( S% M* r
+ `) Q: v8 q$ W7 A2 r+ A5 A0 Y
03移植: L- G4 \4 J3 J4 ^3 V+ t1 k
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
) L8 t; j: }. |  x5 N8 k$ H  @  V
7 z% u- _4 }* c5 z0 s0 [  N, v根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
. P! m% u/ U7 c7 T8 v) Z* i/ w% R% ~$ d) x
3.1. 移植 1_Image_KMS_Blob
* ^. A6 m6 y! M+ y/ r$ `打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。7 G. @# f: s- o$ u; t& j! ]
18.png
19.png
- n0 Z' V7 W8 N; T& y- h; F
3.2. 移植 1_Image_SECoreBin
; l6 Q/ b" l' G/ C( i& m* Z0 H: }打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。% J. Z7 ^+ W' b, @4 t
20.png
21.png

( a+ S* d& X/ o8 I; p7 j3.3. 移植 1_Image_BFU
) v4 j7 J& v, Z/ N4 R复制 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 目录下 。
$ ^# A! c; h$ Q' r! R, @; G3 O5 {) I( S$ O. i
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
& R" W) ]* k2 k, x
22.png
23.png
24.png
  1. main.c
    . T0 D, X- l1 Q# {  ^
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
      X) ~3 |' \+ `$ ]& i
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_3 b+ a' T0 ~: K- {
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c933 |: G6 T7 i) Q! U1 K
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
    7 I& J/ K! q: `. {
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT3 u$ ^8 M# V9 @. P" \
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    7 Q/ W. A# m  k1 k2 v  B  y. j
  8. "AHBCLK2Divider"
    0 ?9 _$ z! ]0 ]1 O( W
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_3 R/ ^1 D* o, H# K7 n
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
/ b( X8 A! p, y+ N3 B0 ^# P: O/ L
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    ' J$ k3 J% q$ R$ ]+ }

  2. : U! w% p, \  k# M
  3. #if defined(DUAL_CORE)& e8 f3 P3 ^' O% |/ E3 I
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
    # [" n- r$ P3 K+ D/ U. g7 u9 r0 c
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK' l. ^0 m+ i' Y$ v1 p# _
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    , L1 I8 q/ A& P6 x% V
  7. #else; H- c' }- B  h/ i& n% @5 t
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3' C$ L3 k1 ^' Y3 I7 Z. ^8 }
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    5 A. N7 J  j. L2 d+ s
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;' e* s# {; o5 p* A2 e' c! R( E
  11. #endif /* DUAL_CORE */3 B3 N/ x+ {6 ^2 o. s1 n9 v
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    / Y5 Q& w. s4 T) N' d
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    $ m, [# e* a- W1 k8 y  l; v
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    ' D7 p, [6 u0 R, H
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    # b/ j9 B. k, V- |0 C! T: l3 B3 V
  16. #if defined(DUAL_CORE)
    * c7 H  W% W  ~  ?% E
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    + x( g( _1 P+ f7 B6 J: ]6 ^) l, |
  18. #endif /* DUAL_CORE */
    : J' t* I, u$ m: I
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;% p! Q8 N9 c1 n! u. S  M
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译3 q+ |, i9 I6 E( l# G' r, U; O" i
25.png

% M! d, Q$ d! z8 I$ y9 d3.4. 移植 LoRaWAN_End_Node
* r# t. u4 d, j( r. u7 W- ?, t9 l  Y复制 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 目录下。+ J' g9 Q1 v5 X

* j: u/ ~5 y4 J: I$ u打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
4 C; O/ a% Y- P8 U
26.png
27.png
28.png
( F- L, E6 z1 t$ v/ E) Y9 r1 [
修改代码如下; X2 K; Q1 N; ]; j* d
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)& D: @5 h1 a: e
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx," U2 @8 r8 K+ a" T1 R. I7 l0 b8 j
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
    + r+ Y! @1 s$ Z) t2 L! U( p
  4. {
    & J& r/ x5 N% S# W; Z4 H0 J) F- G
  5. Error_Handler();
    2 G) k2 ]+ k; C  J4 e
  6. }. i& `/ D" X& H9 }
  7. #endif /* DMA_SECURE_SWITCH */7 M5 O0 D' k" R# `
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:1 D: n  G5 d: b1 n) N% g: B* {/ j
29.png

: v6 J% ]7 E, D# ^% F3.5. 移植 disable_security.bat ) m4 b1 u0 Y4 w' Y
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
; C/ E7 c: X/ E  k0 K
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    ( r9 v" R3 `( s8 ]7 N+ T
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    4 f/ J6 o% Y1 c, `( m
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    5 o( ^  v1 R! R5 Z( a/ k1 n" g
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    . S" M! }& Y& w  v5 w2 g9 F$ A
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled3 X7 I3 O6 ]: @
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
    1 Q# M$ X6 j7 e+ H6 F6 p" N% P5 d
  7. REM echo ------ Security Configuration ------' V4 K# ~1 ?' d3 }2 F1 K8 R
  8. REM echo HDPAD: User Flash hide protection area access disabled
    3 W" |; P- b) B4 G$ ~6 L
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    . E$ f2 @% z$ q2 V& h5 |
  10. REM echo SPISD: SPI3 security disabled
    7 O- r" x7 h. c' Z+ Y
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    ' o$ B, z! a) B
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    6 R) G( D; N; x; j. L- @  a  Q7 m
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    & D. p9 X0 R: r' j8 c
  14. REM echo SBRV: Reset default value of CPU2 Boot start address0 D. G% x. a- z% v9 J/ r
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    1 ~7 D+ K: b+ [; ~
  16. exit /B 0
    ! u* A5 J+ n& K2 |3 M( S  f1 ?- o& A
复制代码

" _+ J6 w- l0 p& n3.6. 配置 setenv.bat # I: q  Z2 T  \! P
7 O5 K5 q; s) U+ D1 x9 D
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 0 e* A+ h& E6 N3 m! m
6 K5 `- v1 T5 u" X6 s3 u# g
04编译
7 H5 A7 u8 m- O8 B6 A5 q# G可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
( ]# U1 E- L2 e
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
& c# h0 f6 V2 e7 o# t% X. h! [
32.png
33.png
/ ?5 n2 ~& d  h  b$ e* [; m1 o0 I( ?  Z
05下载
  P2 {' n8 w& u) j, w; _通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
! e: d- \+ Q8 O% f4 B5 Y) L2 _
- y1 r3 A/ x8 Q8 d% ^( W. h) o06运行
! x4 u' g9 }, Q4 e下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。3 y7 k6 y" o; ^# m( K- \/ l6 e

' W1 ^% s' H" _. b07小结
/ l4 I4 L2 E5 C! @9 b移植要点: ! P. L% v; Q' r; q. m' _+ @
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
; Y# @+ L. q6 i2 z$ K" Y2. 保持原有的.icf 文件
: t$ V- \5 p# @3 P& b# O7 p4 k3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 9 y2 |; P: k* C' V, z. O( n+ u! }
4. STM32WL55XX 改为 STM32WLE5XX
9 z& l) @1 e  _1 Q" s! @5 Q' p1 `5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。. `2 Z6 j: I9 L/ Q. [9 r3 l

7 b2 N- K  U# q, h) h4 O2 }
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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