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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
  o" k3 ]  _3 z' s3 P+ c' E% i2 p最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
8 I8 C3 ?6 I9 @9 i4 \' ]# a$ H7 |: w: N" N2 ]3 ^) |- u+ I
02问题描述 1 b7 X- r$ z; a) G
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
8 W; a2 A) w% X3 e

# z# P) u# K3 ?" R( X+ X先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
: q4 A* u% O9 g7 Z1 b

$ @6 r; q8 Y( r" ~7 d* CLoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
* t: V! z1 a+ `
7 v( J  v) {4 w% p2.1. 对比.s 文件(两个都一样)! D% q4 O9 x0 l. s3 K
, |( q2 {8 ?) |2 l) O& Y
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
% h2 R7 }6 u7 N. P: g* T
' J* h1 q; e' x& L+ m( j
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!+ n+ H' e: f+ }5 U' w) e- G
* w& L& \2 C1 Q! 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 是一样的!$ ?3 V: R, b) }$ V

! d: s) E+ A& n7 D4 @所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s! x$ K* X& b/ j0 ~! z1 p" b

; U8 t( \6 V6 ^; {* U所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下
  E! g/ i' j1 @2 I* {1 K! U1 R
* [3 B% O# H4 V3 }5 ?2 d
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。0 T# h0 B% [6 I) ]% K) C# g
12.png
2.2. 对比.icf 文件(四个都不一样)
2 Y9 r( g# T7 v3 b2 A8 L+ ZLoRaWAN_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 文件都不一样!
. j3 C# b& ~% ?
13.png
14.png
15.png
16.png

$ X: Y2 S' }0 Z. S' F, iLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
% u# A5 W6 j! x! x/ X8 m
17.png
9 m5 I% \1 m% n# m
因此保留原有的.icf 文件。
/ g# `, [) _* i- V* d  C, H5 u( Z. x& k& u0 Q# f9 f
03移植
6 U( G0 |; E+ h* F7 E  q! j以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
; {$ n/ i! x  ?: J
' C8 r/ \. e0 |$ h* D+ O" P3 L根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
$ u  d) {$ ~( _' J: A& i5 w
. z# V; Z; {. ^7 X1 @% z3.1. 移植 1_Image_KMS_Blob
" J1 ]; h& V2 E打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。$ @1 ~3 Q+ @( q4 \) d( R# J2 J
18.png
19.png

6 H' }. D$ z+ H+ N( l3.2. 移植 1_Image_SECoreBin ' D: h: Z8 a: p% ~7 q
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
9 K( E5 ]. J' ?5 f$ r7 e, d# V
20.png
21.png

! D, _! ]% f+ [) z: S7 b3.3. 移植 1_Image_BFU
* P  q) n8 Z& s, C4 i/ i8 S复制 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 目录下 。
0 S8 f! W/ {3 L3 `. Y0 T# ~- x+ p; S
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。! {, |- z! V! J8 s0 V0 m( \3 i
22.png
23.png
24.png
  1. main.c2 P4 a8 ]' w* A1 d  s
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined4 D- l! \7 G  m4 R( G- t# V) K
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    " a1 ?' z' l. D" R2 A8 }
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93) v1 X+ r/ d2 ~" j9 s1 O9 P8 y
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
    2 L' r: y# {$ j
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
    1 I0 C) f8 s7 P6 Z0 }, B
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field) G: v& D8 [5 W# ?$ U' ^
  8. "AHBCLK2Divider". x+ {: d# O% j8 K' I% D
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    * `. |" H7 f- \/ C  _/ L
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
; S; W% L$ ^) c; ?$ p1 }. U+ D" E& q
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    : h: G0 j) \8 {" W

  2. # X+ l" U* V+ j4 {, v/ C, ^
  3. #if defined(DUAL_CORE)
    / n! x  `" f# R4 @
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2" m4 U& t5 c. M- t
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK& M) D2 Y" V4 M
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    * Z! J8 K$ `* n5 F( N9 P" E
  7. #else
    ! z' W8 d/ ~$ O$ V  s% z6 V2 J/ L
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK30 i6 ]$ |  A6 u
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    % ?9 F8 `' p9 W- s" _0 H: L) o
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;. }0 ?8 @, S5 t9 p! W7 c
  11. #endif /* DUAL_CORE */$ k# P; D9 x" g/ t; G0 t& F
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;  F& `, t2 N9 H4 r% e' u
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    2 D) t, x2 }. v# X1 f% h& g
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    7 F' r  j# _4 ^+ R3 R. ~' w
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;! L- |, ]  n' ]* V% h* z+ x- w  H
  16. #if defined(DUAL_CORE)
    9 U$ z* g" k* g$ J0 m# w
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;7 N; f: A1 i, j, ]
  18. #endif /* DUAL_CORE */
    & X  }9 h% f4 H
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;. I5 }7 }1 y3 E8 i
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译! u0 D: O  X- @, a5 T; F1 R* X( k( @
25.png

% L. V7 t" d6 l3.4. 移植 LoRaWAN_End_Node
6 @9 U4 h/ m2 l2 G8 V0 L0 b1 ~复制 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 目录下。
" [8 }, a" d0 e9 d3 E# o+ t8 I3 l8 V- j9 O& D+ j! a! j
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。" z8 Q6 S6 G0 v8 E- p9 Q8 W
26.png
27.png
28.png

. Q, ~2 O0 t" e; [0 T: F修改代码如下
: \" Z  a6 z3 c0 f- a
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)
    9 h7 F# D1 ]6 w7 z4 p! Y
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    6 ?2 E2 k: ]7 ]6 v; O. Q/ t0 E3 R" _
  3. DMA_CHANNEL_NPRIV) != HAL_OK)9 R# X. z9 _0 |5 r5 {; z( R1 `
  4. {
    1 C& b9 S4 w$ W! Q; [4 z
  5. Error_Handler();: x2 ~! _! J) ^: Y) j* V
  6. }8 \  _) u  I4 ?) o  H
  7. #endif /* DMA_SECURE_SWITCH */
    ; U! B3 T$ f# J9 x
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:3 y  h2 E1 L6 h+ |
29.png

