基于正点原子精英版stm32f103zet6进行rt_thread(3.0.3)的移植

mdk527版本可以直接使用软件包方式进行移植,简单几步就可以完成,网上教程挺多,正点原子论坛也有教程,这里不赘述!本篇文章使用的是比较新的版本rt_thread nano(3.0.3)版本。nano版本是master版本的简洁版,新手使用建议采取这个版本就行,后期也很方便进行功能扩展,不用担心。
本文档主要参考野火的《RT_Thread内核实现与应用开发实战指南》

准备工作

  1. mdk527版本,可以进行官网下载
  2. rt_thread nano 3.0.3 版本,版本放在keil的官网,下载地址
    选择3.0.3即可
  3. 正点原子裸机工程模板,这里使用库函数版 “实验1.跑马灯实验”
    跑马灯实验裸机工程模板

安装rt_thread nano 3.0.3 软件包

下载软件包之后,得到一个exe为后缀的文件,点击安装即可,安装目录与keil安装目录一致,成功安装后可以在keil安装目录看到此软件包的所有文件

在这里插入图片描述

也可以在keil软件包管理页面看到
在这里插入图片描述

裸机工程添加rt_thread源码

使用软件包方式移植的工程,如果在新的没有安装rt_thread的keil中打开,会提示找不到rt_thread源文件。所以,在这里不采用软件包方式,我们把整个源码文件夹复制到我们的裸机工程根目录。

在这里插入图片描述

源码文件夹下所有内容如下图所示
在这里插入图片描述

在这里插入图片描述

然后复制两个文件到user文件夹中
复制rtthread3.0.3bsp文件夹下的rtconfig.h文件到user文件夹下,该文件定义了rtthread的内核功能,可以通过宏定义进行裁剪内核功能
复制rtthread3.0.3bsp文件夹下的board.c文件到user文件夹下

RT-Thread文件夹内容简介

1、bsp文件夹
bsp(board support package)板级支持包。该文件夹内是rtthread为各个半导体厂商写好的驱动程序,nano版本只有少量几款开发板驱动,master版本有更多。我们现在只关心这个文件夹下的board.c 和rtconfig.h两个文件,前者是用来初始化开发板硬件的相关函数,后者是进行配置rtthread功能的

在这里插入图片描述

2、components文件夹
RT_Thread除了内核文件,其他由第三方添加的软件都是组件,比如gui、fatfs、lwip、和finsh。这些组件都放在此文件夹内,目前nano版本只有finsh,其他都被删除。finsh是RT_Thread中最有特色的组件,他通过串口打印的方式输出各种信息,方便我们调试程序。
3、include文件夹
从文件夹名字就可以看出此文件夹是存放RT_Thread内核的头文件,是不可分割的一部分
4、libcpu文件夹
RT_Thread是一个操作系统,单片机是硬件实物,需要由接口文件讲 两者结合在一起,这些文件通常由汇编和C语言联合编写,真正的移植应该是编写这些文件,但是这些文件通常由RT_Thread和mcu原厂人员负责,这些文件存放在此文件夹内,我们只需要选择对应的文件(cortex-m3)加入到自己工程即可.
5、src文件夹
该文件夹内存放的是RT_Thread内核的源码,详细了解可以参考RT_Thread官网文档中心学习,有视频教程学习内核!

添加RT_Thread源码到工程组文件夹

刚刚只是把源码文件放在了本地工程中,还没有添加到开发环境的组文件夹中
1、新建两个组,rtt/source和rtt/ports
rtt/source用于存放src内的文件内容。
rtt/ports用于存放libcpuarmcortex-m?文件夹的内容,此处?取决于开发板使用的芯片,精英版使用的是cortex-m3。
2、将rtconfig.h和board.两个文件添加到user组文件夹内。

在这里插入图片描述

3、指定RT_Thread头文件路径
包含源码中所有有H文件的文件夹
在这里插入图片描述

