概述
本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件
OpenMCU_FreeRTOS工程的愿景主要有:
1.、能移植支持主流mcu的freeRTOS;
2、深入分析FreeRTOS代码和第三方库代码,让嵌入式学习变得非常容易;
3、集成一些嵌入式产品中常用的第三方库文件,并且该工程会开发做一些产品原型,所有的技术方案,就像它的名字一样,全部开源。
移植步骤
1、keil创建stm32F407的工程

2、工程创建完毕后,在keil中建立分组管理,如下所示:

创建完成后的效果:

3、下载FreeRTOS代码
从 GitHub - FreeRTOS/FreeRTOS: 'Classic' FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel.下载最新的内核代码
4、解压下载的源码,并找到CORTEX_M4F_STM32F407ZG-SK的demo工程模板

5、在刚才新创建的keil STM32F407ZGT6工程目录下创建Appication文件夹,

6、将demo工程中的如下文件拷贝到Application文件夹下面.

拷贝后的效果:

7、Application分组添加c文件

8、CMSIS添加system_stm32f4xx.cC文件,文件存放的路径为:


9、添加STM32F4 BSP驱动文件,文件路径为:


10、添加启动文件startup_stm32f407xx.s


11、添加freeRTOS内核C文件,文件路径为:


12、添加内核移植中的与STM32F4相关的代码
代码路径在kernel/portable部分

13、所有分组添加完后如下图所示:

14、添加编译时的头文件路径

15、编译器选项设置
a. target选项

b. c/c++选项
加入STM32F407xx定义

17、修改stm32f4xx_it.c文件中的如下函数定义
__weak void SVC_Handler(void)
{
vPortSVCHandler();
}
__weak void PendSV_Handler(void)
{
xPortPendSVHandler();
}
__weak void SysTick_Handler(void)
{
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
xPortSysTickHandler();
}
}
删除: __weak void EXTI9_5_IRQHandler(void)和 __weak void EXTI15_10_IRQHandler(void)
17、编译输出

工程连接
yanl1229/OpenMCU_FreeRTOS
![[自动驾驶-传感器融合] 多激光雷达的外参标定](https://i-blog.csdnimg.cn/direct/d246557947b14893b37309775eb04cdc.png)





![[AI]从零开始的so-vits-svc歌声推理及混音教程](https://i-blog.csdnimg.cn/direct/9fd8ed2a6fca42ee860678ad53c302df.png)











