开发版STM32F10xC8T6
准备好移植RT-Thread的移植工程
没动手移植过RT-Thread的小伙伴,可以看RT-Thread移植到stm32
我这里是将控制台信息打印到串口的,所以需要确认RT-Thread可以将控制台信息通过串口输出。有疑问的话可以看我之前的文章,RTThread 重定义rt_hw_console_output函数。
控制台能正常打印信息后,如下图所示:

在项目中添加finsh源码
FinSH 源码位于 components/finsh 目录下,如下图所示:

将finsh文件拷贝至工程项目的RT_Thread\components路劲下,如下图所示:

在工程中添加finsh源码,如下图所示:

在rtconfig.h文件中定义finsh相关的宏
/** * FinSH */ /* 定义该宏可开启系统 FinSH 调试工具的使用,未定义则关闭 */#define RT_USING_FINSH/* 开启系统 FinSH 时:将该线程名称定义为 tshell */#define FINSH_THREAD_NAME "tshell"/* 开启系统 FinSH 时:使用历史命令 */#define FINSH_USING_HISTORY/* 开启系统 FinSH 时:对历史命令行数的定义 */#define FINSH_HISTORY_LINES 5/* 开启系统 FinSH 时:定义该宏开启使用 Tab 键,未定义则关闭 */#define FINSH_USING_SYMTAB/* 开启描述功能 */#define FINSH_USING_DESCRIPTION/* 开启系统 FinSH 时:定义该线程的优先级 */#define FINSH_THREAD_PRIORITY 20/* 开启系统 FinSH 时:定义该线程的栈大小 */#define FINSH_THREAD_STACK_SIZE 4096/* 开启系统 FinSH 时:定义命令字符长度 */#define FINSH_CMD_SIZE 80/* 开启系统 FinSH 时:定义该宏开启 MSH 功能 */#define FINSH_USING_MSH/* 开启系统 FinSH 时:开启 MSH 功能时,定义该宏默认使用 MSH 功能 */#define FINSH_USING_MSH_DEFAULT/* 开启系统 FinSH 时:定义该宏,仅使用 MSH 功能 */#define FINSH_USING_MSH_ONLY完成后编译会提示rt_hw_console_getchar函数为定义,如下图所示:
只需要在任意C文件中实现rt_hw_console_getchar函数即可,为了提高代码的可读性,建议将函数放在声明串口(usart.c)的文件中,内容如所示:
/** * Redefine "rt\u hw\u console\u getchar" function to realize finsh function */char rt_hw_console_getchar(void){ int ch = -1; if (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) != RESET) { ch = (char)USART_ReceiveData(DEBUG_USARTx); } else { if (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_ORE) != RESET) { USART_ClearFlag(DEBUG_USARTx, USART_FLAG_TC); } rt_thread_mdelay(10); // 防止finsh线程优先级太高,需要适当挂起一下 } return ch;}完成后如下图所示:
完成以上流程后,编译程序并下载至开发板中,进行测试。这里我使用的控制台软件是MobaXterm,添加串口如下图所示:


下载程序后,控制台便会打印相应的信息,如下图所示:
如上图所示,按回车后,会有相应的反应变说明添加FinSH组件已经成功了。
注意:在使用串口的时候注意串口的接线。
在 RT-Thread 中默认内置了一些 FinSH 命令,在 FinSH 中输入 help 后回车或者直接按下 Tab 键,就可以打印当前系统支持的所有命令。如下图所示:
RT-Thread的FinSH组件具有自动补全功能,只需要输入相应的内容后,按下 Tab 键便会自动补全指令或进行提示。
使用 ps 或者 list_thread 命令来列出系统中的所有线程信息,包括线程优先级、状态、栈的最大使用量等。如下图所示:
4.工作指令可以去官网查看,FinSH 控制台。
示例代码如下所示,代码中创建了 hello 函数,然后通过 MSH_CMD_EXPORT 命令即可将 hello 函数导出到 FinSH 命令列表中。
#include <rtthread.h>void hello_msh(void){ rt_kprintf("hello RT-Thread!\n");}MSH_CMD_EXPORT(hello_msh , say hello to RT-Thread);完成后,在 FinSH 控制台按 tab 键可以看到导出的命令,如下图所示:
运行 hello_msh 命令,运行结果如下图所示:
stm32 移植 rt-thread:https://blog.csdn.net/qq_36958104/article/details/111604665