使用STM32F407VET6移植RT-Thread GitHub源码(基于RTT官方keil移植教程)

本文档提供了一个详细的步骤,指导如何在STM32F407VET6上移植RT-Thread操作系统。从下载源码、配置CubeMX、修改BSP和构建工程,到生成MDK5工程并进行简单的信号量同步测试,涵盖了整个移植过程的关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


相当于官方教程的简单翻新,凑活看吧

例程实现

  1. 复制通用模板
  2. 使用 CubeMX 工具配置工程
  3. 修改 BSP 中的 Kconfig 文件
  4. 修改构建工程相关文件
  5. 重新生成工程

1.下载RT-Thread 源码

下载源码: RT-Thread GitHub源码.
在这里插入图片描述

2.复制通用模板

复制f4系列的通用模板
在这里插入图片描述
修改名称放在指定目录下(放在这个目录下不用修改后续的Kconfig中RTT源码所在的根目录)
在这里插入图片描述

3.CubeMX配置

打开: CubeMX.(一款图形化设置STM32工程软件)
在这里插入图片描述
CubeMX中打开RCC,SYS,USART1
在这里插入图片描述
配置时钟频率,基本默认就行
在这里插入图片描述
文件路径默认就行
在这里插入图片描述
生成代码
在这里插入图片描述

4.文件修改

board/board.c 文件中存放了函数 SystemClock_Config() ,该函数负责初始化系统时钟。当使用 CubeMX 工具对系统时钟重新配置的时候,需要将board/CubeMX_Config/Src/main.c文件中的 SystemClock_Config()复制到 board/board.c 中 。
在这里插入图片描述
board/board.h 修改flash与ram的值
在这里插入图片描述
修改 board/Kconfig :- 芯片型号和系列 - BSP 上的外设支持选项
在这里插入图片描述
修改link.sct 中flash与ram的值
在这里插入图片描述
修改如下
在这里插入图片描述
board/SConscript 脚本决定 MDK/IAR 工程的生成以及编译过程中要添加文件。

在这一步中需要修改芯片型号以及芯片启动文件的地址,修改内容如下图所示:
在这里插入图片描述

5.keil模板文件修改

打开keil模板工程文件
在这里插入图片描述
配置芯片型号及下载器
在这里插入图片描述
在这里插入图片描述

6.env工具生成mdk5工程

在对应目录中使用env工具
在这里插入图片描述
在 env 界面输入命令 menuconfig 对工程进行配置,并生成新的 rtconfig.h 文件。如下图所示:
在这里插入图片描述
打开外设
在这里插入图片描述
生成mdk5工程
在这里插入图片描述

简单测试

信号量同步测试,线程1实现1s点亮一下led灯,线程2接受线程1 500ms后发送的信号量关闭led灯。

/****************************************************变量定义*****************************************************/
static rt_thread_t led_thread;
static rt_thread_t usart2_recv_thread = RT_NULL;

/****************************************************线程入口函数声明*****************************************************/
void led_threa_entry(void *parameter);
void usart2_recv_thread_entry(void *parameter);


/****************************************************线程初始化声明*****************************************************/

void TaskInit(void)
{
   usart2_recv_sem=rt_sem_create("usart2_recv_sem",//串口2信号量
									0, 
										RT_IPC_FLAG_FIFO);
	
	if(usart2_recv_sem!= RT_NULL)
	{rt_kprintf("信号量usart2_recv_sem创建成功\n\n");
	}

	
	led_thread = rt_thread_create("ledThread",//创建线程led
                             led_threa_entry,
                             RT_NULL,
                             256,
                             2,
                             10);
	if(led_thread != RT_NULL)
	{
	   rt_thread_startup(led_thread);
	}
usart2_recv_thread= rt_thread_create("usart2_recv_thread",//创建线程usart
                             usart2_recv_thread_entry,
                             RT_NULL,
                             512,
                             2,
                             10);
	if(usart2_recv_thread != RT_NULL)
	{
	   rt_thread_startup(usart2_recv_thread);
	}
	
	
}
MSH_CMD_EXPORT(TaskInit, show RT-Thread version information);
/****************************************************入口函数编写*****************************************************/

