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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
! U9 o9 V% a7 `! \; Q3 k+ [最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?8 A6 C2 s! u5 g7 f. L* P

9 }6 C( Z, Q% x+ Z" U0 r02问题描述 + Z' Y8 @( A! h* F6 A0 q
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
5 P' f& W, Y/ z7 l- e) }
# _$ |% ]  w) C6 E% A- s! ?2 y! T
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
8 d; x+ z2 u0 ]& u0 k
8 G- t( m! m: t  w& G' l  w
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
" _* l$ `( [" }% S% R$ Y; q! R
9 l/ F  v  V0 ?( @5 t$ p! L) }5 n2.1. 对比.s 文件(两个都一样)
7 d$ ]" X. I, @# R# D* E! k; N) w3 @( }! j/ v; Y
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!# ~) ^4 R6 `5 R! s' i3 Z7 s4 e

) J" }  x6 S! g" ^$ d$ B1 WLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
% K6 k+ x* x& e6 G$ [' ?! T$ N# z- d1 X$ ^* C* R, j& K0 Y5 z. x
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!. Z' Q2 }) `2 G+ v& z
  h3 n- o9 T  l8 N0 ]3 L
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s0 z; n2 p+ Y' o% c7 m7 J. W6 a/ h% s
% q  i. B. g% ^0 D! A
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下8 _( W  o. E3 ]. j7 w7 {; x

: }& {" c" S. H, E$ y注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。, i/ [, w  x! P$ P6 W' E- _
12.png
2.2. 对比.icf 文件(四个都不一样)2 v  B1 y; @# P% Q7 J# U
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 y1 g% T6 k) H
13.png
14.png
15.png
16.png

% o% o0 ~: i/ W5 _7 mLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
+ A. E' T) M4 O( e. ^  |
17.png
& V8 o! U+ z! }2 m/ i
因此保留原有的.icf 文件。
3 r& }" L5 J2 x1 y; p( x  g8 F0 a- B; C& Q: C
03移植$ \" w$ d3 ~& _0 v7 @( a4 X
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
' |& J2 J2 r. T1 P+ X2 g) A3 K2 g2 H
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
, l4 e* Q$ p  K/ \9 p. z/ A: Y
2 Z3 T0 g8 w3 @8 F- e! c8 {3.1. 移植 1_Image_KMS_Blob7 k& F0 V. r+ N7 k2 Q& }6 _$ M2 B1 q
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
" }2 `4 e0 M0 `
18.png
19.png
  t- ]7 @5 E* r: Q* H8 O) A
