1. 环境准备与工具安装在开始STM32CubeMX与RT-Thread的工程搭建前我们需要准备好开发环境。我推荐使用Keil MDK 5.28作为开发IDE搭配STM32CubeMX 6.0.1进行图形化配置。硬件方面一块STM32F103C8T6最小系统板和ST-LINK V2调试器就足够完成大部分基础开发。安装Keil MDK时有个小技巧建议将软件安装在非系统盘比如D盘这样可以避免后期因权限问题导致的编译错误。安装完成后记得通过Pack Installer安装STM32F1系列的设备支持包。如果遇到网络问题无法在线安装可以手动下载.pack文件后离线导入。STM32CubeMX的安装相对简单但需要注意Java运行环境的兼容性。最新版CubeMX已经内置JRE但如果遇到启动问题可以尝试手动安装Java 8。安装完成后建议在Help - Manage Embedded Software Packages中更新所有可用软件包这一步会下载最新的HAL库和中间件支持。2. 基础工程创建与配置打开STM32CubeMX后首先选择芯片型号STM32F103C8Tx。这里有个细节虽然C8T6和C8Tx引脚兼容但选择具体型号可以获得更准确的引脚定义。在Pinout Configuration标签页中我们需要完成几个关键配置SYS配置选择Serial Wire模式启用SWD调试接口RCC配置启用外部高速时钟(HSE)和低速时钟(LSE)时钟树配置输入72MHz后按回车让软件自动计算分频系数我建议在Project Manager标签页中设置工程名为RT-Thread_Demo选择MDK-ARM作为Toolchain/IDE。关键是要勾选Generate peripheral initialization as a pair of .c/.h files这样生成的代码结构更清晰。点击GENERATE CODE生成基础工程后用Keil打开会发现已经包含了LED闪烁的示例代码。3. RT-Thread软件包集成回到STM32CubeMX我们需要添加RT-Thread支持包。在Help - Manage Embedded Software Packages界面中点击From Url添加软件包仓库地址https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc。这个步骤可能会因为网络问题失败多试几次通常就能成功。安装完成后在Software Packs中选择RealThread组件。对于初学者我建议先只选择kernel核心组件等熟悉后再添加shell和device支持。有个重要提示RT-Thread默认使用SysTick作为系统时钟源这与HAL库冲突。解决方法是在中断配置中取消勾选Time base: System tick timer让RT-Thread完全接管SysTick。4. 工程适配与代码修改生成代码后Keil工程中会自动添加RT-Thread的内核代码。但还需要手动修改几处注释掉stm32f1xx_it.c中的HardFault_Handler和SysTick_Handler在main.c中添加RT-Thread头文件/* USER CODE BEGIN Includes */ #include rtthread.h /* USER CODE END Includes */修改board.c中的时钟配置确保RT-Thread能正确获取系统时钟void rt_hw_board_init() { HAL_Init(); SystemClock_Config(); SystemCoreClockUpdate(); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/RT_TICK_PER_SECOND); }5. 创建第一个RT-Thread线程现在我们可以创建真正的RT-Thread任务了。在main.c的USER CODE BEGIN 0区域添加线程函数void led_task(void *arg) { while(1) { rt_thread_mdelay(500); HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); } }然后在USER CODE BEGIN 2区域初始化并启动线程struct rt_thread led_tid; static rt_uint8_t led_stack[512]; rt_err_t result rt_thread_init(led_tid, tled, led_task, RT_NULL, led_stack, sizeof(led_stack), 6, 20); RT_ASSERT(result RT_EOK); rt_thread_startup(led_tid);这里有几个关键参数需要注意led_stack是线程栈空间512字节对于简单任务足够优先级6是中等优先级数字越小优先级越高时间片20表示该线程每次最多运行20个系统时钟周期6. 常见问题排查第一次编译可能会遇到core_cm3.c报错这是因为Keil AC6编译器与旧代码的兼容性问题。解决方法是在Options for Target - C/C - AC6选项中将Language C标准改为C99。如果出现未定义__use_two_region_memory错误需要取消勾选Use MicroLIB选项。下载程序时如果提示No target connected检查以下几点ST-LINK驱动是否安装正确设备管理器应显示为STMicroelectronics STLink dongle开发板是否正常供电测量3.3V电压SWD接口连接是否正确SWDIO-DIO, SWCLK-CLK, GND-GND7. 进阶功能扩展基础工程运行稳定后可以尝试添加更多RT-Thread功能。比如启用FinSH组件实现命令行交互在CubeMX中勾选RT-Thread的shell组件配置一个USART作为控制台接口如USART1修改rtconfig.h中的控制台设置#define RT_CONSOLE_DEVICE_NAME uart1还可以添加软件包中心通过ENV工具管理更多组件。例如添加文件系统支持pkgs --update pkgs --install fal pkgs --install littlefs我在实际项目中发现RT-Thread的设备框架特别好用。比如要添加一个传感器驱动只需要按照框架标准实现open/read/write等操作就能自动集成到系统中。这种模块化设计让后续功能扩展变得非常简单。