STM32开发环境构建指南:使用CubeMX与RT-Thread Studio
一、ST官方网站
1、官方网站
ST官网:https://www.st.com.cn/content/st_com/zh.html |
2、芯片手册
https://www.st.com.cn/zh/microcontrollers-microprocessors/stm32f103/products.html |
查找对应MCU数据手册: 或者立创商城最容易获取: |
二、调试工具/驱动
1、ST-Link
ST-LINK驱动(STSW-LINK009):https://www.st.com/zh/development-tools/stsw-link009.html/ |
STM32 ST-LINK Utility是针对STM32全系芯片进行编程(读、写、擦除、选项字)的一款工具; |
软件下载:STSW-LINK004 – STM32 ST-LINK utility – STMicroelectronics |
2、J–Link
JLink_Windows_V754b_x86_64 JLINK驱动,集成了多种调试下载工具,也可以单独用来下载代码,并且效率高于串口下载;支持多种芯片和市面上大多数主流IDE环境,可作为J-link驱动,可独立使用其集成的十几款调试工具,非常方便; |
软件下载:SEGGER – The Embedded Experts – Downloads – J-Link / J-Trace |
配置工程、Target->Production Programming: |
3、CH340驱动
USB转串口芯片; |
驱动下载: Windows:https://www.wch.cn/download/CH341SER_EXE.html/ Linux:https://www.wch.cn/download/CH341SER_LINUX_ZIP.html/ |
4、CP2102驱动
USB转串口芯片; |
驱动下载:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers |
三、CubeMX安装
1、安装Java环境
安装Java:Java Downloads for All Operating Systems 由于 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用,记得选择64位的安装; |
2、安装CubeMX
安装CubeMX:www.st.com/stm32cubemx 只需要更改安装路径,其他默认Next; |
3、安装在线库
在线安装库: Help -> Manage embedded software packages 选择芯片型号,Install安装等待完成既可 |
四、RT-Thread Studio安装
软件下载:rt-thread.org/studio.html |
五、RT-Thread Studio文档
文档中心:https://www.rt-thread.org/document/site/#/ |
六、RT-Thread Studio使用
![]() |
代码视图放大:Ctrl Shift + 代码视图缩小:Ctrl – |
函数自动注释: /*! 回车自动添加 |
七、RT-Thread Studio手册
1、手册入口
2、手册简介
八、SDK管理
SDK包含对应芯片的CMSIS、HAL库、链接文件; |
![]() |
![]() |
九、工作空间创建/导入
1、创建新工作空间
通用项目:只包含基本的SDK,无驱动框架、内核和其他组件; Nano版本:精简版本,无驱动框架,只保留内核和必要组件(无法使用RT-Thread Settings,可使用CubeMX),Flash占用低; 标准版本:全功能版本,驱动框架、内核、物联网及其他组件,Flash占用高。 |
文件->新建->RT-Thread项目,根据需要配置好后点击完成就会生成RT-Thread项目; |
(注意:RT版本和SDK版本不兼容编译会报错) |
![]() |
目录简介: RT-Thread Settings:Studio为了方便开发而提供的工具合集,可以快速配置一些软件包,裸机开发时不需要,所以在轻量化的Nano版本里时无法使用上述的这些功能,初始化工程自动启用FinSH控制台; CubeMX Settings:CubeMX在使用过后会生成一个/cubemx/cubemx.ioc的文件,这就是CubeMX对于该项目生成的可视化配置文件,可以重复配置,重复加载代码。不过需要注意的是,CubeMX在生成代码时,会生成大量文件,其中有一个文件叫做stm32fxx_hal_conf.h,这个文件在最初的工程中也有,不过在driver文件夹中,他会在代码生成时被重命名,更正为stm32fxx_hal_conf_bak.h。在文件编译时只关注最新的stm32fxx_hal_conf.h,也就是在cubemx文件夹下的文件; 二进制:存放二进制的文件,并且特指rtthread.elf文件,该文件是builid整个项目是生成的,也是DeBug和烧录的对象文件; includes:实际上并不存在这样一个文件,属于一种映射,映射到对应的文件,本质上是一些工程生成时编译配置头文件路径; applications:main函数所在的路径和用户需要编写的应用层程序文件; drivers:BSP板级驱动所在的文件夹; debug: 经过编译之后的obj文件和调试相关文件,其中就包括rtthread.elf; libraries:芯片库及其他库文件; linkscript:链接文件; rt-thread:RT Thread内核文件; |
已试验版本: |
RT-Thread Studio 2.2.7 STM32F1: RT:4.0.3 SDK:0.1.9 STM32F4: RT:4.0.5 SDK:0.2.2(0.2.3会报错) |
已创建工程修改调试器: |
![]() |
2、导入已有工作空间
文件->导入: |
|
十、头文件路径添加
对于自定义的文件夹需要添加头文件搜索路径: (如applications/01_common文件夹) |
|
十一、目标文件修改
设置文件格式(RT-Thread Studio编译完项目以后默认输出Bin文件格式,文件名默认为rtthread): |
同时生成hex和bin文件并自动重命名: 若需要同时生成hex和bin文件,在项目构建配置-工具设置中,还是将Output file format修改为默认的Raw binary; 然后在项目构建配置的构建步骤中,添加构建后步骤命令:arm-none-eabi-objcopy -O ihex "${ProjName}.elf" "${ProjName}.hex" 修改调试配置: |
十二、调试输出
1、调试输出
使用rt_kprintf输出; 示例: rt_kprintf("status: %d\n", 1); |
日志等级封装(内部调用rt_kprintf): LOG_D(fmt, …) // 调试 LOG_I(fmt, …) // 信息 LOG_W(fmt, …) // 警告 LOG_E(fmt, …) // 错误 |
2、FinSH控制台
ps:显示当前所有线程的状态 list_device:列出当前所有设备的信息 help:显示帮助信息,列出可用的命令 |
使用MSH_CMD_EXPORT导出命令函数: |
void doCtrl(int argc, char **argv) { if(argc != 3) { rt_kprintf("intput format:doCtrl [DOx] [ON/OFF]\n"); return; } if(!strcmp(argv[1] , "DO1")) { if(!strcmp(argv[2] , "ON")) setDoStatus(DO1, true); else if(!strcmp(argv[2] , "OFF")) setDoStatus(DO1, false); } else if(!strcmp(argv[1] , "DO2")) { if(!strcmp(argv[2] , "ON")) setDoStatus(DO2, true); else if(!strcmp(argv[2] , "OFF")) setDoStatus(DO2, false); } else if(!strcmp(argv[1] , "DO3")) { if(!strcmp(argv[2] , "ON")) setDoStatus(DO3, true); else if(!strcmp(argv[2] , "OFF")) setDoStatus(DO3, false); } else if(!strcmp(argv[1] , "DO4")) { if(!strcmp(argv[2] , "ON")) setDoStatus(DO4, true); else if(!strcmp(argv[2] , "OFF")) setDoStatus(DO4, false); } } MSH_CMD_EXPORT(doCtrl, "[DOx] [ON/OFF]"); |
十三、代码格式化
窗口->首选项: 选中代码,鼠标右键【源】->【格式】 或者: Ctrl+Shift+F |
作者:Xiangfu DING