基于 RT-Thread nano 软件包实现 shell 功能

摘要

RT-Thread nano 从 3.1.2 版本开始,在 nano 中新增串口驱动框架,方便实现串口输入与输出功能,进而实现 shell 功能。针对 RT-Thread nano 软件包提供的 Keil 版本和 CubeMX 版本,本文分别使用 CubeMX 5.0 与 Keil 5.26 实现 shell 功能。

shell 简介

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

shell 作用相当于在开发者和计算机之间架起了一座沟通的桥梁,开发者能很方便的获取系统的运行情况,并通过命令控制程序的运行,包括利用 shell 调用测试函数,改变测试函数的参数等等功能。

实现 shell 功能概述

针对 Keil 版本和 CubeMX 版本的 RT-Thread nano 软件包,均以潘多拉 STM32L475 为例,选择其串口 USART1(st - link 所带的虚拟串口与之交互),从实现了串口驱动的裸机工程开始,按照以下步骤实现 shell 功能:

1. 添加 nano 软件包
2. 添加 RT-Thread 串口驱动
3. 完善头文件引用
4. 修改系统配置
5. 添加串口配置
6. 程序检验

添加 nano 软件包

在基础工程上,Keil 和 CubeMX 的不同点在于添加 nano 软件包组件界面,但作用基本相同。

CubeMX

使用 CubeMX 打开裸机工程的 .ioc 文件,然后添加 RT-Thread nano 相关组件:初次添加参考《基于 Cube MX 5.0 的 RT-Thread Nano 使用指南》,熟练的直接进行添加。 与使用指南不同的是选择 RT-Thread 组件,需要将 nano 软件包的三个组件全部选中,如下图所示

CubeMX 组件选择

添加完成后,为了方便与 Keil 一同介绍,这里生成 Keil 工程,然后打开工程,展开 RT-Thread 组件,如下图所示

CubeMX nano 工程文件

Keil

使用 Keil 打开基础工程,然后添加 RT-Thread nano 相关组件:初次添加参考《基于 keil 的 RT-Thread Nano 使用指南》,熟练的直接进行添加。 与使用指南不同的是选择 RT-Thread 组件,需要将 nano 软件包的三个组件全部选中,如下图所示

Keil 组件选择

选择完成,点击 OK 按钮,回到工程界面,展开 RTOS,刚才添加组件对应的文件如下图所示

Keil 组件选择

添加 RT-Thread 串口驱动

在添加 nano 软件包所有组件的工程中,需要添加的文件及下载地址分别如下表

drv_usart.c https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/libraries/HAL_Drivers/drv_usart.c
drv_usart.h https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/libraries/HAL_Drivers/drv_usart.h
uart_config.h https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/libraries/HAL_Drivers/config/l4/uart_config.h

值得注意的是 uart_config.h,不同类型核心芯片的串口配置在 https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32/libraries/HAL_Drivers/config 下,需要根据实际进行下载,其他俩个文件为公用文件。

例程将 drv_usart.huart_config.h 放置在 /Inc 文件夹下;将 drv_usart.c 放置在工程目录 /Src 文件夹下,并且添加至工程 Application/User 目录(也可以放置在其他目录),如下图所示

驱动添加

完善头文件引用

添加 RT-Thread 串口驱动之前,编译一般不会有什么问题,添加完驱动之后,编译会出现错误,下面主要针对添加驱动引入的问题进行解决。

注释多余头文件

drv_usart.h 文件中,注释多余头文件如下

//#include <drv_common.h>
//#include "drv_dma.h"

drv_usart.c 文件中,注释多余头文件如下

//#include "board.h"
//#include "drv_config.h"
//#include <drv_log.h>

增加必要头文件

drv_usart.h 文件中,添加头文件如下

#include "stm32l4xx_hal.h" 
#include "uart_config.h"

修改系统配置

配置文件在 rtconfig.h 中,与串口驱动相关的主要修改配置如下

配置

  • RT_CONSOLE_DEVICE_NAME 表示在多个串口工作的情况下,选择使用 shell 功能的串口
  • BSP_USING_UARTx 表示程序中使用到的串口
  • SOC_SERIES_STM32L4 表示使用的 SOC 系列类型,需要根据驱动文件添加

例程使用 shell 功能的串口为 UART1,也只使用了串口 UART1,SOC 系列为 STM32L4,所以修改如下

修改后的配置

添加串口配置

board.c 文件的函数 rt_hw_board_init 中,添加代码如下

#ifdef RT_USING_SERIAL
    extern void rt_hw_usart_init();
    rt_hw_usart_init();
#endif  

添加后,如下图所示

添加串口初始化

程序检验

修改配置后,将工程进行编译,确认无误后,下载至开发板,复位后正常启动日志如下

log

如果打开定义 FINSH_USING_SYMTAB,按下键盘 Tab 键,可以查看 nano 内置的命令。命令以空格隔开,分别如下图所示

log

命令具体说明,参考《FinSH 控制台》中内置命令介绍。

注意事项

  • 注意 nano 软件包版本
  • 更多完整功能,请使用完整 RT-Thread OS

参考资料

Question && Feedback