移植RT-Thread到STM32(学习笔记)

本文参考自[野火EmbedFire]《RT-Thread内核实现与应用开发实战——基于STM32》,仅作为个人学习笔记。更详细的内容和步骤请查看原文(可到野火资料下载中心下载)

获取STM32裸机工程模板

先从野火的资料里拷贝一份STM32裸机工程模板,我的芯片型号为STM32F103ZET6,可以从指南者这款开发板的资料里寻找工程模板,由于我手上的开发板只是一个核心板,外设只有LED和按键,所以我选用按键实验的工程作为工程模板:

在这里插入图片描述

下载RT-Thread Nano源码

Nano是Master的精简版,只有OS的核心功能,没有丰富的组件和各种开发板的BSP,但不影响我们使用。

Nano版本下载地址:https://www.rt-thread.org/download/mdk/,这其实是一个Keil的外部包,选择最新版本下载即可。

在这里插入图片描述

安装RT-Thread Package

.pack文件下载完成后,直接安装,记住安装的路径,待会需要在该路径复制RT-Thread源码。

在这里插入图片描述

下面这些文件就是RT-Thread的源代码,这里不作介绍,详细请查看《RT-Thread内核实现与应用开发实战——基于STM32》原文或网上查找资料。

在这里插入图片描述

将RT-Thread源码添加到工程

因为RT-Thread源码占用空间不大,我们可以直接将源码拷贝到Keil工程中(原文中提示:使用这种方法打包的 RT-Thread 工程,拷贝到一台没有安装 RT-Thread Package 的电脑上面是使用不了的,会提示找不到 RT-Thread 的源文件)。

我直接将源码文件夹拷贝到了工程目录:

在这里插入图片描述
下图是原文对RT-Thread源码目录的简介,版本是3.0.3,不过目录结构和最新版基本相同(3.15版本没有include/libc)。

在这里插入图片描述
我们还需要将bsp/里的rtconfig.hboard.c两个文件单独拷贝到user/目录,rtconfig.h是用来配置RT-Thread一些基本参数的头文件,board.c则用来进行一些硬件底层的配置和初始化(配置系统时钟、系统心跳等)。

3.15版本的bsp/内容如下:

在这里插入图片描述
由于我所用的芯片型号为STM32F103,所以我在stm32f103-blink/里面找那两个文件,当然,其他文件夹里的rtconfig.hboard.c都差不多,到时都要修改。【个人理解:这些文件夹对应的应该是开发板,里面已经有它们的DEMO工程】

我直接将bsp/stm32f103-blink/RTE/RTOS/下的两个文件复制到了工程的User/目录。

在这里插入图片描述
复制完这两个文件夹,整个bsp/都可以删除了。【因为这个文件夹里是各个芯片厂家的库文件,大小达到了30M,但本工程已经有了STM32的固件库,不需要其他库了。】

有了RT-Thread源文件和配置文件后,还需要将它们添加到Keil工程中,可以参照野火的添加方式(见下图),不过这些文件当前都是只读权限,rtconfig.hboard.c两个文件是一定要取消可读的。

在这里插入图片描述

最后,不要忘记添加相关的包含路径:

在这里插入图片描述

修改rtconfig.h

rtconfig.h主要用来配置和裁剪RT-Thread,具体内容这里就不讲解了,感兴趣的可以去查看原文的介绍。rtconfig.h有两种编辑方式,一种是文本编辑,另外一种是向导式的编辑。

在这里插入图片描述

这里使用文本编辑的方式,参照原文进行修改,修改部分如下图所示:

在这里插入图片描述

修改board.c

borad.c存放一些硬件初始化函数,要想让RT-Thread在STM32上跑起来,这里的函数必须修改好。

该文件需要进行如下修改:

  1. 添加"board.h"头文件(后面创建)
  2. 屏蔽系统时钟的配置函数

在这里插入图片描述

  1. 屏蔽原系统时钟配置函数的调用,在后面添加本芯片对应的系统时钟(滴答定时器)配置。

在这里插入图片描述

修改完board.c后,我们还需要新建一个board.h文件,内容如下:

#ifndef _BOARD_H_
#define _BOARD_H_

#include "stm32f10x.h"

#include "bsp_led.h"
//#include "bsp_usart.h"
#include "bsp_key.h"


void rt_hw_board_init(void);
void SysTick_Handler(void);


#endif

此时编译工程,会报以下三个错误:

在这里插入图片描述
这些都是重复定义造成的,解决方法是将Usr/stm32f10x_it.c里的这三个函数都进行屏蔽(注释)。

再次编译,没有任何报错和警告。

在这里插入图片描述

添加core_delay.c和core_delay.h文件

只有在使用 HAL 库时才需要添加 core_delay.c 和 core_delay.h 文件。由于我不打算使用HAL库,所以这部分内容就不进行记录了,详情可以查看原文。

修改main.c

因为现在只是在移植系统,并没有实现具体功能,所以main函数空着就行,不过在main函数运行之前,系统已经启动,这方面知识先不深究,当前我的目标只是学习RT-Thread的应用。

#include "board.h"
#include "rtthread.h"

int main(void)
{
    
    
	/* 暂时没有在 main 线程里面创建任务应用线程 */
	
}

猜你喜欢

转载自blog.csdn.net/weixin_43772810/article/details/123557737