概述
????????本文主要描述了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