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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
9 z" Z9 V+ T' @2 {' J  \最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?" M' H& _  Z; m/ Q; B0 ?
6 @2 S: G2 W  U& {; w
02问题描述 ' r" i& Y" V- Z# z, y' c- w
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
: o0 [1 s, c( N0 c" Z: Z  w6 K$ @
! |0 C7 g3 J( I0 v
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
* p8 E  Y7 R: m

5 K# X. C4 B4 H3 `* h+ i9 cLoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。3 `& b1 ~, W/ P4 A4 i: @! m
0 Q0 q. x! l( E/ E1 b
2.1. 对比.s 文件(两个都一样)
) c, n0 W! J, U2 A. h( Q% y
2 @4 V, b9 w" ]; D4 b% Z8 tLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!: k; a4 k. l3 R/ b

* i1 h" I% T8 A: ~* W- HLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
* G7 v: D4 Z; M: N; o3 Y' H) n
* S, N( M7 g( I* Q/ l' vEWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!2 M3 H0 f* p$ s& [( @' M7 }/ E
4 m1 j' ]1 l( ?; ?3 A8 k
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
% y- [! e6 w' v' V1 V
- P. p# j0 c- Q
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下: y1 _2 {' q, l' G, B6 g3 Q9 t4 }

2 x0 f' ?& v6 [# Q2 l0 d注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。4 n+ M8 B; o+ O1 N5 n- ?7 u
12.png
2.2. 对比.icf 文件(四个都不一样)
6 M2 q& C* W' `2 ^! sLoRaWAN_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 文件都不一样!; V; J! f  e5 }" }
13.png
14.png
15.png
16.png
4 G: {/ V9 S  {" \
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
' E2 o; u7 X, o
17.png

' L; Q& c6 Z% ~因此保留原有的.icf 文件。
* D$ x* h3 Q8 X8 U" Y" Z" ~, x
4 O3 g: h# s1 }3 o" P6 s03移植
6 J6 j, k% h  \4 v; a以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。9 \9 Q+ g; O! O% ]4 K2 _% h
3 q% V* s7 o! g8 a# N$ ^
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node8 ^1 @) g- ]# H: g/ `1 T; X1 H

" l& M7 R, S; f0 w3.1. 移植 1_Image_KMS_Blob
5 Z& R- M2 q( J7 O% k: p& ^0 K打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
# G7 c. y, m( s- ~$ k- e( q$ @0 m
18.png
19.png
+ b8 o/ k# B# \! n: ?
3.2. 移植 1_Image_SECoreBin & Y* u  O6 \; d* p7 S
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
' M8 j- e1 [$ P% X* V
20.png
21.png

  b( Q$ Z5 h. v" `7 D# G, }' p% u3.3. 移植 1_Image_BFU$ F9 |" {( m1 e
复制 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 目录下 。
3 Y5 A; J8 E& X! ~& t5 c( `8 o# x+ h" u- H
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。  r1 b4 ^+ [7 B; F5 h
22.png
23.png
24.png
  1. main.c
    1 q' H" a" |9 m' Z( w
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined2 P! i! m! x7 m
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_! P$ K2 r% A+ ^1 T% \
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93) ~) r/ k* p9 o: P) u
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of0 l; `8 U& k# s- j
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
    / }  b+ s1 I( @. a. A! |
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    3 K5 b8 ~$ s* {& d
  8. "AHBCLK2Divider"
    6 V7 Y# _1 |4 ]
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_/ _. m$ n  |% T0 y! S& G* |, l7 J
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:) Z0 {3 b# G# G+ A" D) D" g
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    " {3 Q( d& z" h4 Q

  2. 5 T! k: O) j4 D; I
  3. #if defined(DUAL_CORE)
    % W9 V8 L5 ?9 f* _0 c3 h
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK29 k+ Y  B0 \' ?/ E! _
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    9 }% w1 C+ j6 a4 P6 t, W
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    5 E) J) f5 [+ Y
  7. #else' G# U* |. @4 ~4 F* B
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    8 I# _' ?5 p2 e& @% t; T, j
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    ; v$ M# A4 \( f+ E3 I
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;, O" z% A% K% s! t+ M
  11. #endif /* DUAL_CORE */0 _# j& n7 K/ X6 J1 x7 G0 E
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;* O% `% ]6 r3 ?0 D; l2 k* D
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;4 y, s+ T) J" @/ g% i) B; j
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;6 p! c0 f0 }# q6 h2 s
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;" k% u5 s- l8 R6 ]! E2 w' c
  16. #if defined(DUAL_CORE)" E7 U! j3 C% q: I
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    ( b" ~, ]/ N6 P5 {
  18. #endif /* DUAL_CORE */; @( n: n: [9 j" D
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    # O2 i# _/ C7 {$ ~
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译9 w0 h8 K* x8 J/ X6 i6 c4 a
25.png

! M: c; R1 V# f( Y& a- G3.4. 移植 LoRaWAN_End_Node- O' b/ F8 m- c! 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 目录下。
  f" @7 r2 Q( b: ]# o: ?0 S* F
* @" D- @) O) Q打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
3 v: P# w6 a8 Z  e6 h. F- f
26.png
27.png
28.png
1 o. r( l; X5 E! a4 e+ L  `
修改代码如下/ Q6 X; O, \0 E0 ]- ^' E
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)
    ! l$ d- A! f4 f
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    6 ~0 E( V8 i+ Y% n* T4 a  k: l
  3. DMA_CHANNEL_NPRIV) != HAL_OK): m( d) l3 m* t/ X
  4. {' q9 ~7 F4 }# N" o- J" T
  5. Error_Handler();! o, B$ x, u6 l: [; |
  6. }; R( b8 F" |% W1 M# Z. G1 N# J8 _
  7. #endif /* DMA_SECURE_SWITCH */
    5 E/ k  Z$ \" L' `/ {2 ~
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
- [2 K4 c8 v- f+ {
29.png

& Z5 O# |+ A) `8 t% Y, U4 G3.5. 移植 disable_security.bat ( s7 N2 W3 q' {  t. C  @# C
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。" J9 O( U( b$ V+ p, ~) T
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes$ b2 h$ a, B0 Q6 _- f1 j$ s
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    * |2 @, p& K8 o- [- |
  3. echo BOOT: CPU1 CM4 Boot lock disabled8 T# \4 X( W) m3 T
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    2 t- G0 g$ H0 g- Z/ @1 v  z7 _
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled/ p+ a% q# H3 I/ q( i9 a- Y
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
    1 K; ^( b2 p% P( A6 @6 q
  7. REM echo ------ Security Configuration ------
    : B+ |" w* w) U: B  l
  8. REM echo HDPAD: User Flash hide protection area access disabled
    9 k2 E, \" w( X/ q$ R
  9. REM call :write_ob HDPAD 0x1 || goto :eof3 _" F+ _% \. F  T8 ^# @$ c
  10. REM echo SPISD: SPI3 security disabled
    ) U6 R# r, h1 m
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    * l9 Y9 d- ~* i9 h
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    * [' s( D  ^- j" [5 g4 _/ |7 @
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof" n" b: |2 c6 }* R% Y, f, ^8 @
  14. REM echo SBRV: Reset default value of CPU2 Boot start address0 T" X& R( ]8 I* g5 {. t, \% e# R9 o
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    3 A) N6 f, y( \+ b9 u
  16. exit /B 08 u+ I$ ~/ f8 D
复制代码
5 F& u1 C+ I" O) d; X8 Y; o
3.6. 配置 setenv.bat
1 t# K8 N- r; W" D) a' s* s5 S+ y& N5 J- V6 @
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 7 G% @: w+ P2 j7 U( B3 F

9 t: c% k) p. B1 O8 A9 p7 G+ n! b04编译! e: Z; J. i$ R1 ^3 w3 y* }
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
0 ]* K* o5 o- \
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
& m5 n' a$ W% s8 ]1 Y, x3 c
32.png
33.png
' {8 o  X8 N; D, |
05下载
2 S) o9 ]! }8 P' `' Z通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
0 L4 H2 u8 N  W* P: p$ x
8 o6 ]" l  i+ H5 G; H06运行1 O. q* N" D* d- t$ @  @% r; T% c
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。, ]8 V3 I/ s  X9 h( R4 c% J. Z9 [1 ]
- ]( i" _. Q0 Z- L
07小结
. u/ k" R: T. d. f. a8 \移植要点: 6 h% V( B, k! q7 D
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 $ ~4 P. Z, H, [8 G% A0 r
2. 保持原有的.icf 文件 ' r2 o& d- u0 j
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 9 L. W5 ?- ]$ v5 n2 |
4. STM32WL55XX 改为 STM32WLE5XX
6 z1 o! n+ ]% ~. D2 J+ i5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。# |8 F! M" a% c" v
* |7 T& I* U# u$ V, I
赞 收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

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