1. RTT studio创建工程
创建工程
## 创建完成以后的目录结构
2. 配置CubuMx
双击cubumx的图标打开CubeMx
配置时钟
生成代码
构建后的代码结构
编译代码满屏错误:不要慌
3. 新增脚本
新建scons脚本文件 SConscript
脚本内容如下,每次修改外设后度需要增加外设c文件的添加,本次使用了gpio.c 和 usart.c文件
import os
from building import *cwd = GetCurrentDir()
src = Glob('*.c')
# add cubemx drivers
src = Split('''
Src/stm32f4xx_hal_msp.c
Src/main.c
Src/gpio.c
Src/usart.c
''')
print(src)
path = [cwd]
path += [cwd + '/Inc']group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)Return('group')
执行脚本,回报错就是存在2个main函数入口
开始编译代码,如果编译后还是很多错误,那就再执行一次脚本
修改main函数为弱函数,执行编译结果如下图
修改 application 目录下main.c文件,使用2个现场 点亮 2个LED
/** Copyright (c) 2006-2021, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2021-10-21 RT-Thread first version*/#include <rtthread.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include "main.h"
#include "gpio.h"
#include "usart.h"
#include "rtthread.h"
#include "board.h"#define LED0 GET_PIN(F,9)
#define LED1 GET_PIN(F,10)#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 512
#define THREAD_TIMESLICE 5/* 指向线程控制块的指针 */
rt_thread_t tid1 = RT_NULL;
rt_thread_t tid2 = RT_NULL;void led0_start(void);
void led1_start(void);int main(void)
{MX_GPIO_Init();MX_USART1_UART_Init();LOG_D("Init Ok!");int count = 1;while (count++){rt_thread_mdelay(1000);}return RT_EOK;
}void led0_entry(void* p)
{rt_kprintf("LED0 Runing\r\n");while(1){rt_pin_write(LED0, 1);rt_thread_delay(1000);rt_pin_write(LED0, 0);rt_thread_delay(1000);}
}
void led1_entry(void* p)
{rt_kprintf("LED1 Runing\r\n");while(1){rt_pin_write(LED1, 1);rt_thread_delay(1000);rt_pin_write(LED1, 0);rt_thread_delay(1000);}
}void led0_start(void)
{/* 创建线程1 */tid1 = rt_thread_create("t11",led0_entry,RT_NULL,THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);if(tid1 != RT_NULL)rt_thread_startup(tid1);
}
void led1_start(void)
{/* 创建线程1 */tid2 = rt_thread_create("t22",led1_entry,RT_NULL,THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);if(tid2 != RT_NULL)rt_thread_startup(tid2);
}
MSH_CMD_EXPORT(led0_start, led0_task);
MSH_CMD_EXPORT(led1_start, led1_task);
-
编译
-
下载
配置调试终端
执行命令
led0_start
灯光开始闪烁