0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式命令行交互工具移植过程

玩转单片机 来源:玩转单片机 2023-02-06 15:00 次阅读

| 移植准备

1、去托管平台把源码下下来;

2、准备一个基础工程,实现串口重定义输出:

9295c4c8-a3f8-11ed-bfe3-dac502259ad0.png

|移植源码

1、把核心源码复制到工程中:

92e87808-a3f8-11ed-bfe3-dac502259ad0.png

2、把命令示例源码复制到工程中:

9323ac34-a3f8-11ed-bfe3-dac502259ad0.png

3、把源码添加到工程中:

937912e6-a3f8-11ed-bfe3-dac502259ad0.png

4、屏蔽RT-Thread 的头文件:

93aa3dd0-a3f8-11ed-bfe3-dac502259ad0.png

5、修改输出的末尾行模式:

93e65b12-a3f8-11ed-bfe3-dac502259ad0.png

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、查看效果:

9422aa72-a3f8-11ed-bfe3-dac502259ad0.png

| 定义指令

1、添加自定义指令代码:

9464594a-a3f8-11ed-bfe3-dac502259ad0.png

2、查看效果:

949278d4-a3f8-11ed-bfe3-dac502259ad0.png

| 最终效果

移植成功后就可以在MCU中体验Linux的shell命令那种感觉,注意一定要修改输出的末尾行模式,不然会不能正常使用,来感受一下最终效果:

94c8a9ae-a3f8-11ed-bfe3-dac502259ad0.png

最终的效果还是不错的,和Linux的体验类似,感兴趣的同学可以移植来体验一下MCU级别的shell命令交互。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5056

    文章

    18955

    浏览量

    301683
  • 串口中断
    +关注

    关注

    0

    文章

    64

    浏览量

    13844
  • RT-Thread
    +关注

    关注

    31

    文章

    1257

    浏览量

    39815
  • USART串口
    +关注

    关注

    0

    文章

    32

    浏览量

    6791

原文标题:通俗|嵌入式命令行交互工具

文章出处:【微信号:玩转单片机,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在STM32实现命令行

    工作中的开发环境都是基于linux命令行交互,作为命令行的重度使用者,玩单片机也要使用命令行工具,百度了一些
    发表于 12-09 11:32 2232次阅读

    Linux命令行的基本使用

    嵌入式Linux开发环境的构建,Linux命令行的基本使用,VI、GCC、Makefile基本工具的使用,交叉开发环境的使用。学习条件: 1.C语言编程基础
    发表于 11-05 09:08

    Linux命令行怎么使用

    嵌入式Linux开发环境的构建,Linux命令行的基本使用,VI、GCC、Makefile基本工具的使用,交叉开发环境的使用。学习条件: 1.C语言编程基础
    发表于 12-16 07:46

    为什么需要使用命令行调试程序?

    为什么需要使用命令行调试程序?通过嵌入式开发中通过命令行调试程序的过程是怎样的?
    发表于 12-24 06:44

    在单片机上实现shell命令行交互的方法

    文章发表于我的个人微信公众号:嵌入式软件那些事公众号会定期分享一些嵌入式软件开发相关的技术经验,涉及嵌入式Linux、STM32、RTOS等,希望对大家有所帮助!如何在单片机上实现shell
    发表于 01-12 07:33

    Xilinx软件命令行工具:XSCT开发和调试

    了解如何使用XSCT,Xilinx软件命令行工具进行开发和调试。 该视频演示了XSCT如何充当Xilinx SDK的命令行控制台。
    的头像 发表于 11-21 06:02 1.4w次阅读

    Xilinx软件命令行工具进行开发和调试

    了解如何使用XSCT,Xilinx软件命令行工具进行开发和调试。 该视频演示了XSCT如何充当Xilinx SDK的命令行控制台。
    的头像 发表于 11-22 06:53 6583次阅读

    Git常见的误区和命令行工具等综述

    Git常见的误区和命令行工具等综述
    发表于 08-31 09:51 0次下载

    使用串口登录嵌入式Linux设备命令行的方法

    使用串口登录嵌入式Linux设备命令行的方法如下:举例如下:平台:AT91SAM9G45OS: linux-2.6.66交叉编译器:arm-linux-gcc ,版本:3.4.1用到的命令
    发表于 11-01 16:57 10次下载
    使用串口登录<b class='flag-5'>嵌入式</b>Linux设备<b class='flag-5'>命令行</b>的方法

    学习笔记(02):嵌入式Linux开发基础-shell命令使用

    嵌入式Linux开发环境的构建,Linux命令行的基本使用,VI、GCC、Makefile基本工具的使用,交叉开发环境的使用。学习条件: 1.C语言编程基础
    发表于 11-01 18:00 14次下载
    学习笔记(02):<b class='flag-5'>嵌入式</b>Linux开发基础-shell<b class='flag-5'>命令</b>使用

    mini shell命令行调试工具(单片机、c语言)

    @mini shell命令行调试工具介绍Mini shell 命令行调试工具(单片机、c语言)Mini shell是一个特别适合低内存的单片机上使用的一个
    发表于 11-29 10:21 9次下载
    mini shell<b class='flag-5'>命令行</b>调试<b class='flag-5'>工具</b>(单片机、c语言)

    Golang基于flag库实现一个命令行工具

    Golang 标准库中的 flag 库提供了解析命令行选项的能力,我们可以基于此来开发命令行工具
    的头像 发表于 10-28 09:26 1245次阅读

    新的开源命令行工具west

    电子发烧友网站提供《新的开源命令行工具west.zip》资料免费下载
    发表于 11-11 09:25 0次下载
    新的开源<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>west

    一个开源MCU级的命令行交互组件

    一个开源MCU级命令行交互组件~
    的头像 发表于 10-17 16:26 391次阅读
    一个开源MCU级的<b class='flag-5'>命令行</b><b class='flag-5'>交互</b>组件

    单片机上如何做shell命令行交互

    做过嵌入式Linux开发或使用过桌面Linux系统的童鞋们,肯定对shell命令交互印象比较深刻,然而我们大多数搞嵌入式软件开发的码农都是基于单片机,比如51、STM32等进行开发的,
    的头像 发表于 11-01 15:16 1251次阅读