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

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

[复制链接]
STMCU-管管 发布时间:2024-9-25 16:24
01需求分析  
最近有些客户需要在 STM32WL55 实现 LoRaWAN FUOTA 功能,LoRaWAN_FUOTA 默认是基于双核 STM32WL55JC,由于成本考虑客户需要用 STM32WLE5CC,客户咨询如何移植?

02问题描述
以下移植是基于 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 。

LoRaWAN_FUOTA 下的 1_Image_KMS_Blob 和 1_Image_SECoreBin 仅有 icf 文件,没有.s 文件。LoRaWAN_FUOTA 下的 1_Image_BFU 和 LoRaWAN_End_Node 都有.icf 和.s 文件。

2.1. 对比.s 文件(两个都一样)

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 是相同的!

EWARM\startup_stm32wl55xx_cm4.s 和 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_c m4.s 是一样的!

所以 STM32WLE5 的.s 可使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s

所以,可复制 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wle5xx.s到 LoRaWAN_FUOTA_WLE5CC\LoRaWAN_End_Node\EWARM 目录下

注意:startup_stm32wle5xx.s 和 startup_stm32wl55xx_cm4.s 不一样, startup_stm32wle5xx.s 中没有 C2SEV_PWR_C2H_IRQHandler, IPCC_C1_RX_IRQHandler,IPCC_C1_TX_IRQHandler 相关的配置。
12.png
2.2. 对比.icf 文件(四个都不一样)
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 文件都不一样!
13.png
14.png
15.png
16.png

LoRaWAN_FUOTA\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 和 LoRaWAN\LoRaWAN_End_Node\EWARM\stm32wl55xx_flash_cm4.icf 也不一样!
17.png

因此保留原有的.icf 文件。

03移植
以下移植是基于 IAR IDE 和 STM32Cube_FW_WL_V1.3.0,复制 STM32Cube_FW_WL_V1.3.0\Projects\NUCLEO-WL55JC\Applications 下的 LoRaWAN_FUOTA 为 LoRaWAN_FUOTA_WLE5CC。

根据编译顺序依次移植 LoRaWAN_FUOTA_WLE5CC 下的 1_Image_KMS_Blob, 1_Image_SECoreBin, 1_Image_BFU, LoRaWAN_End_Node

3.1. 移植 1_Image_KMS_Blob
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_KMS_Blob, 按 ALT+F7 打开 Options 配置。
18.png
19.png

