【RT-Thread Studio使用指南:不断更新】

文章目录

  • 1、RT-Thread studio下载安装
  • 1-1、官网下载安装包:
  • 1-2、安装:
  • 1-3、注册登录:
  • 2、新建RT-Thread nano工程
  • 2-1、新建nano工程
  • 2-2、连接硬件,下载到板子上测试(选择的是stm32f103c8t6)
  • 3、用RT-Thread studio创建的nano工程的文件解读
  • 4、基于RT-Thread nano添加Finsh(实现命令输入)
  • 4-1、什么是Finsh
  • 4-2、基于Nano添加FinSH(用RT-Thread studio)
  • 5、【问题】怎么用RT-Thread studio打开已经创建好的RT-Thread项目工程;
  • 6、【问题】怎么查找打开指定内容
  • 7、【问题】项目工程怎么添加自己的路径和源文件头文件(SConscript和SConstruct)(未完善)
  • 8、 RT-Thread工程新建工程之后,用cubemx重新配置参数(时钟,串口等)
  • 8-1、cubemx配置:
  • 8-2、用cubemx生成工程后需要关闭软件;
  • 8-3、用cubemx重新配置之后生成的文件分析:
  • 8-4、编译后报错解决
  • 8-4-1、需要用SConscript文件告诉编译器cubemx生成的需要编译
  • 8-4-2、右键SConscript更新软件包
  • 8-5、weak掉cubemx生成的main函数,然后在applications下调用cubemx生成的函数:
  • 8-5-1、weak掉cubemx生成的main函数:
  • 8-5-2、将hal生成初始化函数在application的main下调用
  • 8-6【问题】做了SConscript脚本和weak cubemx生成的main函数,还是编译错误
  • 9、【rtt问题】RT-Thread studio新建项目编译成功,j-link下载失败

  • 官方的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下载失败

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【RT-Thread Studio使用指南:不断更新】

    发表评论