1 前言
RT-Thread是一款功能强大、组件丰富的开源操作系统,结合STM32WL低功耗物联等特性,在STM32WL中运行RTOS有助于加速产品的开发与落地。
本文主要描述如何将RT-Thread移植到NUCLEO-WL55JC2开发板,新建一个基于RT-Thread的NUCLEO-WL55JC2 BSP。
本文主要内容包括:
新增STM32WL BSP
运行控制台finish
2 STM32 系列 BSP 流程
STM32 BSP 框架结构如下图所示:
每一个 STM32 系列的 BSP 由三部分组成,分别是通用库、BSP 模板和特定开发板 BSP。
3 STM32WL BSP制作
由于当前RT-Thread暂未支持STM32WL,因此跟《STM32 系列 BSP 制作教程》中方式略微有些不同。当前STM32WL BSP 的制作过程主要如下步骤:
在stm32\libraries增加STM32WL支持
新增 STM32WLxx_HAL
更新HAL_Drivers
STM32WL跟STM32L4比较接近,因此这部分可参考STM32L4
新建NUCLEO-WL55JC2 BSP
修改工程构建相关文件(Kconfig\SConstruct\SConscript\链接脚本)
配置工程
当前 SetupSTM32CubeMX-6.99.1-D37 暂不支持C代码导出,当前需要手动修改
3.1 在stm32/libraries增加STM32WL支持
3.1.1 新增 STM32WLxx_HAL
在bsp\stm32\libraries 增加STM32WLxx_HAL及其相关驱动文件
在rt-thread/bsp/stm32/libraries 新建 STM32WLxx_HAL
拷贝下面2个文件到STM32WLxx_HAL
STM32Cube_FW_WL_V0.4.0\Drivers\STM32WLxx_HAL_Driver
STM32Cube_FW_WL_V0.4.0\Drivers\CMSIS
在STM32WLxx_HAL文件夹中增加SConsript文件
在bsp\stm32\libraries中的Kconfig增加 SOC_SERIES_STM32WL
3.1.2 更新HAL_Drivers
在bsp\stm32\libraries\HAL_Drivers的Kconfig增加 SOC_SERIES_STM32WL
在bsp\stm32\libraries\HAL_Drivers的drv_config.h增加STM32WL支持
在bsp\stm32\libraries\HAL_Drivers\config 增加wl文件夹(直接复制STM32L4中的文件,然后在进行相应修改)
在drv_xx.c、.drv_xx.h中,在所有出现 SOC_SERIES_STM32L4 的地方,同时增加 SOC_SERIES_STM32WL 的条件判断
例如
3.2 新建NUCLEO-WL55JC2 BSP
在rt-thread\bsp\stm32\路径下,新建stm32wl55-st-nucleo (拷贝 stm32l476-st-nucleo)
3.2.1 修改工程构建相关文件(Kconfig\SConstruct\SConscript\链接脚本)
修改bsp\stm32\stm32wl55-st-nucleo\board\Kconfig,定义芯片型号SOC_STM32WL55JC,芯片系列为SOC_SERIES_STM32WL
修改 bsp\stm32\stm32wl55-st-nucleo\board\SConstruct,这步很关键,决定工程实际导入的stm32 HAL库
修改bsp\stm32\stm32wl55-st-nucleo\board\SConscript,SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件,SConscript脚本需要修改芯片型号以及芯片启动文件的地址,如下所示
修改bsp\stm32\stm32wl55-st-nucleo的template.uvprojx文件。template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式等.
注:首次需要安装STM32WLxx_DFP
修改bsp\stm32\stm32wl55-st-nucleo\board\linker_scripts链接脚本文件,MDK 使用的链接脚本 link.sct如下所示
3.2.2 配置工程
3.2.2.1 修改board.h FLASH与SRAM大小
修改bsp\stm32\stm32wl55-st-nucleo\board\board.h文件,Flash与SRAM大小
3.2.2.2 修改SystemClock_Config
在 board.c 文件中存放了函数 SystemClock_Config(),这部分可以先参考STM32Cube_FW_WL_V0.4.0\Projects\NUCLEO-WL55JC\Applications来进一步修改
3.2.2.3 修改CubeMX_Config
由于当前CubeMX暂不完全支持STM32WL,因此当前CubeMX_Config中的部分文件需要手动修改
stm32wlxx_hal_msp.c增加LPUART1初始化
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{
if(huart->Instance==LPUART1)
{
/ USER CODE BEGIN LPUART1_MspDeInit 0 /
/ USER CODE END LPUART1_MspDeInit 0 /
/ Peripheral clock disable /
__HAL_RCC_LPUART1_CLK_DISABLE();
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
/ USER CODE BEGIN LPUART1_MspDeInit 1 /
/ USER CODE END LPUART1_MspDeInit 1 /
}
}
ENV—> menuconfig中,配置Console/Finish使用LPUART1 (NUCLEO-WL55JC2默认使用LPUART1连接到ST-LINKV3虚拟串口)
完成上述操作后,通过Scons工具,生成MDK工程
3.3 测试验证
通过Micro USB连接NUCLO-WL55JC到PC,通过板载STLINKV3E下载代码到NUCLEO-WL55JC,然后通过串口来验证Finish是否OK。
原作者:ForestRain