STM32CubeMx 添加RT-Thread操作系统组件:
首先要获取 RT-Thread NANO软件包:https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
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