RT-Thread studio使用(持续更新)


  • 官方的RT-Thread Studio的用户手册:(界面介绍,编译下载调试、导入工程等官方文档说明)
    RT-Thread Studio 用户手册

============================================================

1、RT-Thread studio下载安装

1-1、官网下载安装包:

RT-Thread 官方下载中心
文档中心关于nano版本讲了移植的几种方式,打开使用RT-Thread_Studio移植,选择安装RT-Thread_Studio跳转到官网,拉到最底下,点击RT-Thread nano,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择下载即可;

1-2、安装:

在这里插入图片描述
勾选协议:
在这里插入图片描述
选择自己想要安装的位置:
在这里插入图片描述
在这里插入图片描述
开始安装
在这里插入图片描述
v2.2.4版本安装提示重命名某个文件失败,。。。。。,下个v2.2.3版本试下:(v2.2.3版本还是一样的报错)
在这里插入图片描述
解决:最后发现是安装路径的问题。。。安装在默认的D盘根目录下就成功安装了,真是很无语!(这个现象在我自己的电脑上安装是自定义的路径,但是没有出现这个错误,不知道什么原因,解决了就好)

1-3、注册登录:

注册好登录,即可开始使用啦;
在这里插入图片描述

2、新建RT-Thread nano工程

2-1、新建nano工程

2-1-1、打开 文件—>新建—>RT-Thread Nano项目:
在这里插入图片描述
2-2-2、新建项目配置项:
1>、设置工程名字
2>、工程保存路径
3>、基于芯片创建、nano版本选择
4>、芯片选择
5>、串口控制台与引脚配置
6>、调试配置
全部配置完成之后自动生成了nano项目代码;
注:
1、我选择先在stm32f103c8t6上面先跑,所以第4和5项配置要根据实际情况配置
2、配置时钟,默认是用内部的HSI时钟,后续自己在文件drv_clk.c中修改;
在这里插入图片描述
stm32f103c8t6的串口1当调试串口:
stm32f103c8t6数据手册看usart1当调试口
2-1-3、生成工程之后如下,选择了小锤子debug后,编译0 error,0 warning;

在这里插入图片描述

2-2、连接硬件,下载到板子上测试(选择的是stm32f103c8t6)

2-2-1、下载到stm32f103c8t6最小系统板上
在这里插入图片描述
竟然弹出窗口然后一直下载中
问题解决:嗐,这台电脑第一次用j-link ob,没装驱动,装了驱动之后,下载正常;
关于j-link的问题解决查看博客:j-link使用(持续更新)
在这里插入图片描述
2-2-2、打开RT-Thread studio中的串口终端,可以看到代码中实现的输出到串口的内容;
生成的代码main函数中定时打印字符串到串口,由于在配置工程时候配置了控制台串口的串口号和引脚号,在工程中自动实现了串口的驱动和rt_hw_console_output(),默认可以进行打印;
在这里插入图片描述

3、用RT-Thread studio创建的nano工程的文件解读

待更新

4、基于RT-Thread nano添加Finsh(实现命令输入)

4-1、什么是Finsh

RT-Thread FinSH 是 RT-Thread 的命令行组件(shell),提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口 / 以太网 / USB 等与 PC 机进行通信;

4-2、基于Nano添加FinSH(用RT-Thread studio)

4-2-1、双击 RT-Thread Settings 进入配置,打开组件,勾选 FinSH Shell,保存配置。此操作将把 FinSH 组件的源码加入工程中。其中,rt_hw_console_getchar() 已经在 drv_uart.c 中实现,无需再实现对接 FinSH 的代码。

如下打开组件之后,就可用FinSH功能了
在这里插入图片描述
4-1-2、链接硬件,重新编译下载时候,在RT-Thread studio软件中的终端中按下tab键,可查看系统中的命令:

正常情况下是可以实现了命令行输入,但是出现了tab键之后没有反应现象:
在这里插入图片描述
问题解决:
不屏蔽上图中的 rt_thread_mdelay(1000);(应该是程序陷入了死循环,现在对RT-Thread不熟悉,后续回头解答原因)

在这里插入图片描述

5、【问题】怎么用RT-Thread studio打开已经创建好的RT-Thread项目工程;

问题描述:
在这里插入图片描述
问题解决:
RT-Thread studio【问题】怎么用RT-Thread studio打开已经创建好的RT-Thread项目工程;

6、【问题】怎么查找打开指定内容

1、搜索:
在这里插入图片描述
2、打开元素:
在这里插入图片描述

7、【问题】项目工程怎么添加自己的路径和源文件头文件(SConscript和SConstruct)(未完善)

