littlebot
Published on 2025-04-10 / 4 Visits
0

【源码】基于STM32的命令行接口Shell

项目简介

本项目是基于STM32微控制器的命令行接口(CLI),借助STM32硬件抽象层(HAL)接口,在STM32设备上实现了一个shell。该项目兼容性良好,适用于大多数ST Microelectronics的ARM微控制器。

项目的主要特性和功能

  1. 支持彩色输出,具备标准VT100终端的大部分功能。
  2. 提供10条命令的历史记录,可使用上下箭头键回顾之前输入的命令。
  3. 允许用户添加自定义命令。
  4. 预实现了help、reset、cls等常用命令。
  5. 具备LOG、DBG、ERR宏,可快速打印调试信息并显示其在代码中的位置。
  6. 支持密码保护,增强shell的安全性。
  7. 可正常使用stdio函数,如printf能直接在终端输出文本。

安装使用步骤

安装

配置项目(CubeMX)

使用STM32CubeMX配置项目,启用要使用的UART,并开启该UART的全局中断。UART的参数(如波特率、字长、奇偶校验等)需与电脑端软件保持一致。

安装文件

将源码文件复制到现有项目中。若使用STM32CubeIDE,项目文件结构可参考文档中的示例。

使用

包含文件

在主文件开头添加#include "../shell/inc/sys_command_line.h"。若文件由CubeMX生成,需将其放在/* USER CODE BEGIN Includes *//* USER CODE END Includes */注释之间。

运行CLI

在UART初始化后,初始化CLI。在主文件的/* USER CODE BEGIN 2 *//* USER CODE END 2 */注释之间添加CLI_INIT(&huart1);。然后在主循环中添加CLI_RUN();以处理命令。

自定义shell

  • 密码设置:在main.h文件中添加#define CLI_PASSWORD myPassword来设置密码,若未添加则无密码保护。
  • shell名称设置:在main.h文件中添加#define CLI_NAME shell_name来设置shell名称,若未添加则默认显示#
  • 日志类别设置:在main.h文件中添加#define CLI_ADDITIONAL_LOG_CATEGORIES来定义额外的日志类别,可在运行时使用log命令启用或禁用这些类别。

添加新命令

使用CLI_ADD_CMD(const char *command, const char *help, uint8_t (*exec)(int argc, char *argv[]) )函数添加新命令。其中*command为命令字符串,*help为命令帮助信息,*exec为命令执行函数指针。

客户端配置

确保客户端软件(如Putty)启用“Implicit CR in every LF”设置,以处理行终止符。

特别注意事项

  • 避免在中断请求中打印文本,因为标准stdio库的使用可能导致性能问题。
  • 不建议使用PRINTF_COLOR,建议使用printf(CLI_FONT_RED"My red number: %d."CLI_FONT_DEFAULT, myNumber);这样的语句。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】