RT-Thread论坛
直播中

名士流

9年用户 984经验值
私信 关注
[问答]

RT-Thread Nano源码bsp工程无法正常使用msh,输入msh命令无响应怎么解决?

最近想使用RT-Thread-Nano进行开发,在官网下载了RT-Thread Nano的源码,发现源码内有一些提供好的工程,便找了一个支持msh的工程进行调试,但是发现工程基础配置存在问题。
在./bsp/STM32f103-msh目录下的工程存在配置问题
1.png

回帖(1)

刘燕

2025-6-18 17:51:58

针对RT-Thread Nano源码中stm32f103-msh工程无法使用msh的问题,以下是系统性的解决步骤:


1. 验证基础配置




  • 检查串口配置
    打开 board.h 确认串口引脚定义:


     #define BSP_USING_UART1
    #define BSP_UART1_TX_PIN       "PA9"
    #define BSP_UART1_RX_PIN       "PA10"

    确保与硬件连接一致(如使用USB转TTL连接PA9/PA10)。




  • 确认控制台设备
    rtconfig.h 中检查以下配置:


     #define RT_USING_CONSOLE
    #define RT_CONSOLE_DEVICE_NAME "uart1"



2. 排查Finsh组件



  • 启用Finsh/MSH
    rtconfig.h 中确保:
     #define RT_USING_FINSH
    #define FINSH_USING_MSH
    #define FINSH_USING_MSH_DEFAULT

  • 调整栈大小
    rtconfig.h 中增加线程栈大小:
     #define FINSH_THREAD_STACK_SIZE 512  // 建议增加到1024或更大


3. 串口驱动修正



  • 检查串口中断处理
    drv_usart.c 中添加接收中断支持:
     static void stm32_uart_isr(struct rt_serial_device *serial)
    {
         /* 添加接收数据处理逻辑 */
    }

    在初始化函数中使能接收中断:


     static int stm32_uart_init(void)
    {
         // 初始化后添加
         HAL_UART_Receive_IT(&uart_config->handle, &data, 1);
    }


4. 系统时钟与定时器



  • 确认系统时钟频率
    system_stm32f1xx.c 中检查 SystemCoreClock 是否为72MHz(STM32F103)。

  • 启用SysTick
    board.crt_hw_board_init() 中初始化硬件定时器:
     rt_hw_systick_init();


5. Shell线程阻塞检查



  • 禁用看门狗
    临时注释看门狗初始化(若存在):
     // IWDG_Init();  // 先禁用


6. 构建与调试



  • 清理并重新编译
     scons -c
    scons

  • 验证串口输出
    main() 中添加测试输出:
     rt_kprintf("RT-Thread Started!n");


7. 终极调试手段



  • 捕获系统日志
    启用日志跟踪系统行为:
     #define RT_DEBUG
    #define RT_DEBUG_LOG


8. 备选方案


若问题持续:



  • 更换BSP:尝试其他官方BSP(如 stm32f103-fire-arbitrary)。

  • RT-Thread Studio:使用IDE重新生成Nano工程。




关键检查点总结



  1. 串口配置与硬件匹配(引脚、波特率)

  2. Finsh组件开关及线程栈大小

  3. 串口接收中断使能

  4. 系统时钟与SysTick初始化

  5. 排除外设(如看门狗)干扰

  6. 通过 rt_kprintf 验证基础功能


按此流程逐步排查,通常能解决msh无响应问题。核心在于确保串口收发驱动完整、系统时钟准确、Finsh配置正确。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分