基于STM32的RTOS移植
一、所需资料
1、STM32对应型号的固件
2、FreeRTOS源码
该资料均可在其官网下载。
二、创建一个项目文件夹
1、新建工程文件夹并取名:FreeRTOStest1(名称自定义)。
2、在工程文件夹下新建CMSIS,FWLIB,USER,FREERTOS,OBJ等文件夹。
三、移植固件源码
1、将STM32对应型号的固件解压后“STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\STM32F4xx_StdPeriph_Driver”目录下的“inc”、"src"文件夹拷贝到工程文件夹下的FWLIB文件夹下。
2、将STM32对应型号的固件解压后“STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Include"文件夹下的"core_cm4.h","core_cmFunc.h","core_cmInstr.h"、"core_cmSimd.h"和
“STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm”文件夹下“startup_stm32f40_41xxx.s”的拷贝到工程文件夹下的"CMSIS"文件夹下。
3、将STM32对应型号的固件解压后“STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates”目录下的"stm32f4xx_conf.h"、"stm32f4xx_it.c"、"stm32f4xx_it.h"、"system_stm32f4xx.c"。
和“STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include”目录下的“system_stm32f4xx.h”、“stm32f4xx.h” 文件夹拷贝到工程文件夹下的USER文件夹下。
源码导入后各文件夹内容如下。
四、移植FreeRTOS源码
1、将FreeRTOS源码解压后“FreeRTOSv10.0.0\FreeRTOS\Source”文件夹下的所有文件及文件夹拷贝到工程文件夹下的FREERTOS文件夹下。
1.1在工程文件夹下的“FREERTOS\Source\portable”文件夹下只需要保留“Keil”、"MenMang"、"RVDS"这三个文件夹即可其余的文件都删除。
1.2将FreeRTOS源码解压后“FreeRTOSv10.0.0\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK”目录下的“FreeRTOSConfig.h”拷贝到“FREERTOS\Source\include"目录下。
源码导入后文件夹内容如下
五、创建STM32工程
1、打开keil新建工程并将工程保存到第二步所创建的文件夹中并选择对应的开发板的型号。
3、创建项目的分组新建分组“FreeRTOS_CODE”、“FreeRTOS_PROTABLE”、“FWLIB”、“CMSIS”、“USER”。
4、将源码文件导入到工程。
4.1将工程文件夹下“FWLIB”、“CMSIS”、“USER”对应的文件分别导入到项目的分组目录下。
4.2FreeRTOS_CODE分组导入“\FreeTOStest1\FreeRTOS\Source”目录下的所有*.c文件。FreeRTOS_PROTABLE导入"FreeTOStest1\FreeRTOS\Source\portable\MemMang"文件下任意一个.c文件和"FreeTOStest1\FreeRTOS\Source\portable\RVDS\ARM_CM4F"下的.c文件。
注*所有的包含有"stm32xx"的源文件都是根据不同的板件而选择不同的文件的。
5、定义宏“STM32F40_41xxx,USE_STDPERIPH_DRIVER”
6、配置工程将使用到的头文件路径包含到工程路径中
7、编译如果出现Error: L6200E: Symbol XXX multiply defined (by port.o and stm32f4xx_it.o).说明在文件stm32f10x_it.c和port.c出现重定义只需要将STM32库函数中XXX对应的函数注释掉其中一个即可。
创建后的工程项目配置如下图所示。