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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
- m1 d; |  B" v4 [6 I最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?2 h& A! U/ F9 ?* q( B

- f& w! s0 k3 N. ?7 D02问题描述 6 Q3 m5 V$ u% n8 S
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
+ e" ]$ V( g& \; E" L9 O
2 z" q, }% d0 r- V
先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。3 A6 G2 X- z& c
7 l/ W: D) C& X2 g# y/ V& S
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。+ E. N# U. n9 ^; b0 C" ^
- |& ]! p+ G: \7 ?
2.1. 对比.s 文件(两个都一样)$ g- l/ d$ B5 B$ ]6 O: _/ Z

" q6 l$ X. p& C  T# q4 D$ fLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!: ^, s! `! \& M! j
9 ~  F8 s# f) u8 u/ M
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!( X5 A' q$ J: S/ _+ T2 x4 F2 [

5 j) B8 f  b* l+ I- SEWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!; p7 q: ^6 m' v9 I4 W1 h5 \. e& ^& A

+ ~: G5 z) ^% e4 e6 j0 O3 `所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
5 z3 l, o7 n/ W( G, J7 ]+ n+ X  C

4 s1 e  A: a' y0 ^所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下9 ?4 A0 j+ w& @6 b! D
" v' Y4 W( U8 i/ W
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
/ U$ n" ^2 e9 f# Z: N+ L7 r& u
12.png
2.2. 对比.icf 文件(四个都不一样)
, {5 a7 N7 W( A) b- u( R; RLoRaWAN_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 文件都不一样!
( N; O8 L: R- W8 @
13.png
14.png
15.png
16.png
' Q: }9 V9 U+ A1 G7 u
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
; e/ M# u" k7 p
17.png
& L: x) X" g4 m$ p+ q  a1 c
因此保留原有的.icf 文件。( `! f. t; U, o# L9 ~/ j
4 e: v" `: X. j9 o6 L
03移植
+ k4 A9 A! A3 d9 q% i9 v/ F以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。! c# n! e6 o* K0 T- ^# f- s1 _

5 c. ^1 s* V3 h9 e% ^根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node9 |! J8 M! t+ b2 b

, a3 C* R8 |2 J7 M& @# R3.1. 移植 1_Image_KMS_Blob
0 u9 r6 ^! q6 U  F# s打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。5 q& g2 d# e+ {4 J5 M- l$ B; b* r
18.png
19.png

