自学内容网 自学内容网

单片机--串口控制台


前言

本文代码参考了乐鑫官方的控制台代码和之前很早的几个开源代码改编的串口控制台。该代码摒弃了一些复杂的框架,用了简化的东西。


一、串口控制台

最近要开发一个单片机的代码,由于本人之前都是跑操作系统的,就想着能不能把linux上面的控制台整一份到单片机上面。方便封装测试指令,在线串口升级等等。该代码可直接移植使用,stm32系列的直接拿就可以。

二、使用步骤

1.拉取代码

https://gitee.com/benxiongben/console.git

2.封装接口

假设我有一个DHT11传感器,我想封装一个命令,来读取

//获取数据的回调函数
static int DHT11_get(int argc, char **argv)
{
    /* read dht11 data ,please wait 2000ms */
    if (argc != 2)
    {
        return 0;
    }

    if (strcmp(argv[1], READ_CMD))
    {
        return 0;
    }

    float tem = 0, hum = 0;
    DHT11_Data(&tem, &hum);
    Delay_ms(2000);
    PRINTF("\r\n* TEM: %.1f HUM: %.1f \r\n", tem, hum);
    return 1;
}

//注册命令道系统中
void dht11_cmd_register(void)
{
    const cmd_item_t cmd = {
        .command = "dht11",
        .help = "\r\n* Read DHT11 Temperature and humidity. (eg:dht11 -r)\r\n",
        .func = &DHT11_get,
    };

    console_cmd_register((cmd_item_t *)&cmd);
}

//main.c接口
#include "main.h"
#include "usr_uart.h"
#include "DHT11.h"
#include "console.h"
TIM_HandleTypeDef htim1;
UART_HandleTypeDef huart1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM1_Init(void);
static void MX_USART1_UART_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM1_Init();
  MX_USART1_UART_Init();
  HAL_UART_Receive_IT(&huart1, &dataRcvd, 1);
  console_init();
  dht11_cmd_register();
  while (1)
  {
    console_run();
  }
}

3.读入数据

要用SecureCRT这样的工具打开才会有下面这要那个的效果

在这里插入图片描述

4.代码简述&注意事项

4.1关注BSP文件夹

封装什么命令,自己创建文件类似DHT11这样

在这里插入图片描述

4.2注意堆栈大小

因为命令都是通过malloc分配的内存,且通过链表存入系统中。注意,堆和栈一定要给大一点。不然会出问题。

总结

有问题评论区一起交流,觉得不错麻烦给个赞。


原文地址:https://blog.csdn.net/weixin_50074254/article/details/144430414

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!