RTT Studio和Cubemx联合开发

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);

  1. 编译
    在这里插入图片描述

  2. 下载
    在这里插入图片描述
    配置调试终端
    在这里插入图片描述
    执行命令

led0_start

在这里插入图片描述

灯光开始闪烁

猜你喜欢

转载自blog.csdn.net/u010261063/article/details/120900674
RTT
今日推荐