STM32F103C8移植RT_Thread-Nano(基于 STM32CubeMX )

一、RT-Thread 操作系统的特点和优势

RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件
内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。

RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。

有Bootloader框架,RT-Thread Nano-RTC-设备驱动框架,RT-Thread Nano-IWDT-设备驱动框架

二、准备工作

2.1 CubeMX 上下载 RT-Thread Nano pack 安装包

  1. Help -> Manage embedded software packages
    在这里插入图片描述
  2. 添加NANO软件包

点击 From Url 按钮,进入 User Defined Packs Manager 界面,其次点击 new,填入网址https://www.st.com/en/development-tools/stm32cubemx.html,然后点击 check,在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装软件包,点击install now
在这里插入图片描述

2.2 创建工程

芯片选择stm32f103c8
选择 Nano 组件

点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread
在这里插入图片描述
在这里插入图片描述

配置Nano:

这时会新增Software Packs展开就可以看见添加的RealThread.RT_Thread,勾选相应内容
在这里插入图片描述

RCC配置

在这里插入图片描述

SYS配置

在这里插入图片描述

串口配置

在这里插入图片描述

添加引脚A5,A6
在这里插入图片描述

NVIC取消选择
取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)
在这里插入图片描述
时钟树配置
在这里插入图片描述

三、代码修改

3.1 Keil添加 RT-Thread Nano 到工程

在这里插入图片描述
找到 RTOS,勾选 kernel,点击 OK
在这里插入图片描述
现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:
在这里插入图片描述

3.2 代码修改

创建任务
两个LED任务,一个灯每隔0.5秒闪烁,另一个灯在main.c中每隔一秒闪烁
在Application/USER文件夹下新建rt_thread.c文件,并添加以下代码
在这里插入图片描述

#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led1_thread;
rt_uint8_t rt_led1_thread_stack[128];
void led1_task_entry(void *parameter);
 
//初始化线程函数
void MX_RT_Thread_Init(void)
{
	//初始化LED1线程
	rt_thread_init(&led1_thread,"led1",led1_task_entry,RT_NULL,&rt_led1_thread_stack[0],sizeof(rt_led1_thread_stack),3,20);
	//开启线程调度
	rt_thread_startup(&led1_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
	printf("Hello RT_Thread!!!");
	rt_thread_delay(2000);
}
 
//LED1任务
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
		rt_thread_delay(500);
	}
}



找到board.c文件,RT-Thread Nano 3.1.5生成的默认端口USART2,改为USART1
在这里插入图片描述

找到Application/User/Core里app_rt_thread.c下的rtconfig.h
在这里插入图片描述
在main.c文件中添加代码:

extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);

在main函数里添加如下代码

  MX_RT_Thread_Init();

while循环中添加代码

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
		rt_thread_delay(1000);

结果:

在这里插入图片描述

四、总结

RT-Thread与RTOS的主要区别之一,它不仅仅是一个实时内核,还具备了丰富的中间层组件。其内存资源占用极小。Nano开源免费,小巧,简单是它的优点。由 C 语言开发,采用面向对象的编程思维

五、参考文献

https://blog.csdn.net/weixin_56102526/article/details/121952050

版权声明:本文为CSDN博主「保护奶猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_55691662/article/details/122016507

一、RT-Thread 操作系统的特点和优势

RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件
内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。

RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。

有Bootloader框架,RT-Thread Nano-RTC-设备驱动框架,RT-Thread Nano-IWDT-设备驱动框架

二、准备工作

2.1 CubeMX 上下载 RT-Thread Nano pack 安装包

  1. Help -> Manage embedded software packages
    在这里插入图片描述
  2. 添加NANO软件包

点击 From Url 按钮,进入 User Defined Packs Manager 界面,其次点击 new,填入网址https://www.st.com/en/development-tools/stm32cubemx.html,然后点击 check,在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装软件包,点击install now
在这里插入图片描述

2.2 创建工程

芯片选择stm32f103c8
选择 Nano 组件

点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread
在这里插入图片描述
在这里插入图片描述

配置Nano:

这时会新增Software Packs展开就可以看见添加的RealThread.RT_Thread,勾选相应内容
在这里插入图片描述

RCC配置

在这里插入图片描述

SYS配置

在这里插入图片描述

串口配置

在这里插入图片描述

添加引脚A5,A6
在这里插入图片描述

NVIC取消选择
取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer)
在这里插入图片描述
时钟树配置
在这里插入图片描述

三、代码修改

3.1 Keil添加 RT-Thread Nano 到工程

在这里插入图片描述
找到 RTOS,勾选 kernel,点击 OK
在这里插入图片描述
现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:
在这里插入图片描述

3.2 代码修改

创建任务
两个LED任务,一个灯每隔0.5秒闪烁,另一个灯在main.c中每隔一秒闪烁
在Application/USER文件夹下新建rt_thread.c文件,并添加以下代码
在这里插入图片描述

#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led1_thread;
rt_uint8_t rt_led1_thread_stack[128];
void led1_task_entry(void *parameter);
 
//初始化线程函数
void MX_RT_Thread_Init(void)
{
	//初始化LED1线程
	rt_thread_init(&led1_thread,"led1",led1_task_entry,RT_NULL,&rt_led1_thread_stack[0],sizeof(rt_led1_thread_stack),3,20);
	//开启线程调度
	rt_thread_startup(&led1_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
	printf("Hello RT_Thread!!!");
	rt_thread_delay(2000);
}
 
//LED1任务
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
		rt_thread_delay(500);
	}
}



找到board.c文件,RT-Thread Nano 3.1.5生成的默认端口USART2,改为USART1
在这里插入图片描述

找到Application/User/Core里app_rt_thread.c下的rtconfig.h
在这里插入图片描述
在main.c文件中添加代码:

extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);

在main函数里添加如下代码

  MX_RT_Thread_Init();

while循环中添加代码

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6);
		rt_thread_delay(1000);

结果:

在这里插入图片描述

四、总结

RT-Thread与RTOS的主要区别之一,它不仅仅是一个实时内核,还具备了丰富的中间层组件。其内存资源占用极小。Nano开源免费,小巧,简单是它的优点。由 C 语言开发,采用面向对象的编程思维

五、参考文献

https://blog.csdn.net/weixin_56102526/article/details/121952050

版权声明:本文为CSDN博主「保护奶猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_55691662/article/details/122016507

生成海报
点赞 0

保护奶猫

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【STM32Cube笔记】2-STM32Cube安装教程

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配

STM32F4最小系统硬件设计

对于硬件工程师来讲,想要入门STM32相关的开发,我想除了深入阅读一下STM32的数据手册外,最实用且有效的方法就是自己实际做一个STM32的最小系统板了。本文将以一个小的STM32F427VG的电路最