前言
(1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动/单片机/RTOS的实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效
(2)本文将会介绍介绍如何使用RT-Thread
,ENV
对Keil MDK
和STM32CubeMX
进行适配,并创建一个自己的BSP
工程。
(3)使用的芯片为STM32F103ZE
。
前期准备
(1)关于ENV的安装,可以看看RT-Thread的官方视频教程。然后根据下面的链接直接下载安装。
STM32CubeMX安装
(1)参考这篇博客:STM32CubeMX环境安装(保姆级)
git安装
(1)https://gitforwindows.org
ENV安装
(1)https://www.rt-thread.org/download.html#download-rt-thread-env-tool
RT-Thread的源码拉取
(1)我是使用RT-Thread的截至目前最新v5.0.2版本进行的工程创建,而且我不需要讲整个RT-Thread的历史项目都进行拉取,因此我这里设置深度为1。
git.exe clone --progress --branch v5.0.2 -v --depth 1 https://github.com/RT-Thread/rt-thread.git
(2)如果是使用小乌龟的朋友,配置如下
移植
复制通用模板
(1)本人是使用的STM32F103ZE的芯片,因此进入目录
rt-thread\bsp\stm32\libraries\templates
,复制stm32f10x
文件夹到rt-thread\bsp\stm32
路径中,并修改名字为mytmp
。
将CubeMX移植为STM32F103ZET6
(1)
RT-Thread
中的CubeMX
默认是使用的STM32F103RBTx
。而我现在是使用的STM32F103ZET6
,因此需要对CubeMX
进行移植操作。进入rt-thread\bsp\stm32\mytmp\board\CubeMX_Config
路径,双击打开CubeMX_Config.ioc
。
(2)因为
RT-Thread
的仓库中的CubeMX
已经是很老的版本了,而我的版本比较新,因此会出现提示是否版本迁移。点击Migrate
迁移到最新版本。
(3)迁移完成之后,我们关闭当前这个
CubeMX
界面,并保存。
(4)再打开
CubeMX
,创建一个空的STM32F103ZET6
工程
<1>
<2>
(5)将原来的工程导入
STM32F103RBTx
的工程导入到这里。
<1>
<2>
(6)修改路径,将工程名字设置为
CubeMX_Config
。把rt-thread\bsp\stm32\mytmp\board\CubeMX_Config
路径修改为rt-thread\bsp\stm32\mytmp\board\
(7)关闭保存
Keil MDK适配
修改堆内存
(1)进入
rt-thread\bsp\stm32\mytmp\board
路径,找到board.h
文件。需要修改如下两个部分
(2)第一个这个
Flash
和RAM
的大小,如果不清除的朋友,可以打开CubeMX
,创建一个空的工程,里面能够查到芯片的Flash
和RAM
大小。例如这里查到我STM32F103ZET6
的Flash
为512Kb
,RAM
为64Kb
。
(3)根据上面的查阅信息,我们进行如下修改
修改构建脚本
(1)进入
rt-thread\bsp\stm32\mytmp\board
目录,打开SConscript
文件,这里修改为startup_stm32f103xe.s
。如果不知道自己的芯片对应的启动文件是哪个,个人建议先使用CubeMX
生成一个空的模板工程,然后打开这个空的模板工程就可以知道自己的启动文件是哪个了。
(2)修改目标芯片型号
修改Kconfig
(1)进入
rt-thread\bsp\stm32\mytmp\board
目录,打开Kconfig
文件SOC_STM32F103RB
修改为SOC_STM32F103ZE
。
修改工程模板
(1)进入
rt-thread\bsp\stm32\mytmp
目录,打开template.uvprojx
。
这里切记,template.uvprojx是MDK5的工程模板,template.uvproj是MDK4的工程模板。后面多一个x是高版本,别搞错了。
<1>修改芯片型号
<2>修改程序下载方式
生成工程
生成keil MDK工程
(1)打开
ConEmu Here
,输入如下命令即可。
# 这里打开控制界面之后,直接退出即可
menuconfig
scons --target=mdk5
修改链接脚本
(1)
RT-Thread
的官方文档里面,让我们使用一个自己写的链接脚本。但是为了降低各位的使用难度,我个人认为可以按照如下方法,使用Keil
自动生成的链接脚本,这样更容易理解。
(2)按照上图编译完成之后,Keil会自动生成一个链接脚本。我们按照如下方式选择
<1>先选中Keil
生成的链接脚本
<2>再勾选如下配置
测试
(1)编译烧录工程,上机测试如下,波特率
115200
。
扩展知识
Kconfig作用
(1)如果玩过
Linux
驱动并且学习过如何将驱动设备编译进入Linux
内核,对Kconfig
应该还是会比较熟悉。Kconfig
的配置就会在menuconfig
上显示。
(2)当我们使用menuconfig
打开了某一项配置,实际上就算对rtconfig.h
进行配置。例如我打开这个工程默认是存在一个PIN
驱动设备的,那么我在rtconfig.h
中就能够看到#define RT_USING_PIN
和#define BSP_USING_GPIO
这句话。
Keil与RT-Thread Studio的编译规则区别
Keil MDK5
(1)在
Keil
中,一个工作区只有一个工程显示,而且只要是右边的Project
中所有的.c
文件都会参与编译。
RT-Thread Studio
(1)而在
RT-Thread Studio
中一个工作区能够同时存放多个工程,右边的Active - Debug
表示正在参与编译的工程。在资源管理器中所显示的.c
文件都是会参与编译的。
(2)但是如果是C/C++项目框里面,被划除的部分就不会参与编译。
参考
(1)百问网:9-3 散列文件使用与分析
(2)C站:keil工程目标选项配置:Options for Target
(3)C站:RT-Thread studio创建一个STM32F103ZE的RT-Thread标准版模板工程
(4)简书:RT-Thread学习之Kconfig语法