新建工程
这里以rt thread 5.0以及stm32F411CEU6芯片为例,创建工程
先建一个工作空间
.metadata是建工作空间自己生成的。
这时候,工作空间是空的,没有项目:
新建项目
首先下载RT-thread源文件和芯片支持包:
2023.05.02:5.0版本可能没法识别c文件,可以换4.11
下载rt thread的SDK和stm32芯片支持库:
在资源浏览器看,就是这些内容:
查看磁盘上的文件:
配置cubeMX
先定义外部时钟:
再打开系统RTC时钟:
配置时钟树:
系统默认生成的时钟配置
修改后的时钟配置
配置SYS:
配置USART1:
上面的配置是进行调试时用的
配置项目信息:
点击生成代码就可以自动生成模板文件
cubeMX配置完之后会自动生成下面的文件夹:
现在可以编译一下:
编译完,就有上面的Debug文件夹,文件夹有bin的下载程序:
配置ulog
这个组件做程序调试很有用。
点击图标,打开功能
鼠标右键打开配置项
不然报错:
配置tk_printf
配置segger rtt
开启串口框架:
安装软件包:
保存后,配置rtconfig.h:
原来名称是USART1
在drivers/board.c对segger rtt进行初始化:
extern int rt_hw_jlink_rtt_init(void);
rt_hw_jlink_rtt_init();
这样就能用segger rtt直接向PC输出调试信息,省一个串口
使用示例及msh命令
在applications/main.c中定义:
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <rtthread.h>
#include <sys/time.h>
void my_hello(void)
{
rt_kprintf("hello world\n");
}
MSH_CMD_EXPORT(my_hello, msh cmd test);
int main(void)
{
int count = 1;
//ds3231初始化
//rt_hw_ds3231_init();
while (count++)
{
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
/* 获取时间 */
}
return RT_EOK;
}
这里定义了一个交互命令,在rtt中可以进行使用:
带形参的函数加入MSH命令
在 RT-Thread 中,带参数的函数可以通过在 MSH 命令中使用空格来传递参数。例如,如果你有一个带有两个整数参数的函数 test_func:
static void test_func(int arg1, int arg2)
{
rt_kprintf("The first argument is %d, and the second argument is %d.\n", arg1, arg2);
}
则可以在 MSH 中使用以下方式来调用该函数:
test_func 123 456
在函数名和参数之间必须有一个空格。如果参数是字符串类型,则需要用引号将其括起来。