01需求分析 ! ~, @1 M6 D5 W' |, ?0 X% J6 d 最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?4 W/ a3 L: W3 r" f" ^* s; a, v. } 8 h1 |7 Z L0 I9 g: u. [0 @ 02问题描述 . `/ E! a, h4 e2 R I+ ~ 以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。 . ?' [ v: E( v" M/ V 先分析基于 STM32WL55JC 的 LoRaWAN_FUOTA 。( l; q) d8 K9 r8 L8 O8 A; d, x: Y* O 3 l& |2 A: c5 x x6 u) ? ] LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。 2.1. 对比.s 文件(两个都一样) $ Y( }) W P& z- m5 x! n* N" `% N" N LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\startup_stm32wl55xx_cm4.s 和LoRaWAN_FUOTA\1_Image_BFU\EWARM\startup_stm32wl55xx_cm4.s 是一样的! LoRaWAN_FUOTA\LoRaWAN_End_Node 和LoRaWAN\LoRaWAN_End_Node 的startup_stm32wl55xx_cm4.s 是相同的!& D/ g1 a% M3 C- t; \ EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的! 4 B2 T' l) ^( M! t. j& ] 所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s5 ? I& J+ g' L% s6 Z+ 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 目录下7 f0 k; V. ^* `, P" j0 h 注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。- F3 E2 W- l# k; X- h9 x+ B1 [+ | 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 也不一样!. u/ I/ [5 z% o; X1 \! h7 L! H 因此保留原有的.icf 文件。 ; ?5 J% Q$ x$ W! K 03移植( }! [) W3 v1 j+ s0 b 以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。 / W S/ x/ Y/ j$ P3 p/ ]: ~9 I( [* c% j 根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node& p. }- _' C3 ]$ W4 j7 L: _ . L9 `( J( S0 z* c7 W5 s, o* G 3.1. 移植 1_Image_KMS_Blob 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。 3.2. 移植 1_Image_SECoreBin 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。 3.3. 移植 1_Image_BFU 复制 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 目录下 。 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。/ N/ n4 n" O; b) R9 |: u( H
3.4. 移植 LoRaWAN_End_Node" x6 q% p, B( `0 L/ ]/ j 复制 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 目录下。 打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin,按 ALT+F7 打开 Options 配置。 修改代码如下 V, x& d' N5 ~
3.5. 移植 disable_security.bat STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。, @/ M% G& t+ l8 e: u
3.6. 配置 setenv.bat 0 e6 I) u& n8 G$ Y- ? 1 f" P. V7 b r0 H! N5 S# V9 ^ 在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。 ( {% S; X( U! D' Q 04编译 可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。 05下载- g/ ] t( T; ^6 Z$ s" }% M" b: H 通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。 06运行) N0 l3 V- ^5 }* V( x( u, [ 下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。- Q$ `* o4 m3 G7 g5 C/ j 07小结 移植要点: 5 L7 Y( |2 t1 A! `1 I0 P) C 1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4 2. 保持原有的.icf 文件 - [2 D: [$ D" W% w8 y 3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义 ! x' T# J- ~# F 4. STM32WL55XX 改为 STM32WLE5XX U4 j* l2 Z+ F3 n* W4 y' X# D 5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。" a" G+ t0 }0 |. A& m- S8 B |
【新品发布】超低功耗复合调制无线STM32WL3x微控制器
基于STM32WL55中开启双核的使用经验分享
基于STM32WL55双核烧录过程的问题及解决办法
【无线与云连接】STM32WL私有LoRa网络设计原理以及演示介绍
基于STM32WL LSE 添加反馈电阻后无法起振问题经验分享
STM32WL sub-GHz SoC 未来工业物联网最佳的选择
STM32Wx 助力万物互联3.0
STM32Wx 赋能工业物联网解决方案
基于STM32WL55-NUCLEO开发的LoRaWAN经验分享
【分享】无线测温系统-硬件篇