01需求分析 最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?% }# L! T4 r3 j+ ? 02问题描述 * ~" c; u( q5 C 以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。 先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。 / ~6 L5 Y. b; L. V; d$ C LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。 2.1. 对比.s 文件(两个都一样)- `7 j+ f$ K5 y8 R , E/ H1 c/ C0 w LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的!+ P. m$ F' s5 I0 o4 y) L, ` 9 P3 Y& ?" V; E LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!4 F, a6 l- b! A# S, _9 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 是一样的! # d, x: ?; J: j; H5 K 所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s6 G) j4 q% ~9 u $ n( C8 @7 q6 B" L0 u5 r 所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下2 N# @7 _ p# |, u: @1 | * A& Z" m. B- w" m" M/ ~$ I 注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。 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 文件都不一样! LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样! 因此保留原有的.icf 文件。0 @1 W# B& T" V9 p: g2 A: ` 1 J4 u, z% e3 {5 q 03移植 以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。, A& P8 }* o+ J/ j& n 根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node" u2 B, Z- z( Y- M* ^ 6 e" H6 @% X; r7 X- o0 o 3.1. 移植 1_Image_KMS_Blob0 V! @3 Z( S8 E. r( u4 I 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。 3.2. 移植 1_Image_SECoreBin 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。7 E, ~5 x3 n' s3 A+ G; g 3.3. 移植 1_Image_BFU4 f+ u- o" }9 l/ u. k. x" g1 r1 n1 N 复制 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 目录下 。- l) B3 `- {7 `1 t - n( C: o8 P3 u9 j 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。, Z2 |8 X6 l) B5 m% z+ x9 f
3.4. 移植 LoRaWAN_End_Node7 V4 o' M7 m+ {" b* ^ 复制 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 目录下。/ X4 `6 ]3 w. I ( W b; A, _1 g+ S: n4 S 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。4 n3 q4 Y& E! I. l- d/ I1 r q 修改代码如下! G& g$ L; z: f) e- T; g( o1 V& z. c1 ~
3.5. 移植 disable_security.bat STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。6 s0 ^+ V& ?5 `0 M! g0 s- @6 |$ C
3.6. 配置 setenv.bat 在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 04编译7 n8 s$ b* L* i; Y2 T 可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。 05下载% N$ Z3 D4 @+ ~" w7 ^+ p 通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。& H' z! ^" D* B# _% S5 |+ o L" h1 b+ E! U( A y( K! s 06运行 v# W: u) U; k7 D Z8 r 下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。 * Z' y4 i: J" N4 O1 Z2 a1 U) E 07小结: R8 J. |" b4 I 移植要点: + w V4 N8 W3 \ 1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 2. 保持原有的.icf 文件 ) f3 I4 K# I! K' E' i5 e* s 3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 4. STM32WL55XX 改为 STM32WLE5XX R3 S; C" {% s0 z5 ?2 z' w 5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。 + x, f; Q6 O& q- c) @+ W |
基于STM32WL55中开启双核的使用经验分享
基于STM32WL55双核烧录过程的问题及解决办法
【无线与云连接】STM32WL私有LoRa网络设计原理以及演示介绍
基于STM32WL LSE 添加反馈电阻后无法起振问题经验分享
STM32WL sub-GHz SoC 未来工业物联网最佳的选择
STM32Wx 助力万物互联3.0
STM32Wx 赋能工业物联网解决方案
基于STM32WL55-NUCLEO开发的LoRaWAN经验分享
【分享】无线测温系统-硬件篇
自己绘制了一个基于STM32WL系列芯片的小板子分享给大家