这段时间在学习rtthread,在移植的过程中遇到挺多问题,现在对移植3.1.3版本做一个移植记录
本人申明,整个文章过程都是本人亲自走过一边,有不懂的地方可以私信,感谢支持
移植前准备:Keil5、STM32CubeMX、ENV工具
1、获取源码
源码获取的渠道主要是从官方提供的链接下载,主要渠道有码云、GitHub、百度云等
下载链接:下载 - RT-Thread物联网操作系统
选择源代码下载,在以下链接中下载rtthread3.1.3版本
![](https://i-blog.csdnimg.cn/blog_migrate/94deea3feced9fdda0a7cb3db42ad49d.png)
2、复制模板
本文主要使用STM32系列的stm32cbt6进行rtthread移植,进入下载好的源码文件夹,打开以下路径 rt-thread\bsp\stm32\libraries\templates
选择stm32f10x文件夹复制到rt-thread\bsp\stm32路径下
3、搭建工程
3.1 STM32CubeMX配置
打开复制的模板下的board\CubeMX_Config路径下找到CubeMX_Config.ico文件,使用STM32CubeMX打开对工程项目进行配置
![](https://i-blog.csdnimg.cn/blog_migrate/c7ddac3e586a5f0b2cde6fb3cca0645b.png)
首先我们需要选择自己开发板所对应的芯片,我使用的是STM32F103CBT6,于是选择对应的芯片
![](https://i-blog.csdnimg.cn/blog_migrate/31a1ce191f275d9c36d0a48c7dea7b33.png)
接下来就是对需要的引脚进行选择配置,最基本的需要时钟、串口以及打开SWD下载模式
![](https://i-blog.csdnimg.cn/blog_migrate/b0c57b26ccde2d35e511b5a94c21d746.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d299a01103f40f94c697edb1d857e40d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7b1e38dd8b6063c42581257619397773.png)
然后便是时钟配置,我们直接在HCLK时钟处填写最大时钟就行了,系统将自动配置
![](https://i-blog.csdnimg.cn/blog_migrate/b7b55c2845fe33326f17d569f7fc5340.png)
第三步就是项目工程配置
![](https://i-blog.csdnimg.cn/blog_migrate/84929cf07b454a578aa5d7668c04536e.png)
工程配置中其他的应该都没有问题,但是我们使用的STM32 hal库需要是1.7.0版本的,不能使用最新的版本,否则finsh组件没法启用,版本更改的办法如下:
![](https://i-blog.csdnimg.cn/blog_migrate/810a19ef2651a902ceb37d382b4a4081.png)
下载好1.7.0版本以后就可以在库的选择中看到1.7.0版本了。
最后点击生成代码覆盖原有的工程就好了。
3.2 Board文件修改
接下来的修改复制于官方文档
3.2.1修改board.c
在 board.c 文件中存放了函数 SystemClock_Config(),该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要更新这个函数。
该函数由 CubeMX 工具生成,默认存放在board/CubeMX_Config/Src/main.c 文件中。但是该文件并没有被包含到我们的工程中,因此需要将这个函数从 main.c 中拷贝到 board.c 文件中。在整个 BSP 的制作过程中,这个函数是唯一要要拷贝的函数。
3.2.2修改board.h
![](https://i-blog.csdnimg.cn/blog_migrate/bf1dec604a2e1ff835a5695a09a840f8.png)
3.2.3修改 Kconfig 选项
![](https://i-blog.csdnimg.cn/blog_migrate/b98630dc0ccc27afc288c10c555ccae0.png)
3.2.4修改链接脚本
使用MDK只需要修改link.sct即可
![](https://i-blog.csdnimg.cn/blog_migrate/f131a2029696352d1e902f43f22541a0.png)
3.2.5修改构建脚本SConscripy
![](https://i-blog.csdnimg.cn/blog_migrate/f72bfd53088dc9f243dd818c5c7fff30.png)
3.2.6修改工程模板
![](https://i-blog.csdnimg.cn/blog_migrate/29e902de1291d15466c205d08f682dc1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f18be4bdbe5dc7618463cd0da3e144a5.png)
主要修改芯片信息即可,后续的下载方式以及编译关联可以在项目工程中临时更改。
3.3 ENV重新生成工程
打开ENV,进入到工程文件夹下,输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/15bf6ee5732683c590dd6606e2012d79.png)
确定串口打开以后就可以按ESC退出,系统会提示是否保存,确定即可
再使用 env 工具输入命令 scons --target=mdk5重新生成工程,出现以下提示即成功生成
![](https://i-blog.csdnimg.cn/blog_migrate/40b77bce9ef263c6e652f0212871ec72.png)
随后可以打开工程项目,编译程序,可能会出现以下问题:
![](https://i-blog.csdnimg.cn/blog_migrate/f713e980d4f51394b43a461e155d5399.png)
提示stm32f1xx_hal_exti.h不存在,我们双击报错文件夹名即可定位到代码处,注释掉这段代码即可:
![](https://i-blog.csdnimg.cn/blog_migrate/9338fecf04c4dab51c1406faa318e261.png)
将程序下载至芯片中,连接串口就可以看到以下界面:
![](https://i-blog.csdnimg.cn/blog_migrate/84fcac7937f01238a50aab65bc8c9a59.png)