一、CubeMX添加RT-Thread操作系统组件
-
获取RT-Thread Nano软件包,指路:
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc -
安装RT-Thread
参考:https://blog.csdn.net/qq_36075612/article/details/107309750 -
下载好如下
二、CubeMX新建工程
- 新建项目
- 进去选择STM32F103C8
- 配置SYS:
- 配置RT-Thread(可能会发现找不到,那我们先让能够找得到)
- 按以下图示配置:
- 终于可以配置RT-Thread
- 配置NVIC:
- 配置使USART1串口使能,使引脚PA3、PA4用于点亮LED灯:
- 补个RCC配置
- 时钟树配置
- 配置项目
- OpenProject 在Keil中打开
三、Keil里的操作
- 新建app_rt_thread.c文件
- 写入app_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_WritePin(GPIOA,GPIO_PIN_3, GPIO_PIN_RESET);
rt_thread_delay(500);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3, GPIO_PIN_SET);
rt_thread_delay(500);
}
}
- 修改board.c内的串口为USART1:
- 取消rtconfig.h中注释:
- main中添加
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
- while循环中添加新线程:
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
rt_thread_delay(1000);
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_3);
rt_thread_delay(1000);
四、运行结果
- 烧录后,看结果
小小的总结
- 仍旧需要注意的是烧录时Boot0要置1,查看结果时Boot0要置0,并Reset。
- RT-thread的移植相较于uCOSII的移植来说要简单很多了,按步骤,没问题的。
参考文献
- RT-thread Nano移植:https://blog.csdn.net/qq_46359931/article/details/121950851
- 基于 STM32CubeMX 添加 RT-Thread 操作系统组件(一)- 详细介绍操作步骤:
https://blog.csdn.net/qq_36075612/article/details/107309750 - STM32F103C8移植RT_Thread:https://blog.csdn.net/weixin_56102526/article/details/121952050