• STM32H743IIT6学习笔记04——移植LetterShell


    STM32H743IIT6学习笔记

    概述

    CubeMX+FreeRTOS+USART1+LED+LetterShell

    配置

    1. 下载LetterShell源码
    2. 工程结构采用上一章的工程
    3. 将LetterShell中源码加入工程
      在这里插入图片描述
      添加的文件包括:
    • ./src中的所有.c文件
    • ./demo/stm32-freertos中的所有文件
    1. 编译,处理所有编译错误

    添加LetterShell相关代码

    1. 配置shell_port.c中的接口函数
    /**
     * @brief 用户shell写
     * 
     * @param data 数据
     */
    void userShellWrite(char data)
    {
    //    serialTransmit(&debugSerial, (uint8_t *)&data, 1, 0xFF);
    	HAL_UART_Transmit(&huart1, (uint8_t *)&data, 1, 0xFFFF);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    /**
     * @brief 用户shell读
     * 
     * @param data 数据
     * @return char 状态
     */
    signed char userShellRead(char *data)
    {
    	if(HAL_UART_Receive(&huart1, (uint8_t *)data, 1, 0xFFFF) == HAL_OK)
    	{
    		return 0;
    	}
    	else
    	{
    		return -1;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 在main函数中初始化LetterShell接口
    int main(void)
    {
      /* USER CODE BEGIN 1 */
    
      /* USER CODE END 1 */
    
      /* MCU Configuration--------------------------------------------------------*/
    
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
    
      /* USER CODE BEGIN Init */
    
      /* USER CODE END Init */
    
      /* Configure the system clock */
      SystemClock_Config();
    
      /* USER CODE BEGIN SysInit */
    
      /* USER CODE END SysInit */
    
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_USART1_UART_Init();
      /* USER CODE BEGIN 2 */
    
    	userShellInit();			//初始化配置LetterShell
      /* USER CODE END 2 */
    
      /* Init scheduler */
      osKernelInitialize();  /* Call init function for freertos objects (in freertos.c) */
      MX_FREERTOS_Init();
      /* Start scheduler */
      osKernelStart();
    
      /* We should never get here as control is now taken by the scheduler */
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
      }
      /* USER CODE END 3 */
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    1. 在freertos.c中创建ShellHandler线程时加入参数
    /* Create the thread(s) */
      /* creation of defaultTask */
      defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
    
      /* creation of shell_handler */
      shell_handlerHandle = osThreadNew(ShellHandler, (Shell *)&shell, &shell_handler_attributes);
    
      /* creation of LEDBlink */
      LEDBlinkHandle = osThreadNew(LEDHandler, NULL, &LEDBlink_attributes);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 修改ShellHandler函数
    /* USER CODE END Header_ShellHandler */
    void ShellHandler(void *argument)
    {
      /* USER CODE BEGIN ShellHandler */
    	Shell *shell = (Shell *)argument;
    	char data;
      /* Infinite loop */
      for(;;)
      {
    		//printf("ShellHandler\r\n");
    		if(shell->read && (shell->read(&data) == 0))
    		{
    			shellHandler(shell,data);
    		}
      }
      /* USER CODE END ShellHandler */
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 编译,会提示一些关于没有添加LetterShell头文件的错误,添加相关头文件
    2. 编译成功后下载、验证
      在这里插入图片描述

    测试工程链接

    我的测试工程会提示输入密码:Please input password:
    输入lux即可
    测试代码工程链接

  • 相关阅读:
    java uniapp旅游微信小程序的开发hbuilderx
    【C语言 模拟实现memcpy函数、memcpy函数】
    计算机视觉图像处理面试笔试题整理——光流算法
    1.1MQ的基本概念,优劣势介绍及 RabbitMQ简介
    学习笔记 | Excel 2016 零基础教程
    【防作弊】Unity防本地调时间作弊
    容联七陌助力鱼跃医疗升级智能联络中心,让客户服务更“鱼跃”
    【低代码】为客户设计个性化方案:列表篇(客户自己调整排序对齐等)
    基于单片机的高精度心理测试仪设计
    以太坊合并后的节点同步及共识层同步加速(geth+prysum)
  • 原文地址:https://blog.csdn.net/weixin_43739167/article/details/126192745