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
灯光开始闪烁