STM32移植letter-shell

Posted 旧年不在666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32移植letter-shell相关的知识,希望对你有一定的参考价值。

STM32移植letter-shell

一、平台

  • 芯片:STM32F103RDT6
  • 开发工具:stm32cubemx V6.1.2 + keil MDK V5.27.1.0
  • 开发所用的库:HAL库
  • SHELL版本:letter-shell V3.0

二、源码

letter-shell

三、串口配置

  • 采用USART1作为FreeRTOS-CLI终端命令行接口

在这里插入图片描述

  • 开启USART1全局中断,用于接收终端输入

在这里插入图片描述

四、文件移植

  • 拷贝letter-shell源码到工程中

在这里插入图片描述

  • 拷贝接口层文件到工程中

在这里插入图片描述

  • 添加文件到工程中
  • 移植底层串口相关接口
    • shell_port.c内容如下:
    /**
     * @file shell_port.c
     * @author Letter (NevermindZZT@gmail.com)
     * @brief 
     * @version 0.1
     * @date 2019-02-22
     * 
     * @copyright (c) 2019 Letter
     * 
     */
    
    #include "shell_port.h"
    
    Shell shell;
    char shellBuffer[512];
    uint8_t letter_shell_recv_buff = 0;
    
    /**
     * @brief 用户shell写
     * 
     * @param data 数据
     */
    void userShellWrite(char data)
    {
        HAL_UART_Transmit(&huart1, (uint8_t *)&data, 1, 1000);
    }
    
    #if 0
    /**
     * @brief 用户shell读
     * 
     * @param data 数据
     * @return char 状态
     */
    signed char userShellRead(char *data)
    {
        if (serialReceive(&debugSerial, (uint8_t *)data, 1, 0) == 1)
        {
            return 0;
        }
        else
        {
            return -1;
        }
    }
    #endif
    
    /**
     * @brief 用户shell初始化
     * 
     */
    void userShellInit(void)
    {
        HAL_UART_Receive_IT(&huart1, &letter_shell_recv_buff, 1);
        shell.write = userShellWrite;
    
    #if 0
        shell.read = userShellRead;
    #endif
    
        shellInit(&shell, shellBuffer, 512);
    }
    
    /******************************************************************************
     * @Function: letter_shell_recv_irq_handler
     * @Description: letter-shell接收数据处理
     * @Input: void
     * @Output: None
     * @Return: void
     * @Others: 此函数需要在对应的串口接收中断中被调用
     * @param {UART_HandleTypeDef} *huart
    *******************************************************************************/
    void letter_shell_recv_irq_handler(UART_HandleTypeDef *huart)
    {
        shellHandler(&shell, letter_shell_recv_buff);
        HAL_UART_Receive_IT(huart, &letter_shell_recv_buff, 1);
    }
    
    • shell_port.h内容如下:
    /**
     * @file shell_port.h
     * @author Letter (NevermindZZT@gmail.com)
     * @brief 
     * @version 0.1
     * @date 2019-02-22
     * 
     * @copyright (c) 2019 Letter
     * 
     */
    
    #ifndef __SHELL_PORT_H__
    #define __SHELL_PORT_H__
    
    #include "usart.h"
    #include "shell.h"
    
    extern Shell shell;
    
    void userShellInit(void);
    void letter_shell_recv_irq_handler(UART_HandleTypeDef *huart);
    
    #endif
    
  • 以上移植完成后,调用初始化函数即可
letter_shell_init();

五、效果如下

在这里插入图片描述

六、参考文档

letter-shell Source

letter-shell V3.0 docs

以上是关于STM32移植letter-shell的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有 SPL 的 STM32F3 代码移植到 STM32F7

stm32f407移植ucos怎么把ucos放在stm32上?

STM32怎么移植UCLinux-STM32-F0/F1/F2专区

INA219驱动,基于STM32(STM8移植可用)

GD32F103学习笔记——在GD32F103移植STM32F103代码

STM32F1基于STM32CubeMX配置移植dmp库通过串口打印MPU6050数据