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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
. S8 F, A+ k0 e  }最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
6 H" _6 Y, H3 `# s
" t$ p# M( d& C02问题描述 + _$ c5 n8 j: P. J
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。
8 Y5 L3 q0 |' I- M: n  w! Q  ~

- Z3 {# {5 k# P先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
3 Z5 I3 l0 o5 l" H
& U5 |8 h4 M- b" q) Y. f
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。  v* s* {6 e' g- T7 {0 @. z
' d) u7 ]) ?! O1 ~1 s3 \
2.1. 对比.s 文件(两个都一样)
) u7 F$ a# v/ k& S0 [8 X( ~4 V% l  e8 h
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!
% _+ D7 v! S& M$ K

5 P& A5 _, O/ l: U: V: tLoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!2 y& K3 E1 U3 |! Z/ h
5 ^+ h5 z8 }, `, C+ z
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!
- i# f) _# f* _1 f+ L  k
6 ?! i  h4 U: G
所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s# P2 H# ?- f! L4 r. V
9 M6 p, T% }4 u; Y, D% s- K
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下
+ @* i7 G# Z- z
# t* H" T( b0 h1 l; Q
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
5 M/ O% O# K' T
12.png
2.2. 对比.icf 文件(四个都不一样), i% E  ]; q8 D: H, t6 a1 w
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 文件都不一样!
) ?* F& o: Z4 k5 ^& R! F$ S
13.png
14.png
15.png
16.png

# N( ~$ m3 @% A4 W+ pLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!3 z/ }' `2 n; d/ _0 A) w# O: [* t
17.png
6 a- Q6 Y: m9 v
因此保留原有的.icf 文件。
( Y- [0 b' h+ N7 q& H5 J* K+ D* v* B3 l0 y/ b+ J* _* R
03移植
$ v6 j9 R' G+ E; f以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。% }; \: n$ l8 o- ^) Q. y/ B0 P. x5 d

) R" \% y; `- T' S4 G1 y根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
# O% Q5 u7 V! \* c  v* y0 W% E& T  H* h' G5 f' f, F
3.1. 移植 1_Image_KMS_Blob$ T3 V0 z% \; n
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
$ q( a- e4 S' I
18.png
19.png

  |2 w, o# B# F5 ~* h8 K: J7 v3.2. 移植 1_Image_SECoreBin $ e+ L/ {  Z, W+ d+ l
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。' x3 L8 T+ @( L- O# x
20.png
21.png

( [5 A. B2 H7 D2 \" B' t9 {3.3. 移植 1_Image_BFU3 X4 m  Y9 K  X9 Q% Q% w' 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 目录下 。1 g! v8 {& D0 \9 H7 [7 f' F, g7 l3 c
$ J+ |, ?% M- P
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
& M# f6 Z* |" V9 K- o9 \- z
22.png
23.png
24.png
  1. main.c
    9 I1 b+ B3 Z$ R& q6 f- r
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    ( R, w2 Y( S4 O" }+ y) a
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    & o+ {/ c- y/ ]; ]! b0 i/ }
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    8 r1 p5 x4 C+ {6 Z% g
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of. F* `* q! _3 k; {
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
    2 w; `) Z2 j$ j* j4 s& G
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    8 l$ e6 X2 z7 B4 Q9 R
  8. "AHBCLK2Divider"$ u- b) k' l) w6 I( A0 n; p
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_- p: ~0 E7 r- \: U& v1 u
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
, T9 }( K4 {& M! @1 s1 D
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    ' I, ]& W, U) V5 h. J" M4 L
  2.   s  `/ R8 i) D8 c/ c
  3. #if defined(DUAL_CORE)! |+ S6 j, T0 e+ q7 F
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2, ^7 c$ T. g7 Q( Z+ y( a, U& s6 B
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    & ]2 m& i( |) ?6 k' p
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    , |0 D& W* c; T& ]6 |! z
  7. #else
    * O' i4 m5 T( \( s; m. h; M
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3$ B6 Z' R3 |- P( C- I5 P
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    5 B. ~0 p. e. v4 p4 [
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    : V: g: }/ U- N* ~
  11. #endif /* DUAL_CORE */
    ' c# `9 ^; s4 @; j' f4 A" Q8 K
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    % n6 }( p, I% O2 X2 R3 ~
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;* j$ o2 U1 X3 p8 h1 q) V) H8 p( V! r
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;' L" c' a" v# T$ e! p0 T' e
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;4 X% K$ v+ z) b0 ?- A
  16. #if defined(DUAL_CORE)
    - R0 A# Q/ Y. e4 _2 _: e
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;5 n9 n0 i" r2 c5 {0 m7 ]' V# o0 R
  18. #endif /* DUAL_CORE */
    ; }/ i! W  K& u" S
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;. C; n, Y0 @$ E2 P7 Z% q
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
0 F; o+ ~8 ^7 S1 Y) ]
25.png

