- FreeRTOS (使用STM32F407)
 圖一是FreeRTOS Source目錄架構,這個資料夾是FreeRTOS的核心。而要使用FreeRTOS有幾個重點要注意, 圖一 
- Complier
 路徑:Source\portable\{ComplierVersion}\{CPU}\port.c
- Complier : RVDS(Keil) or GCC
- CPU : (ARM_CA9/ARM_CM3/ARM_CM4F)
- MemoryManagement
 路徑:Source\MemMang\heap_X.c
- X:heap有四個版本
- FreeRTOSConfig.h 
 路徑: Demo\{MCU}\FreeRTOSConfig.h
- MCU: 這個檔案是根據MCU來設定,通常直接拿DemoCode的來用,不過還是要根據MCU的硬體來設定,所以我選用Demo\CORTEX_M4F_STM32F407ZG-S\FreeRTOSConfig.h
- STM32 Driver
- STM32F4xx_StdPeriph_Driver
 此資料夾是STM32的周邊Driver,通常會使用最新版,而我習慣使用GPIO來改。
- Peripheral_Examples此資料夾是STM32的Demo程式,我習慣使用GPIO來做修改。
- Porting
- vPortSVCHandler();
- xPortPendSVHandler();
- xPortSysTickHandler();
|  | 
| 圖二 | 
- 介接這三個Function,以下提供兩個方法
- 1. 修改 startup_stm32f4xx.s
 將紅色框框的部分加入到startup_stm32f4xx.s
- 2. 修改FreeRTOSConfig.h將紅色框框的部分加入到FreeRTOSConfig.h (如果Complier時,發生multiply defined,記得把它助解,通常會是stm32f4xx_it.c檔案裡)
|  | 
| 圖三 | 
|  | 
| 圖四 | 
#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
void vTask( void *pvParameters )
{
portTickType xLastWakeTime = xTaskGetTickCount();
while(1)
{
// do something
vTaskDelayUntil( &xLastWakeTime, ( 500 / portTICK_RATE_MS ) );
}
}
int main ()
{
xTaskCreate( vTask, ( signed portCHAR * ) "Task1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
vTaskStartScheduler();
while(1);
}
- Note 
 Reference [4] 是已經Porting FreeRTOS for STM32F407-Discovery
Reference:
[1] FreeRTOS
[2] STM32F4 入門教學:FreeRTOS 移植
[3] STM32 Driver
[4] DemoCode - STM32F407VG-FreeRTOS
 
你好 我想向你請教stm32f407的相關問題
回覆刪除請問你有聯絡方式嗎?