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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
" r2 K8 `$ x1 q5 b最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?
+ M0 \9 n' t  J4 Y1 a7 u5 J8 T! e; b( p9 t+ C7 R5 Z
02问题描述 - [7 d* C3 |* M' }% C
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。( i: U2 T+ v% ^3 q

0 [; T$ F! `6 `" w7 Y: j6 ]3 C' M先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。
  b& z1 T) a5 `' r3 c% L+ O7 H
; e/ b3 c1 Q2 J; ?
LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。
  C& k) d) u# L: j) a
! h0 k5 P" a' d# P) K$ ?2.1. 对比.s 文件(两个都一样): h# e7 ~( b( t& t2 [& \
6 A* Q4 T% H9 x" e( C; o) r. A
LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!0 L! x# Q* q2 C' Z* b, V1 ?3 z) f
$ h" \6 ]$ h! r9 e+ _
LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!" [5 R# ^* [5 A( ~  h
: r# d4 P( I+ t7 K
EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!0 C' z. r8 g7 B: V; o

  z5 l, z" l5 T. W/ I所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s
) l6 S3 f! L: K# @
* R# V5 d0 M7 `. o4 C6 N
所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下
, _4 d4 `6 ~0 m  S
/ K. _' g: C. l7 t5 A
注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。. g: b. z, `* O/ D+ V0 ]) D
12.png
2.2. 对比.icf 文件(四个都不一样)
6 R# O- u9 v- c8 [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 文件都不一样!  N2 M* h1 }2 {4 d8 r
13.png
14.png
15.png
16.png