( ~  k! V+ F! U: n: G3.5. 移植 disable_security.bat 1 k0 \; {  D3 _
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。; N7 `+ l( q' @! e9 E+ e1 ^
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes, k& [& l: N+ k3 \* I) l# B
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
    : _7 ~# y8 F9 N
  3. echo BOOT: CPU1 CM4 Boot lock disabled  a( s$ Y" g# H1 V& Z( }
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    , E0 v$ {6 m- G' `* t/ {
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled2 H9 Y$ d( P2 p6 m0 ]5 [
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof& l9 n$ e3 o( N, Z
  7. REM echo ------ Security Configuration ------( p: T+ H( w0 n
  8. REM echo HDPAD: User Flash hide protection area access disabled
    , p5 V( |- F* u0 U" h$ I
  9. REM call :write_ob HDPAD 0x1 || goto :eof6 n4 m4 u! m* Z4 V( W
  10. REM echo SPISD: SPI3 security disabled; |7 h! s' R2 F- K, N0 j4 A
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof6 L% H; j, t" E& W
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    $ q9 P2 H. ?  F* N" _5 R7 r
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof7 V! ~4 P: N, Q4 W) x& T
  14. REM echo SBRV: Reset default value of CPU2 Boot start address0 V+ R+ ], Y- k# [) A
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    ' J: s9 U4 e" s( m4 Y4 L7 a( `: x& [
  16. exit /B 0
    7 a, @0 d' O2 [$ u
复制代码
* K/ _/ y$ k5 c3 `: M2 n. x
3.6. 配置 setenv.bat
9 f2 A# i; M4 Y8 m$ p/ G. [  o+ ]: e. P0 L( n! j1 x
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 $ v. g+ n* V$ M+ P% ?$ u7 [' N7 t# p

) M7 T+ k8 K  \04编译0 q( r' N" v7 L, k( H3 \5 n
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。: ?0 X0 `; u' m/ `. U5 s/ X- q
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
! @* O5 O. X  s$ T+ f
32.png
33.png
- {, G' O: Y" O8 o( F
05下载
' P4 P7 \5 u2 V1 x) A  X, @& |通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
$ D+ P5 @" R9 n' g- H7 k
' ?, L) a3 i, m: n) S- Q+ Y/ N06运行
' Y% L# F( L3 \+ {/ {9 F5 {下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。- |5 `* F3 O' B, Z

- ^. \8 h% F5 D5 u6 `+ r07小结
4 |, K. t( Z7 ?! n" A4 K1 L% ]3 g移植要点:
' h, D8 z; S  J  Q3 w. F1 N1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
" f! v* R& A2 G2 U, w  S, o- ~2. 保持原有的.icf 文件 " y% q4 f$ \9 B6 t
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
4 ^* h( O2 b1 ?; w( }+ \. V* u2 o4. STM32WL55XX 改为 STM32WLE5XX
  U# ?3 @, a$ F9 J# A5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
5 O* O: |; J( B7 l9 j$ A# x2 l" j0 U, O- g
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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