% r  H3 W8 `* `3 i3.4. 移植 LoRaWAN_End_Node
6 G0 B- {5 w7 v  a! x复制 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. x4 N" A+ q' y5 o
4 X( F; W- U1 p( U) s: I打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。( s1 n- }6 \" O' K, H
26.png
27.png
28.png

+ R/ }. A  |5 k6 O修改代码如下2 i/ W% d6 D# H  e
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)1 f. z  O- Y5 A' u6 C
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
    + N/ B" y% ]* X% q
  3. DMA_CHANNEL_NPRIV) != HAL_OK)0 l& |* [8 x  p5 H: S7 K5 S
  4. {
    0 ^9 Y6 G6 G( v+ R
  5. Error_Handler();$ U  {* P$ t4 M& l5 c6 |
  6. }
    ! `5 n" m8 c8 I; Y" l4 j
  7. #endif /* DMA_SECURE_SWITCH */4 t7 [% U( V- R6 K7 a
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
# C2 m1 n9 U& w0 n! m& ~
29.png
! i% e8 Y) G' _% K8 J
3.5. 移植 disable_security.bat 4 ~8 p% N1 j; D* d
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
4 t; b: |+ C/ j. [+ X
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
    0 j' Z+ m/ n+ @6 V0 _+ ~
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof2 f1 u6 ^9 I+ S# E
  3. echo BOOT: CPU1 CM4 Boot lock disabled
    / K" W% `8 U6 ~* k% B! {% B2 h' A
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof- r" |4 K. r) [9 v/ Y2 q
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled0 u- u' ]6 v) _" O9 |! A
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof$ E3 K* f/ o  n" R4 X# H
  7. REM echo ------ Security Configuration ------
    ) }# v9 M. h, P; R- s" V
  8. REM echo HDPAD: User Flash hide protection area access disabled) q8 `( I! D$ M1 S3 `5 M
  9. REM call :write_ob HDPAD 0x1 || goto :eof
    % F. q5 m+ ]% H3 O# o2 g
  10. REM echo SPISD: SPI3 security disabled+ S7 u0 {( W- Z% n
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
    9 ~4 S; C6 g( |0 U' `
  12. REM echo SBRSA: Reset default value of SRAM Start address secure! ~' X! L- F$ l; c
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof: x. S0 V8 Y4 ~, ]& R- G
  14. REM echo SBRV: Reset default value of CPU2 Boot start address1 |+ k" x1 p- R, U, \/ N9 e( O7 X
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    / s, F3 [+ A, F
  16. exit /B 0
    & {& {. S2 |1 K6 \/ o! f6 ~
复制代码

7 H# q7 x3 Y4 J' }3.6. 配置 setenv.bat * q, W6 ^+ Z4 M& o* N) Y

' X6 n# |* l+ O: Q) }# a2 _% r& [! a在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。
" j* @/ ^) t3 A' o
. v4 @" H9 s$ `$ u  [6 V04编译& R4 Q1 f3 P0 S& \  |8 L
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。6 _/ ~9 D/ e1 l3 \1 a5 m: J4 y
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!- ?5 y4 i' Q: h( b) e
32.png
33.png

- n6 R& A. q8 p+ N% ]4 o$ \& x8 ~, C05下载
9 u. r6 y* p* y2 S* p通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。* t4 U( \& P  z) G
2 f% ]% d# y! \( l- h
06运行
6 L$ ?5 l) L7 N/ B; g/ n下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。" |/ k4 r& D6 j+ r' |
3 U* B& J  k. e* B  H
07小结; ]# D/ E1 g+ h
移植要点:
, B0 g( X" X  Z8 m  n: M' ]) f1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
1 q) C; {5 s9 X4 b( J2. 保持原有的.icf 文件 " p8 @7 Y9 I2 o6 Y1 F6 g1 U
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 & N: u. b  k4 f
4. STM32WL55XX 改为 STM32WLE5XX
, L$ Q' {" A6 z1 T) v5 M, P5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
* E9 k8 }( g# b. s) K  A; p! m2 C. E7 R! k1 D
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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