第4章 STM32 nr_micro_shell配置和测试



前言

硬件的配置由前面的工程递增,会根据目的修改部分控制代码
由于本人较懒,记录主要是过程,原理性的东西网上一大把,我就不赘述了,由于懒,主要由图片和代码加少量文字组成


一、nr_micro_shell简介和下载

nr_micro_shell是轻量级的shell,代码和实现与uboot的shell非常相似,本文中下载的版本为当前最新版本2.0
下载地址https://gitee.com/nrush/nr_micro_shell
下载完成后将src下的nr_micro_shell_core.cnr_micro_shell_cmds.c拷贝到Src内待用;将inc下的nr_micro_shell.h.hexamples\simulator\下的nr_micro_shell_port.h拷贝到Inc内待用
keil工程内添加对应文件
alt text

二、代码修改和测试

nr_micro_shell_port.h的两个宏定义注释,否则由于外部代码依赖无法编译

///#define NR_SHELL_CMD_TIME /* Enable time cmd */
......
///#define NR_SHELL_DEBUG /* Enable debug logging functionality for the shell */

freertos.cStartDefaultTask函数里对shell初始化,关闭之前打印的干扰

#include "nr_micro_shell.h"
......
  /* USER CODE BEGIN StartDefaultTask */
	shell_init();
  /* Infinite loop */
  for(;;)
  {
    HAL_GPIO_TogglePin(GPIOF,LED0_Pin);
		//printf("this is DefaultTask\r\n");
		osDelay(1000);
  }
  /* USER CODE END StartDefaultTask */

修改usart.c中串口接收的中断回调函数

#include "nr_micro_shell.h"
......
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  UNUSED(huart);
#if 0
	if(Uart1_Rx_Cnt >= 255)  //溢出判断
	{
		Uart1_Rx_Cnt = 0;
		memset(RxBuffer,0x00,sizeof(RxBuffer));
		HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF); 	  
	}
	else
	{
		RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存
	
		if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位
		{
			HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //回环
      while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
			Uart1_Rx_Cnt = 0;
			memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
		}
	}
#else
	shell(aRxBuffer);//shell
#endif
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
}

连接好烧录器编译并烧录

可以观察到shell的打印和help指令的打印
alt text
要编写自己的指令参照nr_micro_shell_cmds.c中的指令格式即可(一个入口函数、在cmd_table里添加对于函数的结构体成员)


总结

主要介绍了STM32 nr_micro_shell的配置和测试

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值