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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
; c: d, `# Y0 |$ B最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
6 N" I  b$ B8 a8 l! ^6 n' @* u; ^, k4 K/ j& r. H0 k& R! A# v
02问题描述 1 _! ~* k) j( h4 ^
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。" ?6 `( u% G+ X" C1 B" b
3 o" E2 {, E: M: j/ `
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
; a9 G  U1 W9 o9 O9 ?6 a5 o2 i% N$ n

* P* G9 L& V" ~  JLoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。  u& I1 H! [' j8 U" d

, g! q7 u$ e4 U) Z2.1. 对比.s 文件(两个都一样)8 k0 C  O9 {( I4 j/ \# H( R

6 ^, }/ F, I9 ?0 P+ J) |& n* k8 QLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
! S+ \: n5 Y6 x  B9 E

" P8 o1 r2 ]/ N4 e  uLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!
' \. ]5 T; M1 p! i# a" |3 s2 Q5 x6 _: p
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
: _  K/ s9 b9 Z5 y) q2 H/ G

1 Y. Z; E3 S! F$ I2 e& \所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s1 ~8 t# K; f% a2 b1 X- E

" X! }- t# @' n' k/ Z, H; B, S$ E所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下
6 B* I( d0 |* s* ?1 o8 m* \' u
* r1 Z+ F. z2 ]. B+ X# k2 `+ E
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
1 f+ l& Z% d$ E0 B
12.png
2.2. 对比.icf 文件(四个都不一样)
5 f: G( t! P/ i4 jLoRaWAN_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 文件都不一样!* g- j# R& }; D0 ~6 P% W
13.png
14.png
15.png
16.png

% y2 V5 {; R1 g! s9 o. L/ ELoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!% m6 K6 n; E( _% G( K( C8 e, n, O
17.png
/ D- ]+ {1 ^+ O9 _3 C; ^9 X
因此保留原有的.icf 文件。. Q/ j0 c: Y) g

5 U, y5 Y* l/ _1 ?; A03移植
. H2 t; y% u2 K& k+ l( `以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。; W# Z& V' R# A& ^/ n% U; U$ t+ S
9 f2 U3 H) G) o+ C  _
根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
' |2 A1 ^% ^# y2 T( p$ E8 |' z& S$ y, i5 V* a; m1 }
3.1. 移植 1_Image_KMS_Blob
! p- z, n9 Q& d打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。2 e- U& r5 ^0 N9 }6 e8 w. f
18.png
19.png

% f$ T# W9 }( Z3.2. 移植 1_Image_SECoreBin 0 T1 t5 j% E2 O; j0 c
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。/ {) U% z) [! A* Z5 B8 P1 D1 b
20.png
21.png

0 B1 E; p* s/ M7 `3.3. 移植 1_Image_BFU
% o' G! {6 V' F; k复制 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 目录下 。4 I4 n* g7 @* B/ r7 L0 x3 n8 C( u( r
4 t, f: U+ l$ W, r
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。; a$ y. X' n- o$ {* c4 m3 C8 {
22.png
23.png
24.png
  1. main.c
    & X. i: }' R) ^7 ?
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    $ n. z* W6 _/ c( N& ^
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_# L' ^5 v$ n3 m+ H2 ?
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c936 I/ g+ I, C% j* ^
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of; y; a" ]# e7 y3 n! N4 [5 R
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT+ v1 G- x8 Z4 W! [
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field2 a5 V+ x  u8 y/ c
  8. "AHBCLK2Divider"
    / _7 O- c  j  y& f" \
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_, Y. K5 r3 |0 b- J; U
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:6 |# H- F9 ~  Y' L& ?, `) D
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    0 c4 ^3 d) }' X  D
  2. # V1 _( H9 O8 e. [8 ]
  3. #if defined(DUAL_CORE)
    * A& B% a' T# D3 |% |) z6 g
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2" l- x% E4 c; d" b4 L
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    # m2 n; ^3 c3 @: S% j& v4 a
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;& l# X0 c0 y: g
  7. #else) W* ?7 U6 U2 L3 B4 ]" i
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3# p0 P* n! A' _# _2 K6 U
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    5 z! l; I; z5 h8 C7 o
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;+ R# Q% I) q& A8 n, F8 y) \
  11. #endif /* DUAL_CORE */+ {  P* V' i. x0 }8 |% \$ U
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;1 S8 q2 Z$ W1 U: M
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    6 s  N* y( k  |; I
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;! m9 u* O: \, n& F0 T) r
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    " @3 V+ D" n: V% D( T1 l2 j, S: `
  16. #if defined(DUAL_CORE)
    9 x" O; u; L# z& B$ q) `6 x
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;& P' @: ^- J% T8 p
  18. #endif /* DUAL_CORE */
    ; r/ f2 r) p8 F3 @" L
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;" d8 _; R2 \9 ~  z( N) }/ T* B
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
/ w. u! Y0 x5 ^  V6 U9 K9 X' y5 u1 M
25.png
2 ]/ u. A% R0 o( C6 f
3.4. 移植 LoRaWAN_End_Node5 j# S& m! \9 F0 h' f
复制 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 目录下。
2 S0 _7 u; Q# N6 r" c7 S# T- f5 ?: e5 z" v3 O) W% ^. }
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
4 u9 j4 D9 W9 r2 a# r8 f! a: ]& J
26.png
27.png
28.png
" U- d; ~; g5 _
修改代码如下- }' T$ z" C) D$ z( j
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)/ p! C7 B- r' Z7 n( }
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    ( `& x6 r& J0 p7 k" |9 s
  3. DMA_CHANNEL_NPRIV) != HAL_OK), j! b! l+ q2 T9 y1 Y: x
  4. {
    : W& I: |, G  g7 O
  5. Error_Handler();$ V7 L& k1 V/ _3 R+ g& D1 g) |0 k) V
  6. }
    $ S( b- B, \, o& f  S
  7. #endif /* DMA_SECURE_SWITCH */; s+ Y7 T% \1 j7 |
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
$ r0 K. ~, P4 r# v
29.png

9 m# K$ [0 m. \* o7 L" J4 D3.5. 移植 disable_security.bat , l+ }7 w  Q$ ?4 |: |
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
% _* H$ F( b0 {4 P# q3 T1 x
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    + F2 D# i$ w# W% a- O9 T
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof9 ]- `6 h' }- O/ c2 I
  3. echo BOOT: CPU1 CM4 Boot lock disabled* t7 E/ l) w* r1 q9 x
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    " ]8 k# h  ?+ \3 G7 u: g
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled- g' |( T5 B4 ]- T) y1 e' h
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof' U# y  T  p7 _: U
  7. REM echo ------ Security Configuration ------  W0 k7 W, f; z; Z9 b; {
  8. REM echo HDPAD: User Flash hide protection area access disabled
    + t7 A" E4 e% T" T: b, V2 u
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    / I4 |. R* u; d9 l7 {& G
  10. REM echo SPISD: SPI3 security disabled
    ) _2 W- G8 F  }7 }* a) q5 d
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    $ D1 ~0 g/ m) J+ [& L" a% k$ w3 e9 g
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    ( x. k3 m" A* {" ^
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof! C3 o7 u' p$ @  t/ d0 D
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    ; L. ~" N' Q* w
  15. REM call :write_ob SBRV 0x8000 || goto :eof, Z, B+ M1 N5 r& P
  16. exit /B 0, y- p* p$ [" {6 [1 @( T* i
复制代码

  t" E% j9 i9 E1 t, Z3.6. 配置 setenv.bat
# @, L& o. D  w6 u+ r4 ~8 v. g. z8 o; F* k% k; i
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 % U) k: T  D: O' b

9 `+ t4 y. Y% ?7 S& J! N0 u0 a% Q04编译: m' I! o4 z7 R, |0 b/ G" Q- ~/ I
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
# R" b7 g  u. J0 h# o$ F( s
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!- O5 _/ e, c# [5 z9 k
32.png
33.png

, W; ?1 l" v$ d/ G# G2 U05下载
: g& @  L/ B) C4 T通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。1 l: c& i+ l; t/ Q

, H2 c' S$ ~' i. J1 x9 }06运行
5 Z4 Y3 q; W3 {  A8 Z! [下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
7 Q( z4 b3 x  S2 K; C) B
5 ]# ^  d7 q8 b
07小结6 A% p3 K4 U  B6 n" l+ ~+ [& M
移植要点: , G9 X" a& w& F
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 . u* a& N' Z' s6 ~' L# N, {) Z
2. 保持原有的.icf 文件
1 u* w2 U: D% C; j3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
0 y/ b, T9 o3 \. N* |. A. @! g3 h0 q4. STM32WL55XX 改为 STM32WLE5XX 2 P, l0 O; Q& a
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
( Q( w( l3 S: g9 y3 c# v, [/ q( U/ H. r0 l& H
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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