见自己博客

8、 RT-Thread工程新建工程之后,用cubemx重新配置参数(时钟,串口等)

参考博文链接:
RT-Thread Studio与CubeMX联合编程(超级详细)

8-1、cubemx配置:

打开工程中的插件(要先安装好stm32cubemx这个软件)进行配置,软件的安装和配置见下面的博文链接:
在这里插入图片描述

stm32cubeMX使用

配置好之后关闭cubemx这个软件,然后进入RT-Thread studio之后弹出这个窗口,提示
生成了stm32f1xx_hal_conf.h原来的文件重命名,调用cubemx生成的这个文件,点确定即可;
在这里插入图片描述
在这里插入图片描述

8-2、用cubemx生成工程后需要关闭软件;

8-2-1、在RT-Thread studio软件中打开cubemx插件配置工程之后,必须要关闭掉cubemx软件,这样在RT-Thread studio软件上才能正常操作
在这里插入图片描述

8-3、用cubemx重新配置之后生成的文件分析:

在这里插入图片描述
如上图,cubemx生成了文件夹cubemx下面包含头文件和源文件,尤其是也有一个main.c,那到底用哪一个main.c执行我们的用户代码呢?

先继续下一步吧,先执行编译;

8-4、编译后报错解决

直接编译后报21个错误。。。
在这里插入图片描述
解决的步骤:

8-4-1、需要用SConscript文件告诉编译器cubemx生成的需要编译

在cubumx文件夹下有生成SConscript文件,要是没有自己创建一个,自己生成的SConscript文件已经实现了生成文件的路径包含了
在这里插入图片描述

import os   #引入os模块
from building import *    #导入building的所有模块

cwd = GetCurrentDir()	#获取获取当前路径,并保存至变量cwd
src  = Glob('*.c')	#获取当前目录下的所有 C 文件,并保存至src变量

# add cubemx drivers 
#由于RT-Thread工程中存在部分相同函数文件,所以对src重新赋值
#文件中的stm32g4xx_it.c 、 system_stm32g4xx.c不加入构建
#其余文件按相同格式填写到下述括号内

src = Split('''
Src/stm32f1xx_hal_msp.c
Src/main.c
''')

path = [cwd]    #创建路径列表,并保存至path中
path += [cwd + '/Inc']	

group = DefineGroup('cubemx', src, depend = [''], CPPPATH = path)  #这是 RT-Thread 基于 SCons 扩展的一个方法(函数)。

Return('group')

8-4-2、右键SConscript更新软件包

更新软件包!非常重要!别漏了
在这里插入图片描述

8-5、weak掉cubemx生成的main函数,然后在applications下调用cubemx生成的函数:

8-5-1、weak掉cubemx生成的main函数:

网上有说手动_weak掉cubemx生成的main函数,但是我这版本自动生成好了;
在这里插入图片描述

8-5-2、将hal生成初始化函数在application的main下调用

将hal生成初始化函数在application的main下调用,如下,在applications下的main.c中去调用cubemx生成的hal函数:(这里我用cubemx配置的外设很少,所有只有一个main。h头文件)
在这里插入图片描述
然后重新编译;

8-6【问题】做了SConscript脚本和weak cubemx生成的main函数,还是编译错误

现象:

16:22:09 **** Incremental Build of configuration Debug for project test2 ****
make -j4 all 
arm-none-eabi-gcc "../drivers/drv_usart.c"
../drivers/drv_usart.c:28:8: error: unknown type name 'UART_HandleTypeDef'
 static UART_HandleTypeDef handle;
        ^
../drivers/drv_usart.c:380:30: error: unknown type name 'UART_HandleTypeDef'
 __WEAK void HAL_UART_MspInit(UART_HandleTypeDef *huart)
                              ^
../drivers/drv_usart.c: In function 'stm32_configure':
../drivers/drv_usart.c:393:11: error: request for member 'Instance' in something not a structure or union
     handle.Instance          = config->Instance;
           ^
../drivers/drv_usart.c:394:11: error: request for member 'Init' in something not a structure or union
     handle.Init.BaudRate     = 115200;
           ^
../drivers/drv_usart.c:395:11: error: request for member 'Init' in something not a structure or union
     handle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
           ^
../drivers/drv_usart.c:395:32: error: 'UART_HWCONTROL_NONE' undeclared (first use in this function)
     handle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
                                ^
../drivers/drv_usart.c:395:32: note: each undeclared identifier is reported only once for each function it appears in
../drivers/drv_usart.c:396:11: error: request for member 'Init' in something not a structure or union
     handle.Init.Mode         = UART_MODE_TX_RX;
           ^
