最近看了几篇嵌入式命令行交互工具的推文,全文介绍和开源托管平台基本一致,感觉就像是在水文章;今天摸鱼的时候移植用了一下,为后续项目开发搭建一个交互,方便后续参数调试和硬件调试,开源链接如下:
https://gitee.com/nrush/nr_micro_shell
| 移植准备
1、去托管平台把源码下下来;
2、准备一个基础工程,实现串口重定义输出:
| 移植源码
1、把核心源码复制到工程中:
2、把命令示例源码复制到工程中:
3、把源码添加到工程中:
4、屏蔽RT-Thread 的头文件:
5、修改输出的末尾行模式:
6、初始化nr_micro_shell:
#include "gd32f10x.h"
#include "stdio.h"
#include "nr_micro_shell.h"
// uart配置
void hal_log_init(void)
{
/* 使GPIO时钟 */
rcu_periph_clock_enable(RCU_GPIOA);
/* 使USART时钟 */
rcu_periph_clock_enable(RCU_USART0);
/* 连接端口到USARTx_Tx */
gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
/* 连接端口到USARTx_Rx */
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
/* USART配置 */
usart_deinit(USART0); /*!< 复位外设USART */
usart_word_length_set(USART0, USART_WL_8BIT); /*!< 配置USART字长 */
usart_stop_bit_set(USART0, USART_STB_1BIT); /*!< 配置USART停止位 */
usart_parity_config(USART0, USART_PM_NONE); /*!< 配置USART奇偶校验 */
usart_baudrate_set(USART0, 115200U); /*!< 配置USART波特率 */
usart_receive_config(USART0, USART_RECEIVE_ENABLE); /*!< USART/UART接收器配置 */
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); /*!< USART/UART发送器配置 */
usart_enable(USART0); /*!< 使能USART */
/*中断管理器使能,并分配优先级*/
nvic_irq_enable(USART0_IRQn, 1, 0);
/*清除中断标志*/
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_IDLE);
/* 使能串口中断 */
usart_interrupt_enable(USART0, USART_INT_RBNE); /*!< 接收不为空中断 */
}
// usart0中断
void USART0_IRQHandler(void)
{
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
{
/* 清除标志位 */
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
/* 接收数据(注意) */
shell(usart_data_receive(USART0));
}
}
//printf重定向函数
int fputc(int ch,FILE *f)
{
usart_data_transmit(USART0, (uint8_t)ch); //发送一字节数据
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); //等待发送完成
return ch;
}
// 外设初始化
void hal_device_init(void)
{
hal_log_init();
/* 初始化 */
shell_init();
}
// 主循环
int main(void)
{
// 设置优先级组
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
// 外设初始化
hal_device_init();
while (1)
{
}
}
7、查看效果:
| 定义指令
1、添加自定义指令代码:
2、查看效果:
| 最终效果
移植成功后就可以在MCU中体验Linux的shell命令那种感觉,注意一定要修改输出的末尾行模式,不然会不能正常使用,来感受一下最终效果:
最终的效果还是不错的,和Linux的体验类似,感兴趣的同学可以移植来体验一下MCU级别的shell命令交互;
--END--
阅读 225
全部0条评论
快来发表一下你的评论吧 !