Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32WL
LoRa
【BSP】移植RT-Thread到ST LoRa SoC平台——STM32WL
5.00
发布于 2020-07-23 06:24:49 浏览:2330
订阅该版
[tocm]
# 1 前言 RT-Thread是一款功能强大、组件丰富的开源操作系统,结合STM32WL低功耗物联等特性,在STM32WL中运行RTOS有助于加速产品的开发与落地。
本文主要描述如何将RT-Thread移植到NUCLEO-WL55JC2开发板,新建一个基于RT-Thread的NUCLEO-WL55JC2 BSP。
本文主要内容包括: - 新增STM32WL BSP - 运行控制台finish
# 2 STM32 系列 BSP 流程 RT-Thread官方提供了非常详细的《STM32 系列 BSP 制作教程》 - [https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/](https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md)STM32系列BSP制作教程.md STM32 BSP 框架结构如下图所示:
![1.png](/uploads/20200728/0dd9e68471ab7ec2b6e1c7fa56e3d104.png)
每一个 STM32 系列的 BSP 由三部分组成,分别是通用库、BSP 模板和特定开发板 BSP。 | STM32WL BSP主要组成部分 | | | | :---: | --- | --- | | 项目 | 文件夹 | 说明 | | 通用库 | stm32/libraries |
1. 用于存放 HAL 库(STM32WLxx_HAL)
1. 基于 HAL 库的多系列通用外设驱动文件(HAL_Drivers)
| | STM32WL系列 BSP 工程模板 | stm32/libraries/templates/stm32wlxx | 当前RT-thread官方暂未支持STM32WL
| | 特定开发板 BSP | stm32/nucleo-wl55jc2 | 主芯片 STM32WL55JC |
# 3 STM32WL BSP制作 由于当前RT-Thread暂未支持STM32WL,因此跟《STM32 系列 BSP 制作教程》中方式略微有些不同。当前STM32WL BSP 的制作过程主要如下步骤: 1. 在stm32\\libraries增加STM32WL支持 - 新增 STM32WLxx_HAL - 更新HAL_Drivers - STM32WL跟STM32L4比较接近,因此这部分可参考STM32L4 2. 新建NUCLEO-WL55JC2 BSP - 修改工程构建相关文件(Kconfig\\SConstruct\\SConscript\\链接脚本) - 配置工程 - 当前 SetupSTM32CubeMX-6.99.1-D37 暂不支持C代码导出,当前需要手动修改
## 3.1 在stm32/libraries增加STM32WL支持
### 3.1.1 新增 STM32WLxx_HAL 1. 在bsp\\stm32\\libraries 增加STM32WLxx_HAL及其相关驱动文件 1. 在rt-thread/bsp/stm32/libraries 新建 STM32WLxx_HAL 1. 拷贝下面2个文件到STM32WLxx_HAL - STM32Cube_FW_WL_V0.4.0\Drivers\STM32WLxx_HAL_Driver - STM32Cube_FW_WL_V0.4.0\Drivers\CMSIS 3. 在STM32WLxx_HAL文件夹中增加SConsript文件 2. 在bsp\\stm32\\libraries中的Kconfig增加 SOC_SERIES_STM32WL
### 3.1.2 更新HAL_Drivers 1. 在bsp\\stm32\\libraries\\HAL_Drivers的Kconfig增加 SOC_SERIES_STM32WL ![2.png](/uploads/20200728/d707c534cf867deda311312e871257fd.png) 2. 在bsp\\stm32\\libraries\HAL_Drivers的drv_config.h增加STM32WL支持 ![3.png](/uploads/20200728/0acc56da64ad243826722e2720679812.png) 3. 在bsp\\stm32\libraries\\HAL_Drivers\\config 增加wl文件夹(直接复制STM32L4中的文件,然后在进行相应修改) - 在drv_xx.c、.drv_xx.h中,在所有出现 SOC_SERIES_STM32L4 的地方,同时增加 SOC_SERIES_STM32WL 的条件判断 - 例如 ![4.png](/uploads/20200728/4085b5227da6ddc85933340f96025a7d.png)
## 3.2 新建NUCLEO-WL55JC2 BSP 在rt-thread\\bsp\\stm32\\路径下,新建stm32wl55-st-nucleo (拷贝 stm32l476-st-nucleo)
### 3.2.1 修改工程构建相关文件(Kconfig\\SConstruct\\SConscript\\链接脚本) 1. 修改bsp\\stm32\\stm32wl55-st-nucleo\\board\\Kconfig,定义芯片型号SOC_STM32WL55JC,芯片系列为SOC_SERIES_STM32WL![5.png](/uploads/20200728/019360f8688300df96213bbee034e63a.png) 1. 修改 bsp\\stm32\\stm32wl55-st-nucleo\\board\\SConstruct,这步很关键,决定工程实际导入的stm32 HAL库 ![6.png](/uploads/20200728/2e425f6b6e5d869bac346d1e0b0ca60c.png) 3. 修改bsp\\stm32\\stm32wl55-st-nucleo\\board\\SConscript,**SConscript** 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件,SConscript脚本需要修改芯片型号以及芯片启动文件的地址,如下所示 ![7.png](/uploads/20200728/bc9afd63d4410eee87a02c3bd0ccd45c.png)
4. 修改bsp\\stm32\\stm32wl55-st-nucleo的template.uvprojx文件。**template** 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式等. > 注:首次需要安装STM32WLxx_DFP ![8.png](/uploads/20200728/364bc472031cf8952aa544215b494740.png) 5. 修改bsp\\stm32\\stm32wl55-st-nucleo\\board\\linker_scripts链接脚本文件,MDK 使用的链接脚本 link.sct如下所示 ![9.png](/uploads/20200728/edc1c14a250b27b7a1323b6360817bf7.png)
### 3.2.2 配置工程
#### 3.2.2.1 修改board.h FLASH与SRAM大小 2. 修改bsp\\stm32\\stm32wl55-st-nucleo\\board\\board.h文件,Flash与SRAM大小 ![10.png](/uploads/20200728/676259a10535744e51378d211e6d6459.png)
#### 3.2.2.2 修改SystemClock_Config 1. 在 board.c 文件中存放了函数 SystemClock_Config(),这部分可以先参考STM32Cube_FW_WL_V0.4.0\\Projects\\NUCLEO-WL55JC\\Applications来进一步修改
#### 3.2.2.3 修改CubeMX_Config 由于当前CubeMX暂不完全支持STM32WL,因此当前CubeMX_Config中的部分文件需要手动修改 1. stm32wlxx_hal_msp.c增加LPUART1初始化 ```c /** * @brief UART MSP Initialization * This function configures the hardware resources used in this example * @param huart: UART handle pointer * @retval None */ void HAL_UART_MspInit(UART_HandleTypeDef* huart) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(huart->Instance==LPUART1) { /* USER CODE BEGIN LPUART1_MspInit 0 */ /* USER CODE END LPUART1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_LPUART1_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); /**LPUART1 GPIO Configuration PA3 ------> LPUART1_RX PA2 ------> LPUART1_TX */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN LPUART1_MspInit 1 */ /* USER CODE END LPUART1_MspInit 1 */ } } /** * @brief UART MSP De-Initialization * This function freeze the hardware resources used in this example * @param huart: UART handle pointer * @retval None */ 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(); /**LPUART1 GPIO Configuration PA0 ------> LPUART1_RX PA1 ------> LPUART1_TX */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3); /* USER CODE BEGIN LPUART1_MspDeInit 1 */ /* USER CODE END LPUART1_MspDeInit 1 */ } } ``` 2. ENV--> menuconfig中,配置Console/Finish使用LPUART1 (NUCLEO-WL55JC2默认使用LPUART1连接到ST-LINKV3虚拟串口) ![11.png](/uploads/20200728/9421a5ac3d8b888a879705252c37d354.png)
完成上述操作后,通过Scons工具,生成MDK工程
### 3.3 测试验证 通过Micro USB连接NUCLO-WL55JC到PC,通过板载STLINKV3E下载代码到NUCLEO-WL55JC,然后通过串口来验证Finish是否OK。
![12.png](/uploads/20200728/382760a17138deb86a69a190feb0ab45.png)
# 4 参考 - RT-Thread官方 STM32 系列 BSP 制作教程 - [https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md](https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md) - STM32Cube_FW_WL_V0.4.0
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
ForestRain
这家伙很懒,什么也没写!
文章
12
回答
11
被采纳
5
关注TA
发私信
相关文章
1
RT-Thread Studio对STM32WLE5系列的支持
2
强烈建议提供一下对stm32w108系列的支持
3
RT-Thread studio对更多芯片的支持
4
RT-Thread Studio 里面的stm32wle5系列LORA怎么进入发送接收中断
5
lora_Radio_driver软件包 出现引脚映射错误
6
可以付费帮助设计开发版板吗?
7
可以付费帮助设计开发版板吗?
8
lora node软件包通信问题
9
lora-radio-driver软件包使用问题
10
lora_radio_driver包使用,ping不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
19
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
6
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部