void led_threa_entry(void *parameter)
{
while(1)
{
	rt_pin_write(LED0_PIN, PIN_HIGH);rt_pin_write(LED1_PIN, PIN_LOW);
	rt_thread_mdelay(500);
	rt_kprintf("System Running time :%d s\n",rt_tick_get()/RT_TICK_PER_SECOND);
rt_sem_release(usart2_recv_sem);rt_thread_mdelay(500);
}
}

void usart2_recv_thread_entry(void *parameter)
	{
		rt_err_t uwRet = RT_EOK;
		
while(1)
{
uwRet=rt_sem_take(usart2_recv_sem, RT_WAITING_FOREVER);
	if(RT_EOK==uwRet)
	{
	rt_pin_write(LED1_PIN, PIN_HIGH);rt_pin_write(LED0_PIN, PIN_LOW);
	rt_thread_mdelay(500);
	}
	
}
}

在主函数中调用开启这两个线程。

int main(void)
{	
	TaskInit();
    while (1)
    {
        rt_thread_mdelay(500);
    }   
}
### STM32F407VET6 开发板 RT-Thread MSH 使用教程 #### 配置开发环境 为了在 STM32F407VET6使用 RT-Thread 的 MSH 命令行工具,首先需要设置合适的开发环境。这通常涉及以下几个方面: 1. **BSP 文件准备** 可以通过复制一个相似的 BSP 来快速建立开发环境[^1]。 2. **串口配置调整** 利用 STM32CubeMX 工具来修改 UART1 的引脚分配,确保其能够正确连接到 RT-Thread 的 MSH 控制台接口[^2]。 #### 编译并烧录程序 完成上述准备工作之后,编译项目并将固件下载至目标硬件平台即可启动 RT-Thread 操作系统及其自带的 MSH 功能模块。 #### 测试 MSH 功能 当一切就绪后,在电脑端打开终端软件(如 PuTTY 或 SecureCRT),选择对应的 COM 端口号以及波特率(通常是 115200 bps)。此时应该可以在屏幕上看到 RT-Thread 启动信息,并进入到了 MSH 提示符状态 `>` 下面可以尝试输入一些简单的命令来进行测试验证。 ```bash > help # 显示可用命令列表 > version # 查看当前运行版本号 > ps # 展示正在执行的任务情况 ``` 这些基础指令可以帮助确认 MSH 是否正常工作。如果想要进一步探索更多高级特性,则可以根据实际需求查阅官方文档获取更详细的指导说明。 #### 示例代码展示如何初始化 SPI Flash 并读取 ID 下面给出了一段用于初始化外部 SPI Flash 设备并与之交互的小例子,虽然这不是直接与 MSH 关联的部分,但对于理解整个系统的运作机制仍然很有帮助。 ```c #include "rtthread.h" #include "spi_flash_sfud.h" static int rt_hw_spi_flash_init(void) { // 将指定SPI总线上的设备挂载为W25Q系列Flash存储器 rt_err_t ree = rt_hw_spi_device_attach(SPI_BUS_NAME, W25Q_SPI_DEVICE_NAME, GPIOE, GPIO_PIN_1); /* 使用 SFUD 探测 spi10 从设备,并将 spi10 连接的 flash 初始化为块设备 */ if (RT_NULL == rt_sfud_flash_probe(W25Q_FLASH_NAME, W25Q_SPI_DEVICE_NAME)) { return -RT_ERROR; } return ree; } INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init); // 定义函数用来发送读ID命令给W25X器件并通过SPI接收返回的数据 static void spi_w25q_sample(void) { struct rt_spi_device *spi_dev_w25q; rt_uint8_t w25x_read_id = 0x90; // 发送READ_ID指令 rt_uint8_t id[5]; // 存储收到的身份识别码 memset(id, 0, sizeof(id)); // ... (此处省略具体实现细节) } MSH_CMD_EXPORT(spi_w25q_sample, sample of read the JEDEC ID from a connected SPI NOR FLASH chip); ``` 这段代码展示了怎样把一块特定型号的 SPI Flash 添加成为 RT-Thread 中的一个可访问资源,并提供了一个简单的方法去查询该芯片内部预设好的唯一标识符——JEDEC ID。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛Jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值