config.h文件修改

注释掉头文件RTE_components.h,因为这个文件是使用软件包时自动生成的,这里我们没有使用,所以没有这个文件,需要注释掉。

在这里插入图片描述

修改RT_THREAD_PRIORITU_MAX、RT_TICK_PER_SECOND和RT_MAIN_THREAD_STACK_SIZE这三个宏大小
在这里插入图片描述

board.c文件修改

修改内容也不多,首先systick相关的寄存器定义和初始化函数,这是与处理器有关的,稍后直接使用固件库函数就应,可以把这部分注释掉

在这里插入图片描述

RT_Thread启动时会调用rt_hw_board_init()的函数,从名字可以看出来是进行初始化开发板硬件的,比如时钟,串口等,初始化完成后才继续向下启动。
注释掉部分代码,系统时钟由固件库提供
在这里插入图片描述

再在user文件夹下新建一个board.h头文件,用来包含固件库和bsp相关的头文件,并存放board.c
中的函数声明,此头文件包含在board.c文件内,代码如下
在这里插入图片描述

#ifndef _BOARD_H_
#define _BOARD_H_

/*
*****************************************************************
*         包含的头文件
*****************************************************************
*/

/*stme32 固件库文件*/

#include "stm32f10x.h"

/* 开发板硬件bsp头文件*/
#include "led.h"

/*
*****************************************************************
*         函数声明
*****************************************************************
*/


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


#endif /*  _BOARD_H_*/

修改main.c函数

删除原裸机工程中的main.c文件内所有内容,新增如下内容
main.c文加内加入了一个静态线程,相关知识可以自行学习,下载到精英版可以看到led灯闪烁
led的初始化函数在board.c文件中的rt_hw_board_init()函数被调用
在这里插入图片描述



#include "board.h"

#include "rtthread.h"

/*
*****************************************************************
*       变量
*****************************************************************
*/

/*定义线程控制块*/

static struct rt_thread led1_thread;

/*定义线程控制栈时候 需要进行字节对齐 */

ALIGN(RT_ALIGN_SIZE)

/*定义线程栈*/

static rt_uint8_t rt_led1_thread_stack[1024];

/*
*****************************************************************
*       函数声明
*****************************************************************
*/

static void led1_thread_entry(void *parameter);

/*
*****************************************************************
*       main函数
*****************************************************************
*/


 int main(void)
 {	
		/* 
	   *开发板硬件初始化,RTT系统初始化时候已经在main()函数之前完成
	   *即在compoment.c文件中的rtthread_startup()函数中完成了
	   *所以在main函数中只需要创建线程和启动线程即可
	  */
	 rt_thread_init(&led1_thread,
									"led1",
									led1_thread_entry,
									RT_NULL,
									&rt_led1_thread_stack[0],
									sizeof(rt_led1_thread_stack),
									3,
									20);
	rt_thread_startup(&led1_thread);
									
									
 }
/*
*****************************************************************
*       线程定义
*****************************************************************
*/
 
static  void led1_thread_entry(void *parameter)
{
		while(1)
		{
				LED0 = 0;
				rt_thread_delay(100);
				LED0 = 1;
				rt_thread_delay(100);
		}	 
}


注意,此时编译还会存在问题,需要将stm32F10x_it.c中的HardFault_Handler(void)、PendSV_Handler(void)、SysTick_Handler(void)三个函数注释掉,才能编译成功,因为函数重复定义了。

下载到开发板即可看到led闪烁实验现象

附完整工程代码链接:链接:https://pan.baidu.com/s/1p1MI0ZcvEK2bIUbSj7msyg
提取码:dwgo

转载前请联系我,未经允许请勿转载:
作者:vision
标题:基于正点原子精英版stm32f103zet6进行rt_thread(3.0.3)的移植
原文链接:https://www.wangpc.cc/nec/stm32f103zet6-transplant-rt_thread3-0-3/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