- FreeRTOS (使用STM32F407)
圖一 - 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的相關問題
回覆刪除請問你有聯絡方式嗎?