1. 环境准备与工程搭建
在开始STM32F407上的Little vGL+freeRTOS+FATFS全栈移植之前,我们需要准备好开发环境和基础工程框架。我建议使用Keil MDK作为开发工具,因为它对STM32系列芯片的支持非常完善。首先下载安装Keil MDK 5.30以上版本,并确保安装了STM32F4的设备支持包。
硬件方面,你需要一块基于STM32F407的开发板,推荐正点原子的探索者开发板或者野火的F407开发板,它们都带有LCD显示屏和SPI Flash存储,非常适合这个项目。我使用的是正点原子的探索者开发板,配备3.5寸480x320分辨率的电阻触摸屏和W25Q128 SPI Flash芯片。
工程目录结构建议这样组织:
- /Drivers:存放STM32标准外设库
- /Middlewares:存放freeRTOS、FATFS和Little vGL的源码
- /User:存放用户应用程序
- /Hardware:存放LCD、触摸屏等硬件驱动
我通常会先创建一个裸机工程作为基础,确保基本的时钟配置、GPIO、SPI等外设能够正常工作。这一步很重要,因为后续的所有移植都是建立在一个稳定的硬件基础之上的。记得在工程选项中开启C99模式,并设置合适的优化等级,我一般使用-O2优化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. freeRTOS移植详解
freeRTOS的移植是整个系统的基础,我们需要先把它跑起来。我从官网下载了freeRTOS V10.4.3版本,这个版本对STM32F4的支持很好。移植过程中有几个关键点需要注意:
首先是将源码添加到工程中。我创建了两个文件组:freeRTOS_source和freeRTOS_portable。在portable组中,只需要保留MemMang、RVDS和CM4F这三个文件夹的内容,因为STM32F407是M4内核带FPU的芯片。
在复制FreeRTOSConfig.h配置文件时,我发现直接用STM32F103的模板会有问题。经过多次尝试,我整理出了一套适合STM32F407的配置参数:
c复制#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ((unsigned long)168000000)
#define configTICK_RATE_HZ ((TickType_t)200)
#define configMAX_PRIORITIES (7)
#define configMINIMAL_STACK_SIZE ((unsigned short)128)
#define configTOTAL_HEAP_SIZE ((size_t)(30*1024))
#define configMAX_TASK_NAME_LEN (16)
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS
