1. 环境准备与芯片配置
在开始移植RT-Thread Nano之前,我们需要先准备好开发环境。我使用的是Keil MDK 5.38版本,芯片是STM32F103C8T6,也就是我们常说的"蓝 pill"板。这个芯片有64KB Flash和20KB RAM,对于运行RT-Thread Nano来说完全足够。
首先需要确保你已经安装了STM32F1系列的Device Pack。如果没有安装,可以在Keil的Pack Installer中搜索"STM32F1"并安装。我建议使用STM32CubeMX生成一个基础的工程模板,这样能确保所有外设的初始化代码都是正确的。不过如果你喜欢手动配置,也可以直接从空工程开始。
芯片配置有几个关键点需要注意。STM32F103C8T6属于中等容量产品,所以在Device中要选择STM32F103C8,而不是HD版本的大容量型号。这个细节很重要,因为不同容量的芯片其启动文件和库函数配置都有差异。
在C/C++选项卡的Define中,要确保定义了STM32F10X_MD和USE_STDPERIPH_DRIVER。这两个宏定义决定了编译器使用哪个型号的库文件。我曾经在这里踩过坑,错误地定义了HD版本,导致程序运行时出现各种奇怪的问题。
调试器的配置也很重要。我使用的是ST-Link V2,在Debug选项卡中选择ST-Link Debugger,然后在Settings中确认SWD接口正确识别。如果调试时卡在启动文件里出不来,很可能是这里的配置有问题。
2. 创建基础工程
我建议从一个最简单的LED闪烁程序开始移植。这样能确保底层硬件驱动是正常的,后续移植RTOS时如果出现问题,可以排除硬件驱动的问题。
先创建一个新的Keil工程,选择STM32F103C8作为目标芯片。然后添加启动文件,这里要特别注意:STM32F103C8T6需要使用startup_stm32f10x_md.s这个启动文件,而不是hd版本。如果你用的是标准外设库,需要从库文件中找到正确的启动文件。
接下来配置系统时钟。STM32F103C8T6最高可以运行在72MHz,我们需要在system_stm32f10x.c中正确配置PLL参数。我一般使用外部8MHz晶振,通过9倍频得到72MHz的系统时钟。当然,如果你没有外部晶振,也可以使用内部RC振荡器,但精度会差一些。
GPIO配置相对简单,但要注意时钟使能。STM32的外设时钟都需要先使能才能使用。我遇到过因为忘记使能GPIO时钟而导致IO口无法工作的坑,所以现在养成了在初始化函数开头就先使能时钟的习惯。
串口配置是后续使用FinSH的关键。我使用USART1,引脚是PA9(TX)和PA10(RX),波特率设置为115200。记得要开启串口中断,这样FinSH才能接收用户输入。在NVIC中设置合适的中断优先级,我一般设置为2或3。
3. 添加RT-Thread Nano内核
现在开始添加RT-Thread Nano内核。有两种方法可以添加:一是通过Keil的RTE环境自动添加,二是手动下载源码并添加到工程中。我推荐手动添加,因为这样能更好地理解整个系统的结构。
首先去RT-Thread官网下载Nano版本的最新源码。我使用的是3.1.5版本,这个版本比较稳定。下载后解压,你会看到几个重要的文件夹:include(头文件)、libcpu(CPU相关代码)、src(内核源码)。
在工程中新建一个组命名为RT-Th

242

被折叠的 条评论
为什么被折叠?



