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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  ! ~, @1 M6 D5 W' |, ?0 X% J6 d
最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?4 W/ a3 L: W3 r" f" ^* s; a, v. }
8 h1 |7 Z  L0 I9 g: u. [0 @
02问题描述 . `/ E! a, h4 e2 R  I+ ~
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
9 ]/ I0 ]* [  A3 C) }4 |9 U
. ?' [  v: E( v" M/ V
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。( l; q) d8 K9 r8 L8 O8 A; d, x: Y* O
3 l& |2 A: c5 x  x6 u) ?  ]
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
+ g  c" X! `1 v
: @  _8 {0 W9 A9 _: a2.1. 对比.s 文件(两个都一样)
7 c3 n) t( {: B4 j$ Y( }) W  P& z- m5 x! n* N" `% N" N
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
6 C6 W( O' \9 t8 Y: d2 R1 D" }

1 _& f- S9 R9 O# ALoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!& D/ g1 a% M3 C- t; \

% @8 j5 Y% o" L' lEWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
9 S* R) g3 p. s- r/ V4 j6 m
4 B2 T' l) ^( M! t. j& ]
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s5 ?  I& J+ g' L% s6 Z+ r

2 q8 a& p6 J4 p所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下7 f0 k; V. ^* `, P" j0 h

3 o$ ~9 e; \0 f7 _. u注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。- F3 E2 W- l# k; X- h9 x+ B1 [+ |
12.png
2.2. 对比.icf 文件(四个都不一样)
3 r+ K  t  s) @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 文件都不一样!
* L2 r( t' z/ n3 s0 o! W$ x" e
13.png
14.png
15.png
16.png
7 r& `# R9 b3 D
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!. u/ I/ [5 z% o; X1 \! h7 L! H
17.png

4 P. Q$ U$ r( e1 M7 ^- c) H因此保留原有的.icf 文件。
! L+ z( X. m) C- n4 K6 v7 ~; ?5 J% Q$ x$ W! K
03移植( }! [) W3 v1 j+ s0 b
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
) ^8 N# R# P/ P$ b% R8 f; x% ?4 v/ W  S/ x/ Y/ j$ P3 p/ ]: ~9 I( [* c% j
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node& p. }- _' C3 ]$ W4 j7 L: _
. L9 `( J( S0 z* c7 W5 s, o* G
3.1. 移植 1_Image_KMS_Blob
9 e6 i) H: P" j+ d$ c  Q' W  l# F打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
( p# N" R! o$ D6 s
18.png
19.png

( c; U4 \) J- {  ~. h; M$ Z3.2. 移植 1_Image_SECoreBin
) W7 ?4 `1 M4 P打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
, H1 C4 u5 B. i  I* _1 `
20.png
21.png
2 R8 ]1 U. z+ M1 l
3.3. 移植 1_Image_BFU
1 x. V) U9 S. B& _. 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 目录下 。
# i" }) t8 V" ~& h7 w9 E2 b
- q/ ^5 E- V) T, X打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。/ N/ n4 n" O; b) R9 |: u( H
22.png
23.png
24.png
  1. main.c
    2 d5 D# x  {) Y1 h, ?
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    % n% c+ \/ @8 L) O
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    ( Q* A& h& A3 C7 B  M* j, y
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    1 l- ~% E8 q/ }& @! B9 q
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
    2 W% ]  j) K3 B& P. x; A
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT( y1 ~& z* E# z$ k
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    ) W, w6 l- R0 P7 I
  8. "AHBCLK2Divider"
    / @$ |- J. N" x
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_: E9 ^' ?% r, c6 Z  x8 j
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
5 P8 T! @3 N, {: C  o% V, J" f
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/# s% y+ j0 l9 l" {

  2. ( _8 T: l8 _" L9 d+ u2 e
  3. #if defined(DUAL_CORE)# [$ C) ~$ H2 ]2 G8 ~1 X* n6 ^4 i
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
    % a/ E! r7 I1 Q
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK2 f; R3 b$ O' L
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    : r% O5 U+ M  ~% |; H
  7. #else# V' p$ q6 q+ |
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    7 k/ }: n! M+ U6 p: ?, N* ?! F
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK' u3 m2 B  @+ U4 W
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    / _3 W- D4 J( o5 c  Z. |% d1 H, Y* I
  11. #endif /* DUAL_CORE */1 q* z0 m! D- M# L0 ~
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;* r- {/ o5 V" ?& N6 T, F! L1 c0 }
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    0 c* \) g" V+ ^5 ]0 `
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;" ?( s" ~! ]) t5 g& p) q& p
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    ; w1 o, ]$ P6 Y; ~' m$ j
  16. #if defined(DUAL_CORE)
    ) Y. s: B8 q0 p- F" x& g; g' r/ }
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    5 G( ?; i- N3 e9 i
  18. #endif /* DUAL_CORE */
      d/ |! R8 O7 c) `% h7 r/ }. X4 G; U
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    - p5 A. j. \; j6 w. Z
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
9 V' `, i  n7 ?& z6 ^( i
25.png

4 K6 W' ], B2 ]4 s+ X3.4. 移植 LoRaWAN_End_Node" x6 q% p, B( `0 L/ ]/ j
复制 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 目录下。
# K4 S! W9 A" Q. l+ U
1 j# z# F5 x2 f# F+ e7 ?- N打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
8 K: D5 \0 Q* C$ i2 X
26.png
27.png
28.png
% x1 y1 ^/ b; ^7 Y' t
修改代码如下  V, x& d' N5 ~
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)# y0 w+ S3 L: C2 A3 M/ O; H. V
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,: E  R1 W8 b& u) _4 a
  3. DMA_CHANNEL_NPRIV) != HAL_OK)( x7 y7 y: Z8 q( P
  4. {5 X: y0 `. _* p- C9 A, x
  5. Error_Handler();: T4 U2 \% P# J! \+ ]+ Z
  6. }
    / ]0 n/ [7 F! C( v& L3 G
  7. #endif /* DMA_SECURE_SWITCH */! \5 }0 Z7 A6 l! y
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:, @$ G/ @, A% ^0 W: y
29.png
( y& s9 v+ _: x( v
3.5. 移植 disable_security.bat
0 ]2 {9 W2 M1 ~9 }  `/ XSTM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。, @/ M% G& t+ l8 e: u
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    $ p4 M( r, }, R( j3 U
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof) c+ c2 `; |% I) }  E
  3. echo BOOT: CPU1 CM4 Boot lock disabled3 H- h% d& o4 X& o1 F
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof1 i: _3 i" ^5 ^# g& }. x
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled! ?( R9 T! h9 A, ]4 Z7 o. Y/ ?
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
    # l1 l7 L) ]$ u  k6 c$ \
  7. REM echo ------ Security Configuration ------6 C- Y( p) X: Z8 \7 p
  8. REM echo HDPAD: User Flash hide protection area access disabled$ b& p8 {; l( h/ X4 F  n8 V  n
  9. REM call :write_ob HDPAD 0x1 || goto :eof: B2 Q. \- T; @' A; e0 Y4 q& T( n0 @
  10. REM echo SPISD: SPI3 security disabled
    # I: @. H8 \6 n6 V9 R8 Q% `
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    3 o6 @1 o0 f. z+ [& B7 G" p4 c
  12. REM echo SBRSA: Reset default value of SRAM Start address secure! @$ [' O! @. d, D# f& ^/ y; j
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof8 c$ \; G" j. |
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    + o+ Y: \1 Q7 {/ o0 q
  15. REM call :write_ob SBRV 0x8000 || goto :eof4 @# c" t/ L" k! I
  16. exit /B 0: @+ I$ f. x5 v4 B* A3 `# s
复制代码
* q; R1 r' r1 k3 u9 S
3.6. 配置 setenv.bat 0 e6 I) u& n8 G$ Y- ?
1 f" P. V7 b  r0 H! N5 S# V9 ^
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。
2 v9 R- i( J. h9 Q) D  v0 i; o, Y( {% S; X( U! D' Q
04编译
5 g1 Y- O  q% {9 X可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
1 K+ d3 Z! ~+ D6 S' Q+ y
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!3 g: F+ ~9 a4 Z7 W
32.png
33.png

) I7 W% e8 [% J/ l' X05下载- g/ ]  t( T; ^6 Z$ s" }% M" b: H
通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
( J! T. d9 A$ I1 e: Q; c& R
3 B$ ^; y, Y2 l( a7 d) i: s; W# p/ C06运行) N0 l3 V- ^5 }* V( x( u, [
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。- Q$ `* o4 m3 G7 g5 C/ j

. F. G  o/ s: I1 s& Q07小结
& V8 p$ ~' [( ^! `, O( a移植要点: 5 L7 Y( |2 t1 A! `1 I0 P) C
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
/ u  a) _8 m" Q) ?" ?1 X& ~7 o2. 保持原有的.icf 文件 - [2 D: [$ D" W% w8 y
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 ! x' T# J- ~# F
4. STM32WL55XX 改为 STM32WLE5XX   U4 j* l2 Z+ F3 n* W4 y' X# D
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。" a" G+ t0 }0 |. A& m- S8 B

( ~: Z3 q  w" o2 H
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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