打開µVision® IDE這程式編輯軟體,如下圖所示,
點擊上方選單Project->New µVision Project...,進行專案建立
建立路徑選擇在\Project資料夾內,輸入專案名稱並存檔,如下所示,
選擇MCU Device,這裡選擇STM32F407ZG,按下OK,
環境安裝完畢後按下OK,
點擊上方紅色框圖案,如下所示,
把資料夾建立好,如下所示,
右邊Files部分是把要用到的.s與.c檔設置於此
MDK->startup_stm32f40_41xxx.s
CMSIS->stm32f4xx_it.c system_stm32f4xx.c
STM32F407_StdDriver->misc.c stm32f4xx_rcc.c stm32f4xx_syscfg.c
STM32F407_Configuration->暫無資料
FreeRTOS->全部.c檔
ExtDevices_Configuration->暫無資料
User->main.c
設置完成點擊OK,再點擊上方紅色框圖案,如下所示,
按照下方細細做設定,將Xtal(MHz)設為8MHz
Create HEX File打勾,
C Compiler Listing打勾,
在Define輸入USE_STDPERIPH_DRIVER,STM32F40_41xxx,
設置Include Paths,設置結果如下所示,
選擇使用的燒錄器,本人使用J-LINK,
點擊旁邊的Setting,查看是否連線成功,如下所示,
此畫面在Reset and Run打勾,在下方Add中增加STM32F4xx Flash,按下確定整個就設定好,
接下來是各個文件的修改,首先是stm32f4xx_it.c,將void SVC_Handler(void) void PendSV_Handler(void) void SysTick_Handler(void)給註解掉,因為這會與FreeRTOS發生衝突,如下所示,
這時按下上方編譯圖示,把.h文件帶進來,
下方會出現編譯錯誤訊息,如下所示,
這時要修改FreeRTOSConfig.h,修改範圍為第51行~第70行,將下面程式複製貼上於這個範圍內,如下所示,
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( ( unsigned long ) 168000000 )
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES ( 5 )
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 130 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 75 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 10 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
#define configIDLE_SHOULD_YIELD 1
#define configUSE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE 8
#define configCHECK_FOR_STACK_OVERFLOW 0
#define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_MALLOC_FAILED_HOOK 0
#define configUSE_APPLICATION_TASK_TAG 0
#define configUSE_COUNTING_SEMAPHORES 1
#define configGENERATE_RUN_TIME_STATS 0
此時在按下編譯圖示就沒有錯誤了,如下所示,
接下來修改main.c主要是要把大部分的程式刪除,將下面程式複製並覆蓋貼上至main.c,如下所示,
#include "main.h"
/*
程式名稱:主程式
程式版本:V1.0
程式撰寫者:Michael Jheng(鄭智遠)
程式撰寫日期:2018/1/6
程式修改日期:N/A
程式說明:
*/
int main(void){
/* Infinite loop */
for(;;){
}
}
main.h也是一樣大部分的程式刪除,會include必要函數,如下所示,
#ifndef __MAIN_H
#define __MAIN_H
#include "stm32f4xx.h"
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
#include <stdlib.h>
/* FreeRTOS */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "croutine.h"
#include "semphr.h"
#include "timers.h"
#include "timers.h"
#endif
本人習慣再增加bsp.c與bsp.h,便於程式能做更好的分類與管理,這兩程式主要是處理開發板程式與全域變數初始化,這兩隻程式皆放在User中的inc與src,如下所示,
bsp.h部分,別忘了在main.h要include "bsp.h",
#ifndef __BSP_H
#define __BSP_H
#include "main.h"
/* 開發板全域變數初始化 */
void BSP_VariableInit(void);
/* 開發板整體系統初始化 */
void BSP_Init(void);
#endif
bsp.c部分,
#include "bsp.h"
/*
程式名稱:開發板全域變數初始化
程式版本:V1.0
程式撰寫者:Michael Jheng(鄭智遠)
程式撰寫日期:2018/1/6
程式修改日期:N/A
程式說明:
*/
void BSP_VariableInit(void){
}
/*
程式名稱:開發板整體系統初始化
程式版本:V1.0
程式撰寫者:Michael Jheng(鄭智遠)
程式撰寫日期:2018/1/6
程式修改日期:N/A
程式說明:
*/
void BSP_Init(void){
}
這樣專案就建立完成,下一篇要撰寫第一支FreeRTOS程式
留言列表