STM32開發筆記02—新建庫函數工程


架構圖

創建工程

首先我們先創建一個資料夾example,路徑最好配置為全英文,然後分別在example資料夾內再創建6個資料夾,分別是:

  • Doc
  • Libraries
  • Listing
  • Output
  • Project
  • User

然後開啟keil,選擇Project → New uVision Project新建一個工程

位置選擇我們剛剛創建的example資料夾下的Project資料夾,命名後按下確定新增專案

接著選單會要求你選擇開發版的型號,查看開發版資訊然後依序找到對應版本,如圖我的開發板使用的是STM32F429IGT,按下ok進入下一步

設定完成後keil會要求你用keil新建工程包導入CMSIS, Driver等庫(Manage Run-Time Environment),這一步先按cancel,我們使用手動配置較為快速

到這一步我們已經創立一個空的工程文件,不過為了補全剛剛跳過的庫文件配置我們需要到官方網站下載對應版本的firmware

手動添加文件

將剛剛下載下來的firmware壓縮檔解壓縮,注意途中的紅色方框,等等我們需要將firmware中的檔案從這些資料夾中複製出來

回到keil,在左側的Project欄位右鍵新增STARTUP, STM32F4XX_StdPeriph_Driver(按照你下載的firmware版本取名), User, Doc這4個Group

接著我們把剛剛解壓縮後的firmware路徑STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries下的CMSIS, STM32F4xx_StdPeriph_Driver兩個folder複製到我們自己創建的Libraries目錄下

💡注意: CMSIS資料夾只留Device跟Include資料夾就可以了,其他檔案皆可以刪除。同理STM32F4xx_StdPeriph_Driver只留inc與src資料夾

再來我們還需要複製來自firmwareProject\STM32F4xx_StdPeriph_Templates的以下檔案:

  1. main.c/main.h
  2. stm32f4xx_conf.h
  3. stm32f4xx_it.c/stm32f4xx_it.h

把這些檔案複製到我們創建的User資料夾下吧!

不過到這一步,keil右側專案欄位還是沒有顯示這些檔案,必須要透過手動方式添加。執行方式非常簡單,只要在Group處右鍵選擇添加已存在檔案就可以了(也可以透過雙擊Group),這個步驟的目的是將剛剛複製過來的檔案加入到專案中

檔案的分配如下

  • STARTUP
    • 檔案名: startup_stm32f429_439xx.s(依照你的開發板型號選擇)
    • 位置: Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
    • 功用: 啟動文件
  • STM32F4xx_StdPeriph_Driver
    • 檔案名: Libraries\STM32F4xx_StdPeriph_Driver\src下所有.c文件
    • 位置: Libraries\STM32F4xx_StdPeriph_Driver\src
    • 功用: 外設相關文件
  • Users
    • 檔案名: main.c, stm32f4xx_it.c
    • 位置: Users\
    • 功用: 開發者自行編寫的文件
  • Doc
    • 看需求自行編寫開發者日誌(ex. README)

配置完成後應該會如下圖所示:

💡注意:檔案路徑是你創立的專案,前提是你已經把這些文件從firmware資料夾複製過來了,不要搞錯了!

配置魔術棒

點選編輯面板上方的"魔術棒"圖示進入環境配置選單,我們依序更改Target, Output, Listing, C/C++的預設值,需要的操作行為如下表所示:

  • Target選單
    • 勾選Use Micro LIB
    • ARM Compiler選擇compiler version 5
  • Output選單
    • 選擇我們創建的資料夾
    • 勾選create HEX File
  • Listing選單
    • 選擇我們創建的資料夾
  • C/C++選單
    • Define: STM32F429_439xx,USE_STDPERIPH_DRIVER(指定driver, 包含stm32f4xx_conf.h)
    • incldue path(家目錄 + User目錄 + 具有header文件的路徑)

一些編譯問題

完成魔術棒的配置以後理論上就可以編譯(F7)成功了,但如果編譯結果顯示錯誤不妨參考下列常見問題(以STM32F429為例)

main.c文件清空

從firmware複製過來的main.c程式有太多多餘的程式,有時候沒有確實包含標頭檔,或者專案壓根就沒有這些文件,這時候就容易發生錯誤。所以在編譯之前,建議還是先把main.c清空成以下預設狀態

// #include "stm32f4xx.h"

int main(void)
{  

  /* Infinite loop */
  while (1)
  {
  }
}
 void SystemInit(void)
 {    
 }

Error: L6218E: Undefined symbol TimingDelay_Decrement (referred from stm32f4xx_it.o).

需要到stm32f4xx_it.c中把TimingDelay_Decrement();註解掉:

void SysTick_Handler(void)
{
//  TimingDelay_Decrement(); // not defined!
}

STM32F429的FSMC

STM32F429中的開發板中,FMC周邊外設已取代FSMC,所以我們需要手動將stm32f4xx_fsmc.c屏蔽掉。解決方法是在Project欄位右鍵stm32f4xx_fsmc.c文件 → Options for File stm32f4xx_fsmc.c

將Include in Target Build取消勾選,讓編譯器不去編譯這個文件

唯讀檔案處理方法

如果我們把Project欄位點開會發現很多檔案會附加上"鑰匙"的圖示,開啟後雖然可以讀取但不能修改裡面的程式碼,這是因為文件被配置成"唯讀"屬性。解決方法是到專案資料夾中將資料夾屬性的唯讀取消勾選

程式最後一行要留空行

keil要求開發者在所有文件的最後一行留一個空行,如果不這麼做的話編譯會提示warning: #1-D: last line of file ends without a newline

💡注意:最後一行必須是完全空的,如果包含space還是會報warrning

設成Template模板

到此為止專案應該可以成功的編譯並且0w0e才對,這時候把剛剛創建的專案當成預設模板,以後要新增專案時直接複製這個工程模板就可以,不用每次都大費周章設定

Debugger配置

如果你想將編譯完成的程式燒錄進板,就需要配置燒錄器設定。一樣點開魔術棒然後選擇Debug選單,依照你的燒錄器型號選擇配置

如果燒錄器成功連接,keil應該會偵測到。我們點開右側的Settings,裡面可以配置:

  1. 你的燒錄器型號
  2. 支援的燒錄模式SW/JTAG, 燒錄速度
  3. 連接與復位操作: Normal, SYSRESETREQ

點擊Flash Download選單,勾選Erase Sectors, Program, Verify, Reset and Run並確認下方板子的型號與flash大小是否正確

上述操作都完成以後就可以保存退出,在編輯頁面按下F8就可以開始燒綠了,成功的話會顯示以下資訊:

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: