[技术相关] 【SWDM-QFP100-34SVEA3测评】+移植nr_micro_shell

[复制链接]
 楼主| 发表于 2023-5-23 14:53 | 显示全部楼层 |阅读模式
#申请原创#
本文移植nr_micro_shell,通过串口输入命令,与开发板交互。
nr_micro_shell的项目地址:https://github.com/Nrusher/nr_micro_shell,最新的版本是1.0.2,也正是本文移植的版本。

在移植之前首先要保证串口收发正常,本文使用串口轮询发送和中断接收。

1、nr_micro_shell源码结构
nr-0.png
src文件夹是源码,
inc文件夹是头文件,
examples文件夹是示例代码:
nr_micro_shell_commands.c是裸机情况下添加命令示例代码,
nr_micro_shell_thread.c是rtthread情况下添加命令示例代码,
simulator.c是启动nr_micro_shell的示例代码

2、将nr_micro_shell代码添加进工程
nr-1.png

3、编译报错
nr-2.png
我们这里是裸机移植,因此需要屏蔽掉nr_micro_shell_config.h文件中的两个rt-thread头文件,屏蔽掉之后即可编译成功。

4、配置
在nr_micro_shell_config.h头文件中,我们可以配置nr_micro_shell。
nr-3.png
NR_SHELL_USER_NAME,是用户名称,
NR_SHELL_END_OF_LINE,是一行结束符,
shell_printf(fmt, args...) ,是nr_micro_shell的打印函数,这里直接使用printf即可,
ansi_show_char(x) ,是串口发送一个字符的函数,需要配置。



5、串口相关代码
  1. void SerialInit(void)
  2. {
  3.         UART_InitStructure UART_initStruct;
  4.        
  5.         PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1);        //GPIOM.0配置为UART0输入引脚
  6.         PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0);        //GPIOM.1配置为UART0输出引脚
  7.        
  8.         UART_initStruct.Baudrate = 115200;
  9.         UART_initStruct.DataBits = UART_DATA_8BIT;
  10.         UART_initStruct.Parity = UART_PARITY_NONE;
  11.         UART_initStruct.StopBits = UART_STOP_1BIT;
  12.         UART_initStruct.RXThreshold = 1;
  13.         UART_initStruct.RXThresholdIEn = 1;
  14.         UART_initStruct.TXThreshold = 1;
  15.         UART_initStruct.TXThresholdIEn = 0;

  16.         UART_Init(UART0, &UART_initStruct);
  17.         UART_Open(UART0);
  18. }

6、nr_micro_shell接收字符
  1. void UART0_Handler(void)
  2. {
  3.         uint32_t chr;
  4.        
  5.         if(UART_INTStat(UART0, UART_IT_RX_THR ))
  6. {
  7.                 while(UART_IsRXFIFOEmpty(UART0) == 0)
  8.                 {
  9.                         if(UART_ReadByte(UART0, &chr) == 0)
  10.                         {
  11. shell(chr);
  12.                         }
在串口中断中接收字符,并传给nr_micro_shell处理。
7、初始化并启动nr_micro_shell
调用  shell_init()函数即可,这是一个宏定义,里面其实是有两个函数的
nr-4.png

8、测试
nr-5.png





发表于 2023-6-8 13:20 | 显示全部楼层
nr_micro_shell正是针对资源较少的MCU编写的基本命令行工具
发表于 2023-6-8 14:07 | 显示全部楼层
nr_micro_shell为用户提供自定义命令的标准函数原型,只需要按照命令编写命令函数,并注册命令函数,即可使用命令。
发表于 2023-6-8 14:27 | 显示全部楼层
当串口终端支持ANSI(如Hypertrm终端)时,其不仅支持基本的命令行交互,还提供Tab键命令补全,查询历史命令,方向键移动光标修改功能
发表于 2023-6-8 14:48 | 显示全部楼层
nr_micro_shell占用资源少,使用简单,灵活方便
发表于 2023-6-8 14:52 | 显示全部楼层
nr_micro_shell在使用过程只涉及两个shell_init()和shell()两个函数,无论是使用RTOS还是裸机都可以方便的应用该工具,不需要额外的编码工作。
发表于 2023-6-8 15:26 | 显示全部楼层
本项目移植的源平台和目标平台是什么呢
发表于 2023-6-8 15:49 | 显示全部楼层
请问为了使用这个shell,我们需要下载什么工具呢
 楼主| 发表于 2023-6-8 16:22 | 显示全部楼层
wowu 发表于 2023-6-8 15:26
本项目移植的源平台和目标平台是什么呢

目标平台就是本系列评测的开发板,具体mcu就是SWM34SVE
 楼主| 发表于 2023-6-8 16:23 | 显示全部楼层
xiaoqizi 发表于 2023-6-8 15:49
请问为了使用这个shell,我们需要下载什么工具呢

SecureCRT就可以用了
发表于 2023-6-12 08:51 来自手机 | 显示全部楼层
这是国外开源的吗?
发表于 2023-6-12 19:05 来自手机 | 显示全部楼层
不错,这个是基于回显机制嘛?
 楼主| 发表于 2023-6-14 08:33 | 显示全部楼层
wyjie 发表于 2023-6-13 22:01
这是国外开源的吗?

反正是开源在github的,至于那个国家的,就没注意了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32/LoRa物联网:304350312

65

主题

785

帖子

11

粉丝
快速回复 返回顶部 返回列表