一、添加Nano软件包
RT-Thread Nano软件包地址:
https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
- 打开CubeMX,选择
Help
下的Manage embedded software packages
:
- 选择
From Url...
:
- 点击
New
,并添加上述的Nano软件包地址https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
:
- 勾选并点击OK
- 同时,安装RT-Thread:
点击同意:
安装成功:
二、新建工程
-
选择芯片
-
GPIO配置PA3,PB10灯输出
-
RCC配置:
-
SYS设置:
-
GPIO配置PA4,PB10灯输出
-
配置串口中断
-
时钟树设置:
-
选择组件:
-
选择RT-Thread组件,点击OK:
-
将选择的模块进行勾选:
-
NVIC配置:
-
给项目命名,选择存储路径
-
点击生成代码
三、代码编写
- 在Application/USER文件夹下新建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_4, GPIO_PIN_RESET);
rt_thread_delay(500);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4, GPIO_PIN_SET);
rt_thread_delay(500);
}
}
- Middlewares/RT-Thread/RTOS/kernel文件夹下的board.c文件,修改串口USART2为USART1
- 取消rtconfig.h 里面的注释
在main.c文件中添加代码
/* USER CODE BEGIN PTD */
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
/* USER CODE END PTD */
main函数的while循环中添加以下代码作为一个新线程:
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);
rt_thread_delay(1000);
/* USER CODE BEGIN 3 */
}
运行结果:
总结
本次实验实现了对RT-thread Nano移植,并点亮了两个LED灯。
参考
https://blog.youkuaiyun.com/weixin_47554309/article/details/122081800