$ {* d; A, ?& O) T3.2. 移植 1_Image_SECoreBin : ?$ ~, ~* o: h& v
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。& [( [3 L5 t& V% V
20.png
21.png

9 H2 C& R3 u, B+ T, Y3.3. 移植 1_Image_BFU
* Y/ g' f% B8 q* M/ v0 z; l( L& m9 R复制 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 目录下 。5 H) X& }+ o9 u; f3 @: c& R
$ V! a. J& l& m0 i# w
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
$ V+ |6 R) R# R! s- ~. y7 T
22.png
23.png
24.png
  1. main.c
    , ?/ Y/ H& w1 ^* f" E/ F! P- q
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    2 M* U: S4 a) L4 M! \
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_& ^* e9 |, }2 h3 K
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    . P( \& M$ ]. K, m# B, p6 h+ Y- H
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
      P4 Q& P6 w  ]# |
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT0 e. A0 g; X& [6 S) E3 N
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field2 B# n  S: E1 p+ m2 [3 l! B
  8. "AHBCLK2Divider"
    7 s) \! e& L2 e9 M6 X$ U
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_" o6 A" e) o$ o) C4 B( c
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
4 S& {  P( e% s, b# a6 ~  e
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/) P& V+ Z/ e* {3 z. v5 s8 ]: v

  2. $ Z7 Q7 K4 p( Y7 M( i
  3. #if defined(DUAL_CORE)+ E9 B0 V# H$ r
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2! U& C9 x" q5 c/ w, q- R
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK' n3 Z! r4 g$ X: `6 k
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    , {  j& t+ B8 Z# n/ s1 q; U
  7. #else6 _1 W4 C7 u4 U+ b% |/ n
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
    2 O, K7 o+ Q4 V# r
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK1 W! A) q! t& Z  J
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;8 g: i7 c0 t& A& Y) l( b' K- g
  11. #endif /* DUAL_CORE */' @; D$ y& t7 E' a
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    ! X2 Y( w' B; S9 R9 b
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;' a3 F! W* a5 ?6 q
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    ' a5 `0 j9 E! r/ Z6 \5 E
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;- R" J) K* a" L" A9 q
  16. #if defined(DUAL_CORE)
    5 q; b/ `: d" W  E: `& R
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;% _) m  }  @0 _: W+ Q
  18. #endif /* DUAL_CORE */9 y" S1 n9 W  [1 s' m4 _. T
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;# P6 O8 n6 T, p$ ]# h
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
' u) f% t5 u* T) e/ h4 r
25.png

9 K* F' a) ^9 F; G  p# ?5 A5 _( Z3.4. 移植 LoRaWAN_End_Node. \! \4 i' V- N5 ^
复制 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 目录下。  ^6 S7 ?6 K/ I8 |2 b
; s2 T  ?% j, l
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
" h. ?  |* a# o' M& ^9 j6 `
26.png
27.png
28.png

7 @9 ?$ z; k7 \, Z" p# Q修改代码如下
4 Q) d1 G  J" I  U
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV); l7 o( h' S# J/ `. E: F
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    2 ]6 i- ~9 K: _* \) q
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
    1 n8 n6 i: O6 ~' {; D- }
  4. {
    * a9 U# j: s. \* E) r+ l
  5. Error_Handler();
    $ `( O8 [1 k8 i
  6. }
    " Z1 R  p/ \; ^, @' ~6 h
  7. #endif /* DMA_SECURE_SWITCH */$ V8 n) H' N6 U5 k! G/ o
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:6 K2 |( [+ L+ j! u5 S4 p* _
29.png
& j7 J  U2 s. N
3.5. 移植 disable_security.bat
) O- N3 X' a/ @- KSTM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。, c5 I: r1 s4 G: y2 I. s- [
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    # C1 h# }; E* _6 h  z
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof" [; \& r' J3 K: h# i, N! R
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    & K% p& F) i8 X$ D2 v2 H1 Y
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
    5 ?2 i  e- r- L, {# {! t; W# }
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
    3 g* J# e. @" P+ _
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof( f3 K6 u# }: C1 ~
  7. REM echo ------ Security Configuration ------
    3 K& D. R9 Y& d( {$ D/ b- G
  8. REM echo HDPAD: User Flash hide protection area access disabled
    ) s& ?/ C! L) H$ V, }: D
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    ) V$ X5 {$ r. m8 l9 P  [
  10. REM echo SPISD: SPI3 security disabled, c7 G8 W" J' N9 ~6 B
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    ' y5 I* P9 E  I
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
    ) w! F6 \6 O; W9 ?
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof* W3 @+ T. N* D7 z
  14. REM echo SBRV: Reset default value of CPU2 Boot start address) }& N4 I8 W- q0 y3 v
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    ' N- ?5 y! O  x! \
  16. exit /B 0) ~5 p8 z8 Z& a3 x
复制代码

* O# ^! w2 h. V/ ]* N3.6. 配置 setenv.bat
. \' Z2 K( t* H$ k" {$ N! G  b  E' K! K0 ?$ j: _: h
在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 + F# _# G( E0 t0 d4 M4 {0 v- b% f" q
/ @$ R, l8 c; ]2 j
04编译" F; W, r& u1 B$ @# @; B4 i! |  O
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。9 e* d, v/ N& [6 x6 t/ i  U" A
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
9 e* m" \. ]9 H. G! J
32.png
33.png
+ ^; |" G; S6 n+ u  C, a
05下载
. P2 U4 x* s; q4 k7 d通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。/ {: W' ]$ W' L/ _2 e# E
0 H! z! c9 X1 }- }
06运行
  v4 c* Z4 x% S. G: x7 w下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。
- f7 ^+ r1 D5 ?* k  v$ e' B
* Q9 ?9 Q$ D, F' U- H
07小结" F& n5 a+ h$ e8 v* V9 a' U
移植要点:
# r% ^9 v/ K% {& I% n1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
1 m: k8 J& W! r8 ]; H2. 保持原有的.icf 文件
' O: v" r* ^8 V) J1 Z8 o0 D/ D; y3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
* R1 ]3 F5 U$ p5 `4. STM32WL55XX 改为 STM32WLE5XX
7 G/ t9 C$ @9 \8 q5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。( d" E" i0 Z. N" I0 w; F
, z: j) q9 ~! z7 ^& x3 x
赞 收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

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