RT-Thread移植到STM32F103ZET6具体操做步骤(利用keil5新建工程,添加RT-Thread源码到工程)

RT-Thread移植(基于STM32F103ZET6)      

         由于学习RT-Thread的缘由,须要把RT-Thread移植到STMF103ZET6上,在RT-Thread官网下载的原文件中实际上已经STM32F10x的工程了,只需简单的几步就能够完成在STM32F103ZET6上的运行,可是这样一来就对整个原文件的结构不是很了解,可是由于是学习,因此咱们就不要太在乎麻烦了。本文利用Keil5,新建一个工程,而后在工程中添加RT-Thread中的文件。html

        由于自身水平有限,因此可能工程创建的各个文件结构不是特别合理,或者还有不少地方的设置没有到位,可是这就是我目前对各个文件的理解,因此仅供参考。本文中有些文件不知道有什么做用,因此有些文件的添加参考了官网给的工程。待往后学的更加深刻的时候,再来修改文中不合理的地方,还望谅解。c++


1、在RT-Thread官方网上下载操做系统源码(https://www.rt-thread.org/page/download.html)架构


这里我下载的是2.0.1版本,文件结构以下:app



Bsp ---- 板级支持包,针对不一样的板子规划出的不一样的驱动文件;框架

components ---- 包含RT-Thread的各个组件:finsh、文件系统,等等*;函数

documentation ---- 一些介绍性文档,包括代码的风格要求;工具

examples ---- 各类示例代码,是很好的学习素材;学习

include ---- 一些头文件;ui

libcpu---- 各类CPU体系结构下的相关移植;spa

src ---- RT-Thread内核核心代码;

tools ---- 使用Scon自动化建立工具时须要的一些文件;

AUTHORS ---- RT-Thread开发者列表;

COPYING ---- 权限说明;

      *:个人理解是就至关与功能扩展,好比你须要finsh就加进去,不用就不加,这样能够减小最后可执行文件的体积,在这里咱们使用了finsh,方便学习,也正好学习怎么添加组件。


2、创建工程文件夹(RT-Thread2.0.1_STM32F103ZE )


一、在桌面上创建一个 RT-Thread2.0.1_STM32F103ZE 文件夹;

二、打开 RT-Thread2.0.1_STM32F103ZE 文件夹,创建如下文件夹:

application :存放应用程序

bsp :存放板级支持包和底层驱动

components :存放操做系统组件

DeviceDrivers :设备框架

libcup :各类不一样CPU的内核代码

MDK-OBJ :存放kile5在编译过程当中生成的中间文件

RT_Thread-2.0.1 :存放操做系统的相关文件


 完成后以下图所示:




3 打开kile5创建工程

目录定位到桌面上的 RT-Thread2.0.1_STM32F103ZE  过程名称为 RTT_F103ZE 选择芯片 ST32F103ZE 

Options for Target >>> Target >>> 设置外部晶振8.0MHz

Options for Target >>> Output >>> Select Folder for Objects >>> 定位到  桌面:RT-Thread2.0.1_STM32F103ZE\MDK-OBJ目录下

Options for Target >>> Listing >>> Select Folder for Objects >>> 定位到  桌面:RT-Thread2.0.1_STM32F103ZE\MDK-OBJ目录下

Options for Target >>> c/c++ >>> 添加宏定义 STM32F10X_HD, USE_STDPERIPH_DRIVER(逗号隔开)

Options for Target >>> Linker >>> Misc controls >>> 添加 --keep __fsym_* --keep __vsym_*   --keep __rt_init*(保证编译时不会滤除掉工程没有调用的代码)

暂时就这样,其他项保持默认就好,等在工程目录下添加完文件后再创建工程结构,和添加头文件搜索路径就行了;


4 开始添加各个文件(根据以前创建的工程文件夹中的目录含义添加文件,这样比较有条理)

如下我就以文件路径来表示复制过程


2.0.1\bsp\stm32f10x\applications >>> Desktop\RT-Thread2.0.1_STM32F103ZE\application

application.c 、startup.c

2.0.1\bsp\stm32f10x >>> Desktop\RT-Thread2.0.1_STM32F103ZE\bsp

drivers 、Libaries

2.0.1\bsp\stm32f10x >>> Desktop\RT-Thread2.0.1_STM32F103ZE\RT_Thread-2.0.1

rtconfig.h

2.0.1\components >>> Desktop\RT-Thread2.0.1_STM32F103ZE\components

除drivers外的所有文件

2.0.1\components >>> Desktop\RT-Thread2.0.1_STM32F103ZE\DeviceDrivers

drivers

2.0.1\libcpu\arm >>> Desktop\RT-Thread2.0.1_STM32F103ZE\libcup

common 、cortex-m3

2.0.1 >>> Desktop\RT-Thread2.0.1_STM32F103ZE\RT_Thread-2.0.1

src 、include

这里在 2.0.1\components目录下有一个叫drivers 的文件夹,按照他的意思应该是设备驱动框架相关文件,可是有一点不理解为何放在组件文件夹下;因此在复制过程当中我把它单独拿了出来,放在了Desktop\RT-Thread2.0.1_STM32F103ZE\DeviceDrivers文件夹下,比较适合我来理解,该目录下还有一个叫CMSIS的文件夹,暂时也不知道是干什么的,就一块儿放在Desktop\RT-Thread2.0.1_STM32F103ZE\components下了;在2.0.1\bsp\stm32f10x 目录下也有一个叫 drivers 的文件夹,这个文件夹实际上就是存放了符合设备框架的板级驱动,这样应用程序就能够控制各类设备了。咱们之后也能够写本身的板级驱动,而后这样在应用中就能够调用不一样的设备。这里工程的架构差很少就出来了,打开以前创建的工程,打开Manage Project Items开始添加文件


5 添加工程文件以及设置头文件搜索路径


首先Groups设置以下:



这里能够看到和个人文件夹的关系很像(都有application,bsp,components...并且做用都像字面意思同样),这里应该是我本身的习惯吧,这样添加和删除文件比较简单。条理也比较清晰。


如今就是在Groups里添加原文件了


application :application.c  starup.c

  • 文件就在原文件夹application下

bspstm32库函数全部*.c源文件(stm32f10x_adc.c stm32f10x_rcc.c.....)  core_cm3.c  system_stm32f10x.c  startup_stm32f10x_hd.s   stm32f10x_conf.h(这里是为了比较好修改)   stm32f10x_it.c

  • 这些文件在bsp目录下均可以找到

components :  components.c

  • 在components/init目录下

DeviceDrivers : DeviceDrivers >>> driver >>> src 下的所有文件    DeviceDrivers >>> driver 下用到哪一个设备框架就加哪一个设备原文件(这里加了serial,由于要用到串口)  

  • DeviceDrivers >>> driver 目录下均可以找到

contex-m3 :  backtrace.c  div0.c  showmem.c  context_rvds.S  cpuport.c

  • libcpu目录下均可以找到

RT-Thread-2.0.1 :RT_Thread-2.0.1 >>> src 目录下全部文件

  • RT_Thread-2.0.1 >>> src 目录下能够找到

finsh : components >>> finsh目录下全部*.c文件

  • components >>> finsh目录下都能找到


Drivers : board.c  led.c  usart.c


  • bsp >>> drivers目录下均可以找到

头文件搜索路径设置以下图:



至此整个过程就创建起来了,接下来就进行验证

3、编译烧写,验证

验证就利用已经写好的led实验来验证
个人板子的led灯在PA2,因此打开led.c文件作一些修改

  • 设置生成hex文件
  • 点击build按钮
  • 编译完后0错误1警告
libcup\cortex-m3\context_rvds.S(206): warning: A1581W: Added 2 bytes of padding at address 0xd6
网上查了一下说是没有字节对齐,在警告定位到的位置 END 前加一个 NOP 就行了

以后再按build   0错误0警告


  • 把生成的hex文件烧写进板子
  • 打开SecureCRT链接串口,按下复位
LED灯在闪烁


串口输出:



输入list(),回车



到此,移植验证结束,能够愉快的学习RT_Thread了!