3.2. 移植 1_Image_SECoreBin
打开,选中 Project-STM32WL55JC_Nucleo_1_Image_SECoreBin, 按 ALT+F7 打开 Options 配置。
20.png
21.png

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 配置。
22.png
23.png
24.png
  1. main.c
  2. Error[Pe020]: identifier "RCC_CLOCKTYPE_HCLK2" is undefined
  3. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
  4. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c93
  5. Error[Pe136]: struct "<unnamed>#87" (declared Hat line 297 of
  6. "C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_FUOT
  7. A\Drivers\STM32WLxx_HAL_Driver\Inc\stm32wlxx_hal_rcc.h"h) has no field
  8. "AHBCLK2Divider"
  9. C:\Users\gongw\STM32Cube\Repository\CubeWL\STM32Cube_FW_WL_V1.3.0_
  10. FUOTA\Projects\NUCLEOWL55JC\Applications\LoRaWAN_FUOTA_WLE5CC\1_Image_BFU\Core\Src\main.c100
复制代码
修改代码如下:
  1. /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers*/

  2. #if defined(DUAL_CORE)
  3. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3|RCC_CLOCKTYPE_HCLK2
  4. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  5. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  6. #else
  7. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK3
  8. |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  9. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  10. #endif /* DUAL_CORE */
  11. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  12. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  13. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  14. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  15. #if defined(DUAL_CORE)
  16. RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
  17. #endif /* DUAL_CORE */
  18. RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
  19. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
复制代码
按 F7 编译
25.png

3.4. 移植 LoRaWAN_End_Node
复制 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 配置。
26.png
27.png
28.png

修改代码如下
  1. #if defined(DMA_CCR_SECM) && defined(DMA_CCR_PRIV)
  2. if (HAL_DMA_ConfigChannelAttributes(&hdma_usart2_tx,
  3. DMA_CHANNEL_NPRIV) != HAL_OK)
  4. {
  5. Error_Handler();
  6. }
  7. #endif /* DMA_SECURE_SWITCH */
  8. __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
复制代码
按 F7 编译:
29.png

3.5. 移植 disable_security.bat
STM32WLE5CC 的 OptionBytes 中没 C2BOOT_LOCK,HDPAD,SUBGHSPISD, SNBRSA,SBRSA,SBRV,因此注释掉 LoRaWAN_FUOTA_WLE5CC\Scripts\disable_security.bat 这些 Option 的设置。
  1. echo IWDG: Independent watchdog counter frozen in Stop/Standby modes
  2. call :write_ob IWGD_STDBY 0x0 IWDG_STOP 0x0 || goto :eof
  3. echo BOOT: CPU1 CM4 Boot lock disabled
  4. call :write_ob BOOT_LOCK 0x0 || goto :eof
  5. REM echo BOOT: CPU1+CPU2 CM0+ Boot lock disabled
  6. REM call :write_ob BOOT_LOCK 0x0 C2BOOT_LOCK 0x0 || goto :eof
  7. REM echo ------ Security Configuration ------
  8. REM echo HDPAD: User Flash hide protection area access disabled
  9. REM call :write_ob HDPAD 0x1 || goto :eof
  10. REM echo SPISD: SPI3 security disabled
  11. REM call :write_ob SUBGHSPISD 0x1 || goto :eof
  12. REM echo SBRSA: Reset default value of SRAM Start address secure
  13. REM call :write_ob SNBRSA 0x1F SBRSA 0x1F || goto :eof
  14. REM echo SBRV: Reset default value of CPU2 Boot start address
  15. REM call :write_ob SBRV 0x8000 || goto :eof
  16. exit /B 0
复制代码

3.6. 配置 setenv.bat

在 LoRaWAN_FUOTA_WLE5CC\Scripts\setenv.bat 中配置 CUBEPROG_EXE, EWARM_EXE,MDK_EXE,CUBEIDE_EXE 的正确路径。

04编译
可在 LoRaWAN_FUOTA_WLE5CC\Scripts\EWARM\build.bat 编译 LoRaWAN_End_Node 之后加个 “pause”命令,查看编译 log。
30.png
31.png
还可将 rebuild 改为 0,这样再次运行 build.bat 时,不会 clean,编译时间会短;否认会 clean 完全重新编译,时间会长!
32.png
33.png

05下载
通过 STLink 连接 STM32WLE5CC 的板子到 PC 上,运行 program.bat 即可下载LoRaWAN_End_Node\EWARM\Binary\BFU_LoRaWAN_End_Node.bin 到 flash 的 0x08000000 处。

06运行
下载完 BFU_LoRaWAN_End_Node.bin 之后,将 STM32WLE5CC 的板子重新断电再上电!至此 STM32WLE5CC 上可运行 LoRaWAN_FUOTA 了。

07小结
移植要点:
1. 使用 STM32Cube_FW_WL_V1.3.0 \Drivers\CMSIS\Device\ST\STM32WLxx\Source\Templates\iar\startup_stm32wl55xx_ cm4
2. 保持原有的.icf 文件
3. 通过 IDE 修改 Device 由 ST STM32WL55JC 改为 ST STM32WLE5CC,将宏定义
4. STM32WL55XX 改为 STM32WLE5XX
5. 注释掉或删除 Scripts\disable_security.bat 中的 C2BOOT_LOCK,HDPAD, SUBGHSPISD,SNBRSA,SBRSA,SBRV 的 OtionBytes 配置。

收藏 评论0 发布时间:2024-9-25 16:24

举报

0个回答

所属标签

相似分享

官网相关资源

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