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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  ; n* o# I* H) C
最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
# r' m: z! M  B# v% X. x" [3 J  v" {4 i! P* v  {0 q  t& T
02问题描述 % a  P. g# @4 g! m8 Q. B5 S, \
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。/ l' z  ^; B' {0 s0 z# E

/ T/ K$ q" L: @8 G8 i% N3 E先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
7 x+ D2 _3 @- V8 Z6 H, ]- A

* d' |+ k: A, A8 l) v7 YLoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。7 v% W) B% [2 v9 I+ t. J( i

9 V7 L0 n2 a9 Y3 ?2.1. 对比.s 文件(两个都一样). H0 d4 n. e; n. i! f1 l

4 C+ Z5 w# z0 ~/ R5 m. U8 G+ WLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!3 Q6 B3 P5 T% Y; G5 |0 B2 I3 C. X

3 b$ l; z2 R2 \; iLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
! ^$ N. H) v, P* [0 ]! p8 ?, ^
! R, w% c4 P4 [, C" V, |EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
6 _2 Q; a  E% Q( q2 u% D9 k
% x3 x) S8 r6 ?; d0 q
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
, R* ]% D- s/ z; R

/ w& k% r% s$ s  p1 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 目录下
% f+ C# o* ^6 w7 K, u
  {3 L6 j* `% _* N7 R% y/ ~, n# ~
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
3 _/ |$ Y$ B1 ]7 E) ]
12.png
2.2. 对比.icf 文件(四个都不一样)8 d( ?# w: J1 T- r0 r3 h
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 文件都不一样!
6 b' D3 a% L- Q6 ^9 g
13.png
14.png
15.png
16.png

" ~4 P' Q; I/ Q' q- W! z: T3 eLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!% ^# {4 Y/ b4 l+ d
17.png
0 P, |  E0 r3 a2 O7 S. x
因此保留原有的.icf 文件。3 e8 P" D2 s6 g  ?% d

9 k- @* ~- E- W( n0 L4 @03移植1 V7 {% f" b: {' x
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
, {7 m! Q8 D3 x
0 r, }( I9 r) h5 ?根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
3 @2 v" [$ ^7 l- o( g
! S5 q# S6 M: Y4 H6 m. h$ J3.1. 移植 1_Image_KMS_Blob
+ A, [; ]6 ]0 `+ v4 Q" Y# q打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
$ O8 ^6 @0 Z% |: ^* B
18.png
19.png
; p( _' i" p. t, v  I
3.2. 移植 1_Image_SECoreBin
; Q5 I6 k, |9 A打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。1 P5 R# W; P- t. n
20.png
21.png

+ u  U6 ~5 _6 A  [; e" K- I3.3. 移植 1_Image_BFU
: o9 T7 R: g# s$ @8 X3 V! 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 目录下 。
6 @6 S1 w1 f, N4 `- ^  z, }- ]/ X  S* H+ c0 n
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
. {% ^8 s. X( c
22.png
23.png
24.png
  1. main.c
    " U' C1 B% x" o* q, w0 k. ^# }
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined1 a9 x. v" N# |' L5 V4 P, O1 w% Y
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    # e3 c+ C$ g7 t
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    6 e6 \1 ^  L6 r& j
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of8 z+ P2 o& }1 F: b
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT. g: I# v+ `: a. r7 M
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    1 v" @2 N, g8 A' N5 @# E
  8. "AHBCLK2Divider"
    - b; _  M9 Z6 R& \6 ?! p* ^. J
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_) H  t! N: ~. g1 d' q) t
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
' X' r+ ?5 m: N& ?
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/% K! G5 l& E7 X- m7 g

  2. % g7 p3 }$ x7 ~$ p
  3. #if defined(DUAL_CORE)* F8 U9 ?, A( B1 {) l3 J
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
    % U- n8 v. X9 j- a! P+ f
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK7 k2 b, S+ n( A# \
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;# R: E& Q' S7 n, @% o8 `4 I7 Z( J
  7. #else
    & Q7 @0 W1 p- E' Q- v+ v" G$ B/ n
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3: Z" U1 R) y3 h2 i
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    ; K" s9 @7 E3 e+ C0 [$ F/ i
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;' m% o% W- L0 n4 |: O- Y) q% S
  11. #endif /* DUAL_CORE */2 E$ v/ k/ M) I1 l/ D. X
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    ; A0 [, u+ q1 }; Y$ }, j
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;4 c3 x+ s, `  ~2 a% _! v
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;# p- k7 r4 Q: W5 Q6 ^7 T$ l6 ]
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    + h* I& ^4 D6 w$ x
  16. #if defined(DUAL_CORE)
      i3 q2 q1 d) N2 W
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;9 m+ m6 m5 I. D  [
  18. #endif /* DUAL_CORE */" x5 s  E, ~1 Q4 p3 i4 i
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    - r0 P# Q. [; Y- g
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译. \. p3 ]7 s: X4 n0 y) Q
25.png

' D9 a* w; e, T' n3 I8 Z3.4. 移植 LoRaWAN_End_Node
2 {+ ?3 }0 m& l复制 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 目录下。% Y: y- H* }+ Z0 W

7 i4 K0 K! C7 O2 _, A打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
9 O8 p7 u( N# _, t* z
26.png
27.png
28.png
* L* K4 Y  L0 ^$ h9 J
修改代码如下
& D* S+ x  w9 T- ]/ r" n) N. r
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)
      R- P& w- h* K* f, Z6 _* s
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    ( J2 l5 C0 P1 b# H* _! s
  3. DMA_CHANNEL_NPRIV) != HAL_OK)" E! w! p' E5 k
  4. {% e5 V: L% o; A7 s/ J: R, q
  5. Error_Handler();
    8 }9 ^" t& P1 c% R8 d' j
  6. }  p' V- R# m7 w# P! P+ c; m
  7. #endif /* DMA_SECURE_SWITCH */
    * `$ V# X) ]& h1 u( J6 l0 v1 X
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
+ G) T5 T. C$ U
29.png

