當前位置:網站首頁>STM32F103C8移植RT_Thread-Nano(基於 STM32CubeMX )

STM32F103C8移植RT_Thread-Nano(基於 STM32CubeMX )

2022-01-27 02:28:40 保護奶猫

一、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

版權聲明
本文為[保護奶猫]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201270228400377.html

隨機推薦