- 官方的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当调试串口:
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‘文章来源:https://www.toymoban.com/news/detail-416921.html
9、【rtt问题】RT-Thread studio新建项目编译成功,j-link下载失败
【rtt问题】RT-Thread studio新建项目编译成功,j-link下载失败文章来源地址https://www.toymoban.com/news/detail-416921.html
到了这里,关于RT-Thread studio使用(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!