% g6 X% c9 h0 _; @3.5. 移植 disable_security.bat 0 W. W4 L0 f  O' D& \& B  n) v
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
( J* A0 z8 B% _" C* H
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    4 H$ [  S* I# R
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    + Y. u! S- ]' B7 F: N1 k0 D; z
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    " T! X" n3 y% A' j! a2 b
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof0 J4 V  Q) z1 b4 Q
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled2 c. ^- A2 `! a
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
    8 L1 W* ~  g- A3 S' y
  7. REM echo ------ Security Configuration ------/ J" r' P1 _( U& y
  8. REM echo HDPAD: User Flash hide protection area access disabled  W2 ^5 F; M' W. h
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    ! T" N4 \: {1 Q% \& z( l4 H
  10. REM echo SPISD: SPI3 security disabled
    . T8 N3 h" [' N5 s
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    4 H! c7 _9 L  i2 e; a
  12. REM echo SBRSA: Reset default value of SRAM Start address secure" P, T- x2 {% f4 G* b" ^- ~% w: Y. u
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof9 z/ f0 s# p! l2 u- i
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    8 H+ `7 ]' X4 z6 t+ l$ F* P4 h: @
  15. REM call :write_ob SBRV 0x8000 || goto :eof" |# V+ [; k' b6 K% ^) K+ m
  16. exit /B 0
    2 N$ Y9 }* X0 F  Z2 D5 N* ]) ~( Q1 U
复制代码
" y2 ^6 }0 O& ]. u$ ^, S: J
3.6. 配置 setenv.bat 0 G& y+ A# |$ ~) u+ y
; b/ f- e1 g+ Z
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 9 [" x9 ^2 _) j( s* E

0 M% V/ P# F- p* {8 _5 k04编译9 s8 d) K# }8 H! D6 z
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。0 \* ~/ Q: r5 x* I1 o' D# ~/ _
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!" h& e1 l( t/ c5 i
32.png
33.png
, M5 Z: s2 \4 x& `4 ?
05下载
4 h. i9 l1 w, `( z+ ?通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
8 R( r8 g# \0 Y( ^' F
& o7 }2 b  h2 ?8 X06运行
4 ?, v" I2 s4 H" p5 l% z. _下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
$ `) i1 m6 ^7 C& G/ J

) A# `6 E) z* d1 g5 j: P07小结
3 {- p8 b; ^0 U$ _1 K$ D移植要点: 1 O$ @- d4 h7 Z6 R5 B" U9 m
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
- Z) [6 U* I7 o( N! |2. 保持原有的.icf 文件
; f. L( `- y6 l3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 / ]6 e" b6 V6 L
4. STM32WL55XX 改为 STM32WLE5XX 9 L, T" U: D8 R/ y1 ^/ I9 q9 n
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。2 M- ?: U3 @0 h$ h' C, O, Q* p# p

5 G3 y, x' }9 v3 u* z3 ?
赞 收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

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