STM32F103ZET6制作BSP
RT-thread
RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。针对资源受限的微控制器(MCU)系统,可通过方便易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 版本(NANO 是 RT-Thread 官方于 2017 年 7 月份发布的一个极简版内核);而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。
前期准备
STM32F103ZET6资源
- MUC:STM32F103RCT6,512KB FLASH ,64KB RAM
RT-thread的源码获取
通过git获取RT-thread的源码
git clone https://github.com/RT-Thread/rt-thread.git
获取Env工具
在RT-thread官网获取获取Env工具
https://www.rt-thread.org/page/download.html
制作BSP
1. 复制通用模板
位置:
RT-thread\rt-thread\bsp\stm32\libraries\templates
工程模板 | 说明 |
---|---|
libraries/templates/stm32f0xx | F0 系列 BSP 模板 |
libraries/templates/stm32f10x | F1 系列 BSP 模板 |
libraries/templates/stm32f4xx | F4 系列 BSP 模板 |
libraries/templates/stm32f7xx | F7 系列 BSP 模板 |
libraries/templates/stm32l4xx | L4 系列 BSP 模板 |
复制stm32f10x并修改名称为“myself_STM32f103zet6”
官网关于文件的结构介绍如下:
在接下来的 BSP 的制作过程中,主要修改board 文件夹内的配置文件。修改的内容如下:
项目 | 需要修改的内容说明 |
---|---|
CubeMX_Config (文件夹) | CubeMX 工程 |
linker_scripts (文件夹) | BSP 特定的链接脚本 |
board.c/h | 系统时钟、GPIO 初始化函数、芯片存储器大小 |
Kconfig | 芯片型号、系列、外设资源 |
SConscript | 芯片启动文件、目标芯片型号 |
2. 修改CubeMX 工程
默认的 CubeMX 工程在 CubeMX_Config 文件夹中
1.修改芯片类型
2.打开外部时钟,设置下载方式,打开串口外设
3.设置时钟
时钟设置为72MHZ
修改完毕就可以直接生成代码了。
3. 拷贝时钟函数
在 board.c 文件中存放了函数 SystemClock_Config()
,该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要更新这个函数。
该函数由 CubeMX 工具生成,默认存放在board/CubeMX_Config/Src/main.c
文件中。但是该文件并没有被包含到我们的工程中,因此需要将这个函数从 main.c 中拷贝到 board.c 文件中。在整个 BSP 的制作过程中,这个函数是唯一要要拷贝的函数。
4. 修改 FLASH 和 RAM 的相关参数
在 board.h 文件中配置了 FLASH 和 RAM 的相关参数,这个文件中需要修改的是STM32_FLASH_SIZE
和 STM32_SRAM_SIZE
这两个宏控制的参数。本次制作的 BSP 所用的STM32F103RBTx 芯片的 flash 大小为 128k,ram 的大小为 64k,修改如下
5.修改链接脚本
linker_scripts 链接文件如下图所示:
其他两个为IAR和GCC所用的,因为不用,所以不修改。
6. 修改 Kconfig 选项
修改 board/Kconfig
文件的内容有如下两点:
- 芯片型号和系列
- BSP 上的外设支持选项
7. 修改构建脚本
SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。
在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示:
.s的目录
\RT-thread\rt-thread\bsp\stm32\libraries\STM32F1xx_HAL\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm
8. 修改工程模板
template 文件是生成 MDK/IAR 工程的模板文件,通过修改该文件可以设置工程中使用的芯片型号以及下载方式。MDK4/MDK5/IAR 的工程模板文件,如下图所示:
9.重新生成工程
重新生成工程需要使用 env 工具。
scons --target=mdk5
测试
直接使用模板自带的LED程序
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
/* defined the LED0 pin: PB1 */
#define LED0_PIN GET_PIN(E, 5)
int main(void)
{
int count = 1;
/* set LED0 pin mode to output */
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
while (count++)
{
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
return RT_EOK;
}
下载,使用xshell打开串口1
可知制作完成
打包为独立工程
使用ENv工具
scons --dist
成功后会多一个dist文件,里面存放了可以任意移动的工程
载,使用xshell打开串口1
[外链图片转存中…(img-zrRN6Xm7-1594978056721)]
可知制作完成
打包为独立工程
使用ENv工具
scons --dist
[外链图片转存中…(img-59gfK8Yo-1594978056722)]
成功后会多一个dist文件,里面存放了可以任意移动的工程