#申请原创#
本文移植nr_micro_shell,通过串口输入命令,与开发板交互。
nr_micro_shell的项目地址:https://github.com/Nrusher/nr_micro_shell,最新的版本是1.0.2,也正是本文移植的版本。
在移植之前首先要保证串口收发正常,本文使用串口轮询发送和中断接收。
1、nr_micro_shell源码结构
src文件夹是源码,
inc文件夹是头文件,
examples文件夹是示例代码:
nr_micro_shell_commands.c是裸机情况下添加命令示例代码,
nr_micro_shell_thread.c是rtthread情况下添加命令示例代码,
simulator.c是启动nr_micro_shell的示例代码。
2、将nr_micro_shell代码添加进工程
3、编译报错
我们这里是裸机移植,因此需要屏蔽掉nr_micro_shell_config.h文件中的两个rt-thread头文件,屏蔽掉之后即可编译成功。
4、配置
在nr_micro_shell_config.h头文件中,我们可以配置nr_micro_shell。
NR_SHELL_USER_NAME,是用户名称,
NR_SHELL_END_OF_LINE,是一行结束符,
shell_printf(fmt, args...) ,是nr_micro_shell的打印函数,这里直接使用printf即可,
ansi_show_char(x) ,是串口发送一个字符的函数,需要配置。
5、串口相关代码
void SerialInit(void)
{
UART_InitStructure UART_initStruct;
PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1); //GPIOM.0配置为UART0输入引脚
PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0); //GPIOM.1配置为UART0输出引脚
UART_initStruct.Baudrate = 115200;
UART_initStruct.DataBits = UART_DATA_8BIT;
UART_initStruct.Parity = UART_PARITY_NONE;
UART_initStruct.StopBits = UART_STOP_1BIT;
UART_initStruct.RXThreshold = 1;
UART_initStruct.RXThresholdIEn = 1;
UART_initStruct.TXThreshold = 1;
UART_initStruct.TXThresholdIEn = 0;
UART_Init(UART0, &UART_initStruct);
UART_Open(UART0);
}
6、nr_micro_shell接收字符
void UART0_Handler(void)
{
uint32_t chr;
if(UART_INTStat(UART0, UART_IT_RX_THR ))
{
while(UART_IsRXFIFOEmpty(UART0) == 0)
{
if(UART_ReadByte(UART0, &chr) == 0)
{
shell(chr);
}
在串口中断中接收字符,并传给nr_micro_shell处理。
7、初始化并启动nr_micro_shell
调用 shell_init()函数即可,这是一个宏定义,里面其实是有两个函数的
8、测试
|