../drivers/drv_usart.c:396:32: error: 'UART_MODE_TX_RX' undeclared (first use in this function)
     handle.Init.Mode         = UART_MODE_TX_RX;
                                ^
../drivers/drv_usart.c:397:11: error: request for member 'Init' in something not a structure or union
     handle.Init.OverSampling = UART_OVERSAMPLING_16;
           ^
../drivers/drv_usart.c:397:32: error: 'UART_OVERSAMPLING_16' undeclared (first use in this function)
     handle.Init.OverSampling = UART_OVERSAMPLING_16;
                                ^
../drivers/drv_usart.c:398:11: error: request for member 'Init' in something not a structure or union
     handle.Init.WordLength   = UART_WORDLENGTH_8B;
           ^
../drivers/drv_usart.c:398:32: error: 'UART_WORDLENGTH_8B' undeclared (first use in this function)
     handle.Init.WordLength   = UART_WORDLENGTH_8B;
                                ^
../drivers/drv_usart.c:399:11: error: request for member 'Init' in something not a structure or union
     handle.Init.StopBits     = UART_STOPBITS_1;
           ^
../drivers/drv_usart.c:399:32: error: 'UART_STOPBITS_1' undeclared (first use in this function)
     handle.Init.StopBits     = UART_STOPBITS_1;
                                ^
../drivers/drv_usart.c:400:11: error: request for member 'Init' in something not a structure or union
     handle.Init.Parity       = UART_PARITY_NONE;
           ^
../drivers/drv_usart.c:400:32: error: 'UART_PARITY_NONE' undeclared (first use in this function)
     handle.Init.Parity       = UART_PARITY_NONE;
                                ^
../drivers/drv_usart.c:402:9: warning: implicit declaration of function 'HAL_UART_Init' [-Wimplicit-function-declaration]
     if (HAL_UART_Init(&handle) != HAL_OK)
         ^
../drivers/drv_usart.c: In function 'rt_hw_console_output':
../drivers/drv_usart.c:429:13: warning: implicit declaration of function 'HAL_UART_Transmit' [-Wimplicit-function-declaration]
             HAL_UART_Transmit(&handle, (uint8_t *)&a, 1, 1);
             ^
../drivers/drv_usart.c: In function 'rt_hw_console_getchar':
../drivers/drv_usart.c:440:9: warning: implicit declaration of function '__HAL_UART_GET_FLAG' [-Wimplicit-function-declaration]
     if (__HAL_UART_GET_FLAG(&handle, UART_FLAG_RXNE) != RESET)
         ^
../drivers/drv_usart.c:440:38: error: 'UART_FLAG_RXNE' undeclared (first use in this function)
     if (__HAL_UART_GET_FLAG(&handle, UART_FLAG_RXNE) != RESET)
                                      ^
../drivers/drv_usart.c:447:20: error: request for member 'Instance' in something not a structure or union
         ch = handle.Instance->DR & 0xff;
                    ^
../drivers/drv_usart.c:452:41: error: 'UART_FLAG_ORE' undeclared (first use in this function)
         if(__HAL_UART_GET_FLAG(&handle, UART_FLAG_ORE) != RESET)
                                         ^
../drivers/drv_usart.c:454:13: warning: implicit declaration of function '__HAL_UART_CLEAR_OREFLAG' [-Wimplicit-function-declaration]
             __HAL_UART_CLEAR_OREFLAG(&handle);
             ^
../drivers/drv_usart.c: At top level:
../drivers/drv_usart.c:251:17: warning: 'stm32_gpio_configure' defined but not used [-Wunused-function]
 static rt_err_t stm32_gpio_configure(struct stm32_uart_config *config)
                 ^
make: *** [drivers/subdir.mk:27: drivers/drv_usart.o] Error 1
"make -j4 all" terminated with exit code 2. Build might be incomplete.

16:22:10 Build Failed. 20 errors, 5 warnings. (took 1s.459ms)

问题解决:其实是在cubemx配置的时候我没有配置到用作RT-Thread studio终端用的usart1导致的问题,具体操作如下博文:

【rtt问题】RT-Thread studio用cubemx配置后提示串口错误:error: unknown type name ‘UART_HandleTypeDef‘

9、【rtt问题】RT-Thread studio新建项目编译成功,j-link下载失败

【rtt问题】RT-Thread studio新建项目编译成功,j-link下载失败

猜你喜欢

转载自blog.csdn.net/weixin_42640280/article/details/127908226