其他分享
首页 > 其他分享> > RT-thread Nano移植

RT-thread Nano移植

作者:互联网

目录

一、移植准备

STM32CubeMx 添加RT-Thread操作系统组件:

首先要获取 RT-Thread NANO软件包:https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

二、打开STM32CubeMx创建项目

  1. Help -> Manage embedded software packages
    在这里插入图片描述

2.添加NANO软件包
在这里插入图片描述

3.添加NANO软件包链接
在这里插入图片描述

4.添加software packs
在这里插入图片描述

等待下载完成:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

安装完成,点击close回到主界面新建项目:
在这里插入图片描述

5.创建工程
在这里插入图片描述

RCC配置:
在这里插入图片描述
SYS配置:
在这里插入图片描述

时钟树配置:
在这里插入图片描述

选择组件:
在这里插入图片描述

选择RT-Thread组件,OK:
在这里插入图片描述

将选择的模块进行勾选:
在这里插入图片描述

NVIC配置:
在这里插入图片描述

配置GPIO引脚点灯
在这里插入图片描述
配置串口:
在这里插入图片描述

生成代码:
在这里插入图片描述
在这里插入图片描述

三、编写代码

LED1每0.5s亮一次,LED2每1s亮一次
使用keil打开新建的项目,在Application/User文件夹,新建app_rt_thread.c文件
在这里插入图片描述

添加代码:

#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led0_thread;
struct rt_thread led1_thread;
rt_uint8_t rt_led0_thread_stack[128];
rt_uint8_t rt_led1_thread_stack[128];
void led0_task_entry(void *parameter);
void led1_task_entry(void *parameter);
//初始化线程函数
void MX_RT_Thread_Init(void)
{
	//初始化LED线程
	rt_thread_init(&led0_thread,"led0",led0_task_entry,RT_NULL,&rt_led0_thread_stack[0],sizeof(rt_led0_thread_stack),3,20);
	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(&led0_thread);
	rt_thread_startup(&led1_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
	printf("Hello,this is WOOZI9600L!!!");
	rt_thread_delay(2000);
}
 
//LED0任务
void led0_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14, GPIO_PIN_RESET);
		rt_thread_delay(500);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14, GPIO_PIN_SET);
		rt_thread_delay(500);
	}
	
}	
//LED1任务
void led1_task_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15, GPIO_PIN_RESET);
		rt_thread_delay(500);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15, GPIO_PIN_SET);
		rt_thread_delay(2500);
	}
}

修改board.c的77行:
在这里插入图片描述

将rtconfig.h的145行取消注释:
在这里插入图片描述

main.c中添加:

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

在这里插入图片描述

在主函数里添加:

	MX_RT_Thread_Init();
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
		rt_thread_mdelay(500);

在这里插入图片描述

四、结果

编译烧录,结果
在这里插入图片描述

五、总结

勉强移植成功,还有待改善。

参考

https://blog.csdn.net/qq_36075612/article/details/107309750

标签:RT,rt,Nano,thread,void,led1,GPIO
来源: https://blog.csdn.net/weixin_46129506/article/details/121937801