3.2. 移植 1_Image_SECoreBin
+ g- S8 `' y. ~! p6 S. l打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。% v. ?- S' N$ f3 M3 i6 L) ]1 r
20.png
21.png
% N) s. c6 H6 b( k8 _; K
3.3. 移植 1_Image_BFU5 Y& o0 D- P6 _
复制 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 目录下 。1 d( Y& H0 g+ g- A
* c, N5 I3 R9 j" m3 L
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
# R' z, \# G5 U  _5 A( u" {
22.png
23.png
24.png
  1. main.c
    8 d, u) w+ ~: w8 z% M
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    . s+ U; J( s% r/ B' O  r
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_$ v' |3 h5 S8 h! i/ O
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    # Z$ F. N* Q/ E8 B$ a' \& r9 r1 J
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of# E7 ?' ?/ \, H6 g; g% v) V0 c
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT& U' r6 E9 b9 s( @, {2 g9 g/ X
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field5 P4 y% S* p, A& z% f* b9 @4 g, e
  8. "AHBCLK2Divider"
    " P; w% l! a8 k
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    3 U2 p/ I+ r# ~1 }0 Y
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:6 V: J  o" o8 b4 {5 v8 \
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    " ?& Q+ G* a: G! u% S# o

  2. ! Z: [6 R; S& C/ d
  3. #if defined(DUAL_CORE)
    9 K0 g3 x) x8 N9 V
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2. j, N* o6 Q: P  Q1 b  O  N, q
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    + l: i4 _- U# ~
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    $ O% n5 Y+ Q0 j# e$ M7 M. {
  7. #else
      g) n2 F- D1 K" e2 j
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    1 F! Z8 y4 C4 b/ p
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    % X- |! c. x- W6 f+ d& Q# Q3 j
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    . i2 }0 }# X! k
  11. #endif /* DUAL_CORE */, Z4 p8 e: M0 j$ D
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;( n% c7 t/ `9 a" y
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    5 \3 T. t, M1 p
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    ) u* }" z/ s3 Z! E9 r
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;# Q3 y& a4 d6 d2 m5 J
  16. #if defined(DUAL_CORE)
    # w! }' x9 x) d) w; m1 e
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    8 }9 i( m& P; n% ~% @
  18. #endif /* DUAL_CORE */
    9 E. N1 B+ O" n0 x
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    " U3 f9 V3 S2 s9 E9 Y; R! s
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
) P- b3 a8 R( n3 x6 Q6 T
25.png
$ S  L8 G1 R/ a, E( _; C1 E
3.4. 移植 LoRaWAN_End_Node
6 j. v9 @, R/ @. b, T复制 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 目录下。
4 I' }. d! t9 _0 Z& {: F' r( x0 ~4 G2 i1 C6 f6 p; f) d0 g
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
% G. V+ N, D6 ~- P2 w
26.png
27.png
28.png
2 W, P+ E8 c7 l: b3 [! \
修改代码如下5 v4 `# D% h  v1 |: D. ~7 T- E
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)8 y6 _! C7 w# J2 U: C* t/ F  ]
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,- p6 z8 L* p: l+ p
  3. DMA_CHANNEL_NPRIV) != HAL_OK); K3 _, H/ c1 {. }5 T" D
  4. {
    1 j% U7 b7 Y; n
  5. Error_Handler();5 v8 G" F/ {% `8 O; T' z& T' B
  6. }
    6 v( \9 N7 k' \4 a7 A, j# X
  7. #endif /* DMA_SECURE_SWITCH */8 {  ^8 l% |  s3 I# F
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
9 K: a3 {2 U% v- p! R; o
29.png
- O) V, }5 a- S! Q) {2 r( o
3.5. 移植 disable_security.bat
2 [5 @8 F( M# v1 |5 X5 Y/ lSTM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
$ x9 `. |7 K- u; U9 I" k
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes, m- f8 i) Z( h# H2 \; I( `
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof0 F9 I* P* z3 j2 x# n4 {
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    1 s7 X% ^4 F1 Q8 v! O: n1 i
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof& B7 Q7 Z" Q$ D% z  I
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
    3 X8 @. [. ^, F8 f2 O: d
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof2 J5 i! l5 w. R5 i2 L$ ~
  7. REM echo ------ Security Configuration ------3 _! v4 z- ^1 u5 m( O7 M4 b6 r
  8. REM echo HDPAD: User Flash hide protection area access disabled5 J* Z) D! n# e" I7 u: }
  9. REM call :write_ob HDPAD 0x1 || goto :eof# `* M$ z8 I6 n9 }4 u6 T. M1 ~
  10. REM echo SPISD: SPI3 security disabled
    / V. @- F9 u& M
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof. J3 c0 w1 @- O# f  `" w
  12. REM echo SBRSA: Reset default value of SRAM Start address secure" s2 U0 Y4 y: B6 x
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    ( m8 U2 `/ `  @2 d5 `2 h
  14. REM echo SBRV: Reset default value of CPU2 Boot start address1 R' f0 b, F  T; J/ g7 ^
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    ( m- E7 y) Q1 R" _9 {
  16. exit /B 0
    9 Z1 ~, Z' {! U" }  z! f9 w/ A
复制代码

7 K! _7 g2 s6 S3.6. 配置 setenv.bat
  e5 {1 \- x' W/ U7 p- l
* a* @" r" y, \在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。
- m% c) k- p* c6 l8 K8 f( ?7 ~. q( X- K
04编译
3 A& x' p4 v6 }& ^. X1 ~可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
; c& b" f$ k" q( U1 G' {
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
6 c; s1 \/ x9 v4 N* g+ Z9 `
32.png
33.png
+ A2 E7 S( h4 C! x) o
05下载
' }/ e7 u, ]0 |4 J# a2 G通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。; Y& e# r( [0 @3 O! q! A
7 P8 Q& ~& J. B* w- C& ~/ r1 S
06运行" C3 x: U8 \. s" u0 p* W
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。8 k8 z! g7 ]) |* Z: U% t: q* S

8 v* V6 D/ ^5 u  B2 W5 z8 Y07小结
. n. D2 t% {6 T8 L$ X2 |移植要点: ) a. X' [* I! Y- _- s% }# O
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
% R; N. a$ C6 v' b2 u/ Z, J3 j0 h2. 保持原有的.icf 文件
  F7 c5 ]! S9 {" Y! o; A  T3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
8 M0 T( q. o4 U4. STM32WL55XX 改为 STM32WLE5XX
; P* @; I; O! h5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
8 u8 w- C% i/ s. q+ Z" u" t5 j) a2 B& H% }/ k
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

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