网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-02-06 15:00

人气:

作者:admin

标签: USART串口  嵌入式  RT-Thread 

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

| 移植准备

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命令交互。





审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信