[STM32F1] RT-Thread Studio联合STM32CubeMX进行开发 转

[复制链接]
4555|53
 楼主| hudi008 发表于 2022-10-27 09:00 | 显示全部楼层 |阅读模式
RT-Thread Studio联合STM32CubeMX进行开发
一、准备内容
1.1硬件平台
使用正点原子STM32F4探索者
v2-07d9526b447b331d454955ec51e5daa5_720w.jpg
使用到板载LED灯,原理图如下:
v2-f274979a02e34b9c64d9b2ba730d628d_720w.jpg
1.2软件环境
STM32CubeMX软件平台 V6.2.1
RT-Thread Studio V2.10
二、新建工程
点击:文件 -> 新建 -> RT-Thread项目
v2-4cbd60523c288928384ecac55f6ad8c8_720w.jpg
选择基于芯片的项目,填写工程名字,芯片类型(如果第一次使用RT-Thread,需要进入SDK管理器下载对应SDK包),控制台串口和下载器,控制台串口使用串口一,连接电脑方便进行Fish调试
v2-b45b1f87e4617710d4675d3e4e925324_720w.jpg
工程新建后左边的项目资源管理器会显示我们的工程,我们把他展开
v2-ec374a027387889047746bfeb386198e_720w.jpg
到此RT-Thread完整版工程就完成了
三、CubeMX配置
点击工程内CubeMX Setting配置键,进入STM32CubeMX配置
v2-530c88a97ca196ce086463bff1a60ddc_720w.jpg
配置使用外部时钟
v2-b531788690b61df2fed1585604ead646_720w.jpg
配置时钟树,1处填入晶振值,点击2、3处选择HSE和PLL锁相环,4处填入值按下Enter系统自动配置倍频系数
v2-712d8102141061f3b4c4c676462bd735_720w.jpg
配置串口1(RT-Thread终端串口必须配置)
v2-432cd9a4835d58290e6b08e26cb7ed01_720w.jpg
配置要使用到的LED灯IO口:PF9和PF10
v2-21fc82eab855fb035377a92d6fa6658a_720w.jpg
点击生成代码,生成选项中勾选生成单独.c和.h文件,其它保持默认
v2-ef590adf5d63d7d425eead904f9f92bc_720w.jpg
代码生成后回到RT-Thread Studio工程,提示stm32f4xx_hal_conf.h改为stm32f4xx_hal_conf_bak.h备份文件,是因为conf内存储着stm32的hal库配置信息,RT-Thread做了一个备份,防止你新生成的配置不对,方便回溯,这里我们不用管
编译工程,一堆报错!不要慌,下面是重点:
不管是RT-Thread Studio内打开CubeMX还是外面打开CubeMX生成配置后添加到RTT工程,其中都有许多无用的文件,实际上我们使用的文件就下面几个
v2-d2aa1b5afc379a4dcf11a3edd16ba4d1_720w.jpg
所以我们需要添加一个scon脚本告诉Studio:我们只构建这几个工程文件,新建名称为SConscript的文件
v2-6fbd7b08352b7014b9ff40037cb15cb4_720w.jpg
添加如下内容
import osfrom building import *cwd = GetCurrentDir()src  = Glob('*.c')# add cubemx driverssrc = Split('''Src/stm32f4xx_hal_msp.cSrc/main.c''')path = [cwd]path += [cwd + '/Inc']group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)Return('group')
右键导航栏,更新软件包,添加Scon到系统环境:
v2-0809e2b45902877bea78f5be2369bd79_720w.jpg
点击进入CubeMX生成的main函数,将main函数的main函数主体weak掉
v2-8cacfdb11becc62eecbe886d4d14a96b_720w.jpg
将hal生成初始化函数在application的main下调用,头文件添加各个外设的.h文件,main函数中调用初始化
v2-5b62e44eb9e0d792a041e405e2757d5e_720w.jpg
添加完成,点击构建,无报错
v2-76c941d2d42c249f7d7a3baabc55426a_720w.jpg
四、联合开发
CubeMX配置基本完成了,下面我们写一个线程,然后从命令行启动(命令行YYDS)
main中直接替换成如下代码:
/* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author       Notes * 2021-06-20     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;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);
编译下载,无报错
v2-6fe8335719814e8c52b665090f83d67b_720w.jpg
地下縱情搖擺 发表于 2022-11-19 19:52 | 显示全部楼层
RTT是真好用啊,开发起来真的容易

林间有新绿 发表于 2022-11-19 20:24 | 显示全部楼层
STcubemx底层搭建的话,很好用

偷吻月亮 发表于 2022-11-19 20:56 | 显示全部楼层
使用cubemx还能配置RTT操作系统啊?

漫过岁月 发表于 2022-11-19 21:28 | 显示全部楼层
话说,cubemx配置完成之后,工程是选择keil还是RTT的工程啊

占得人间第一春 发表于 2022-11-19 22:00 | 显示全部楼层
RTT现在起来的太快了,而且好多国产厂商都在向其靠拢,真的不错

热爱童话世界 发表于 2022-11-19 22:32 | 显示全部楼层
Cubemx我知道能生成keilIAR工程,没想到还能用RTTIDE啊

喜爱弄人 发表于 2022-11-19 23:04 | 显示全部楼层
这种教程楼主可以多发一些,真的很受用

极客晨星 发表于 2022-11-19 23:36 | 显示全部楼层
Cubemx配置之前还不咋懂呢,就只能配置一些基础的操作,要是有cubemx的教程就好了

銀河 发表于 2022-11-20 00:08 | 显示全部楼层
现在新出的MCU都不支持固件库了,都是用HAL库了

风吻过你的不羁 发表于 2022-11-20 00:40 | 显示全部楼层
原来是先用RTT开发环境创建工程,再用cubemx配置啊,我以为是反过来呢

huquanz711 发表于 2024-5-21 08:11 来自手机 | 显示全部楼层
RTThread现在发展的不错啊,我看用的人越来越多了。
1988020566 发表于 2024-6-5 21:33 | 显示全部楼层
RT-Thread Studio 和 STM32CubeMX 是两个非常流行的工具,分别用于嵌入式系统的软件开发和STM32微控制器的配置
alvpeg 发表于 2024-6-7 08:52 | 显示全部楼层
RT-Thread Studio本身并不直接支持从STM32CubeMX导入配置,但你可以手动将生成的初始化代码集成到你的RT-Thread项目中。
i1mcu 发表于 2024-6-7 12:25 | 显示全部楼层
在STM32CubeMX中完成配置后,生成代码。这些代码将作为您RT-Thread项目的一部分。
hilahope 发表于 2024-6-7 19:15 | 显示全部楼层
安装并准备好所需的软件环境,包括STM32CubeMX软件平台和RT-Thread Studio。
mollylawrence 发表于 2024-6-7 22:40 | 显示全部楼层
在使用某些外设(如PWM)时,可能需要手动添加初始化和启动代码,因为默认配置可能不完全满足所有应用场景。
biechedan 发表于 2024-6-8 12:33 | 显示全部楼层
由于RT-Thread自带HAL库配置,可能需要根据实际情况调整或备份原有的stm32fxx_hal_conf.h文件。
jtracy3 发表于 2024-6-8 18:56 | 显示全部楼层
RT-Thread Studio 是一款基于 RT-Thread 操作系统的集成开发环境(IDE),它提供了丰富的功能,使得开发者能够更高效地进行嵌入式系统开发。
burgessmaggie 发表于 2024-6-8 22:06 | 显示全部楼层
在 RT-Thread Studio 中调试你的项目,检查程序的运行情况。根据调试结果,对代码进行优化和调整,以提高程序的性能和稳定性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

253

主题

9898

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部