感谢ST法国CubeMX团队的支持,RT-Thread Nano现已成功上线ST CubeMX。本文将详细介绍如何快速上手RT-Thread Nano,并指导大家在ST CubeMX上进行项目配置和开发。一起来看看吧!
一、准备工作
软件准备:
STM32 CubeMX_v6.11.0 以上版本
(https://www.st.com.cn/zh/development-tools/stm32cubemx.html)
Keil MDK
(https://www.keil.com/download/product/)
串口工具(推荐使用MobaXterm)
(https://mobaxterm.mobatek.net/download.html)
硬件准备:
STM32 开发板(Cortex-M系列,这里我们以STM32F411RCT6 芯片作为演示)
二、安装 RT-Thread Nano v4.1.1 软件包
首先打开 STM32 CubeMX 软件,进入主页面后找到右侧的嵌入式软件包选项(Install or remove embedded software packages),点击 [ INSALL / REMOVE ] :
在弹出的 Embedded Software Packages Manager 界面的上方导航栏中找到 RT-Thread 厂商 —> [ RealThread ] ,展开 X-CUBE-RT-Thread_Nano ,勾选中 RT-Thread Software Components (Size: 5.50 MB) ,并且点击 Install :
同意条款并点击 Finish :
注:此处如果没有找到 RealThread 厂商选项,可点击下方 Refresh 按钮更新资源包索引后开始下载,下载成功后 RT-Thread Software Components 4.1.1 呈深绿色方形显示,关闭窗口后开始工程创建。
三、创建 STM32 CubeMX 项目工程
创建工程可以选择基于 MCU 或 Board,这里我们以创建 MCU 作为教学演示,点击 ACCESS TO MCU SELECTOR ,在左上角的 Commercial Part Number 中输入芯片型号,这里我的芯片型号为 STM32F411RCT6 ,选中对应MCU后点击右上角 Start Project 。
四、芯片配置
首先勾选 RT-Thread Nano v4.1.1 软件包,依次点击 Software Packs-> Select Components,并找到 RealThread.X-CUBE-RT-Thread_Nano 4.1.1 一栏,根据开发需求勾选配置项,其中 kernel 和 libcpu 为必选项,这里我们选择 kernel、shell 和 ibcpu 三个配置项后点击 OK:
在左侧导航栏中找到 RT-Thread Nano 软件包,同时在 Mode 一栏中使能 RTOS RT-Thread,接着我们在 Parameter Settings 中进行内核配置,这一步我们保持默认即可,同时往下翻找到 Finsh Configuration,使能 Finsh组件:
为了给 Finsh 组件提供串口设备,需要我们勾选一个串口,点击左侧功能栏 Connectivity —> USART1,设置串口模式为异步:
选择 System Core —>SYS,将 Debug 选项配置为 Serial Wire:
在 RT-Thread 中重新定义了`HardFault_Handler`, `PendSV_Handler`, `SysTick_Handler`中断函数。为避免重复定义,在生成项目之前,请取消选择中断配置中的三个中断函数(对应注释了的选项`Hard fault interrupt`、`Pendable request`、`Time base: System tick timer`)
点击 Project Manager,填写项目名称,并修改 Toolchain / IDE 为 MDK-ARM,最后生成工程文件(在点击生成工程后会提示 RTOS 时基源的修改警告,点击 Yes 即可)
五、工程配置
1.概述
打开 MDK 工程后,工程目录下会生成几个 Middlewares Group,如下所示:
2.Finsh组件配置
打开 Middlewares/RT-Thread/RTOS/kernel 目录下的 board.c 文件,修改 uart_init() 函数中串口号,该串口号默认为 USART1,需要根据实际在 CubeMX 中配置的串口进行修改
3.主函数配置
在 main.c 中包含头文件 `#include`,同时在 main 函数的 while(1) 中定义延时,以便 Finsh 和其他线程得到系统调度:
4.观察现象
在 MDK 中烧录程序后打开串口助手,复位开发板查看终端运行情况:
到这里,RT-Thread Nano v4.1.1 就成功运行起来了。
六、内存堆初始化
系统内存堆的初始化是通过 board.c 中的 rt_hw_board_init() 函数实现的,如果需要启用内存堆可通过宏定义 RT_USING_HEAP 实现,RT-Thread Nano 默认不开启内存堆功能。一旦 RT_USING_HEAP 被启用,系统会默认使用一个数组作为堆,堆的起始地址和结束地址作为参数传递给堆初始化函数 rt_system_heap_init(),该函数在 rt_hw_board_init() 中调用。
如果不希望使用数组作为动态内存堆,可以使用 RAM 的 ZI 段的末尾作为 HEAP 的起始地址(需要确保它与链接脚本对应上),并使用RAM的结束地址作为 HEAP 的结束地址,代码实现如下所示:
七、其他说明
RT-Thread 的线程创建、信号量、互斥锁的使用需要配置内存管理机制,RT-Thread Nano 允许配置使用小内存管理算法,如需在 Cubemx 中进行相关配置,请打开工程的 CubeMX 执行文件,使能如下选项:
> 注意:在使用RT-Thread Nano v4.1.1 CubeMX软件包时请阅读各个配置项的参数说明,部分配置项存在依赖关系,需根据说明进行配置。
具体的RT-Thread nano v4.1.1配置使用教程可参考该视频:
想要在RT-Thread平台或社区投放内容?或想参与相关直播活动及赛事?RT-Thread已开放对接窗口,请通过邮件与我们取得联系,期待合作!