close

ST_logo_20130425.png

打開µVision® IDE這程式編輯軟體,如下圖所示,

24.JPG

點擊上方選單Project->New µVision Project...,進行專案建立

23.jpg

建立路徑選擇在\Project資料夾內,輸入專案名稱並存檔,如下所示,

25.JPG

選擇MCU Device,這裡選擇STM32F407ZG,按下OK,

26.JPG

環境安裝完畢後按下OK,

27.JPG

點擊上方紅色框圖案,如下所示,

28.JPG

把資料夾建立好,如下所示,

29.JPG

右邊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,再點擊上方紅色框圖案,如下所示,

28.JPG

按照下方細細做設定,將Xtal(MHz)設為8MHz

30.JPG

Create HEX File打勾,

31.JPG

C Compiler Listing打勾,

32.JPG

在Define輸入USE_STDPERIPH_DRIVER,STM32F40_41xxx,

33.JPG

設置Include Paths,設置結果如下所示,

34.JPG

選擇使用的燒錄器,本人使用J-LINK,

35.JPG

點擊旁邊的Setting,查看是否連線成功,如下所示,

36.JPG

此畫面在Reset and Run打勾,在下方Add中增加STM32F4xx Flash,按下確定整個就設定好,

37.JPG

接下來是各個文件的修改,首先是stm32f4xx_it.c,將void SVC_Handler(void) void PendSV_Handler(void) void SysTick_Handler(void)給註解掉,因為這會與FreeRTOS發生衝突,如下所示,

2222.JPG

 

39.JPG

這時按下上方編譯圖示,把.h文件帶進來,

42.JPG

下方會出現編譯錯誤訊息,如下所示,

43.JPG

這時要修改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

44.JPG

此時在按下編譯圖示就沒有錯誤了,如下所示,

45.JPG

接下來修改main.c主要是要把大部分的程式刪除,將下面程式複製並覆蓋貼上至main.c,如下所示,

#include "main.h"

/*
程式名稱:主程式
程式版本:V1.0
程式撰寫者:Michael Jheng(鄭智遠)
程式撰寫日期:2018/1/6
程式修改日期:N/A
程式說明:

*/
int main(void){

     
  /* Infinite loop */
  for(;;){
        
  }
}

46.JPG

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 

47.JPG

本人習慣再增加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 

48.JPG

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){


}

49.JPG

這樣專案就建立完成,下一篇要撰寫第一支FreeRTOS程式

arrow
arrow

    鄭智遠 發表在 痞客邦 留言(0) 人氣()