/ @* W" W" i( r+ w/ F1 e$ t+ {; Z- gLoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!( i6 U( V/ i$ I7 |, _- a9 Y, g
17.png
; A% Q, O7 J* K% F& Y$ b7 v
因此保留原有的.icf 文件。) i% X) r' i' f9 H: H5 l

8 N" k* u8 m6 R0 |3 @- n0 I- v03移植
; C# V2 C0 h: K0 l- ^' s以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。5 G1 H% _4 l9 T( E$ J

. r' M% W$ e. h1 [. a% t# D根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node
7 c3 `6 u, d, X! Q
" H2 e& O( H0 d2 P$ q; S- H3.1. 移植 1_Image_KMS_Blob5 Q3 i% [! e7 U# [6 F
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
6 x( P/ W; A" }& n1 b1 K
18.png
19.png
3 d. B7 c  {  D$ B: v6 N9 V
3.2. 移植 1_Image_SECoreBin 5 U4 k& _; c9 c9 y) m" a
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
" w6 x; B% o2 Z8 t
20.png
21.png

6 l4 A& g) ~( {& y+ N7 M" I" r3.3. 移植 1_Image_BFU% Q  D% U* P4 P
复制 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 目录下 。2 o& O, w7 H8 w: ?7 v+ j0 O$ {3 p

; E9 C! c) k. v5 p& c* i! z打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
# r) C- v- o" ^
22.png
23.png
24.png
  1. main.c$ p/ }- e. E# b" {- R8 u
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
    / `$ R; F0 q5 G
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
    : K! |$ ]4 F( Z. v$ G' L/ |
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
    ) t' r4 p/ D8 {1 ~" V: |
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of5 q0 Q. L% ~( X7 u6 k4 A
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT0 g+ y* p( d  J2 i! h9 l2 W+ U+ Q
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
    & H, v' U5 [2 {1 I+ x5 w1 ~' O- B
  8. "AHBCLK2Divider"
    2 u2 b* Z1 T. j! ~8 r
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_  X! R1 U& }0 J
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
( B( s5 |' h: f0 X, x3 ~( n# y
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/
    ) Y3 H1 N% Y# D
  2. , P% p* _& r; g) Q, _
  3. #if defined(DUAL_CORE)
    . H) a4 T: _4 }2 f" Y
  4. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK24 ^) c8 d1 n3 p0 C. K8 t
  5. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    ; X4 N* j) c7 W
  6. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;" D& g" v, i: E# |4 n' W
  7. #else' t6 B4 s$ }8 B( \. ^; [
  8. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3- B- @! H3 }# ]0 ~5 ?
  9. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK( ?2 s% ~- |2 [- f3 [
  10. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    $ r" e" P4 C' c5 G8 p
  11. #endif /* DUAL_CORE */
    * O, Z2 x8 z8 E7 D  w' p4 W$ ^5 q
  12. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    $ _7 M, ?3 D; c8 @+ y7 I- [
  13. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    1 q6 i5 n7 o8 N. J
  14. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;0 v/ v4 p5 X8 z9 E7 w
  15. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    - i/ Z+ E4 ?) u
  16. #if defined(DUAL_CORE)
    % b% N; h: O0 |2 E+ g3 v
  17. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
    * ]' k6 J+ r% e" K$ @
  18. #endif /* DUAL_CORE */9 K4 R; N% J+ Q3 Q2 M6 f* ^* J
  19. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
    + c! B* O. [. A2 h
  20. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
% f+ s9 [: y! d
25.png

. r& o$ z4 r0 B1 j! I4 v3.4. 移植 LoRaWAN_End_Node  R' z9 T& |/ _1 b! R
复制 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 S% l9 Y% A! F% ^+ L/ W* B
: h$ L  n6 x& ?& d, x打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。
4 \3 R# l3 }0 R8 X) t2 u, p. z7 E
26.png
27.png
28.png

4 D& F" @! C5 T+ T9 K+ y修改代码如下! j4 M: x2 x+ z
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)
    9 g0 g# ~; Z. b9 b2 t* T5 F9 T
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,( E  O3 r2 M& {0 i% ?! |3 N
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
    6 C  v, ^. b2 l! x3 s% ~: a! P  a; \
  4. {
    2 b0 Z; S. I: y6 h( \. Z, [
  5. Error_Handler();
    3 i% @3 x& W9 {7 k
  6. }
    " r' J1 H7 C0 m* D& |2 N- ?
  7. #endif /* DMA_SECURE_SWITCH */
    % w; i: E* z2 Q' ?- n' j! S
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
( q3 }2 M" U2 N- R; a- p- s
29.png

) y2 `- V, X! K3 q$ _3.5. 移植 disable_security.bat : E0 `( ~6 ?, w' V. |0 i$ N+ G& h/ Y
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
8 j4 P7 S0 N8 u8 ~& X0 m0 q: z
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes9 n. t# ~- [% d/ A1 }. A7 Q
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof; p# V' u; @( H; {* M4 B
  3. echo BOOT: CPU1 CM4 Boot lock disabled* P4 {5 ~9 H4 s, ]6 @, ~
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof0 H) L+ A: H8 n  u& V5 ?( N# C
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
      r. }. Y7 q4 W% p1 T" P! A6 o
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof& M' ^3 B* ?% s) p1 p9 l' N/ V
  7. REM echo ------ Security Configuration ------2 z- g) r% @% q6 R0 F
  8. REM echo HDPAD: User Flash hide protection area access disabled. F6 o' i8 q  B" a4 A) P) e# y9 N# x6 L
  9. REM call :write_ob HDPAD 0x1 || goto :eof' @2 T8 p, z* J
  10. REM echo SPISD: SPI3 security disabled2 |# {, o2 S7 ^" x
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof# z" F+ K" ~& a# r: U3 i
  12. REM echo SBRSA: Reset default value of SRAM Start address secure0 b; o/ \5 ]9 K
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
    4 e/ @7 |1 F) X% C
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
    ) a$ h0 |6 z6 q7 G3 b3 T
  15. REM call :write_ob SBRV 0x8000 || goto :eof
    , D& ~: k! L$ U& {) C
  16. exit /B 0
      e8 x7 v" e& F
复制代码
* D! e: \- a9 ^
3.6. 配置 setenv.bat
: p+ F% m, O% Q! D) y
0 a4 x  W" Y5 u$ r& s. r在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 7 {) {4 W: f! q' u) Z# J; F

% }9 n' g) S+ w' i( Q04编译
* J, K! b' [& j! X, m可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。5 |, ?8 m. U8 i5 A" r2 p1 P
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
, ^9 W) O- E! D# H9 G
32.png
33.png
8 f& h1 `3 X& Q
05下载4 X; f+ y! z2 ]; r3 _( O
通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。
6 O! ]1 F1 Y/ {7 S" n2 v; @+ [7 w9 h( S; m; |; c
06运行, g, J* W( B2 K: X( z: z) c" q
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。9 J, ?* I5 _& w2 E- m" m

3 n+ e. o3 U7 \; z% j07小结$ C9 c! ?5 j  S/ c. W( D9 d% v
移植要点:
5 w; O! K2 n9 J5 t- i1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 , u$ [7 a" X$ @/ \3 j7 A: `  p
2. 保持原有的.icf 文件 ! x4 }! c, m% c# }4 S- T
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
# a  A, q  a1 L. m- P) ~4. STM32WL55XX 改为 STM32WLE5XX   s) R9 u7 I0 N
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。
5 M% Q9 |: {5 _% T3 }1 y- o, t0 ?+ t5 h* x
收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似技术帖

官网相关资源

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