1. 程式人生 > >STM32 標準韌體庫的下載,檔案介紹和工程的建立(綜合)

STM32 標準韌體庫的下載,檔案介紹和工程的建立(綜合)

前言

  1. 博文基於ARM Cortex-M3核心的STM32F103ZET6晶片和標準3.5.0庫;
  2. 博文介紹標準庫中個資料夾的含義和以及一個簡單工程的建立;
  3. 如有不足之處還請博友多多指教;

標準庫的下載

標準庫的獲取方式: 第一步:進入官網:https://www.st.com/content/st_com/zh.html 第二步:依次進行下列操作 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 在下面這個表格裡,能看到很多系列的標準庫,可以根據自己需求選擇;這裡我選擇STM32F10x系列; (下面這個表格是根據晶片選擇的,或許有人會有一個疑問:為什麼選擇了第三個,明明第一個也是支援STM32F10x的,原因就是版本不同,第三個是目前最新的版本,第一個是過去的版本) 在這裡插入圖片描述

在這裡插入圖片描述 點選下面獲取軟體時候,會讓你登入或註冊,登入註冊就可以了;我直接跳過這一步了; 在這裡插入圖片描述 然後就開始下載了;(如果覺得太慢的話,可以把下載地址複製到迅雷裡) 在這裡插入圖片描述

標準庫各檔案的含義

  1. 將下載的壓縮包解壓縮後會看到這個資料夾:資料夾名字的含義是:STM32F10x系列處理器的標準庫,版本3.5.0 基於庫函式開發的專案,每次建立新的工程都要訪問這個資料夾; 在這裡插入圖片描述
  2. 進入後可以看到下列資料夾 在這裡插入圖片描述 ** _htmresc**:不用在意這個資料夾,就兩張ST的照片; Utilities:實用程式,提供了很多小的程式,比如ASCII碼的編碼,IIC通訊的程式碼等;這個學習前期也可以不用在意; Release_Notes.html
    :STM32F10x標準外設庫(StdPeriph_Lib)發行說明,對標準庫的各個版本的區別,即版本的變更; stm32f10x_stdperiph_lib_um.chm:這個檔案就很重要;此檔案包含標準庫裡的所有的檔案,可以很方便的檢視各個檔案內部的程式碼,不用通過軟體檢視各個檔案程式碼;很輕巧很方便; (上面這四個需要時才會使用,一般很少使用,下面這兩個才是最重要的) Libraries:庫;資料夾內部結構如圖: 在這裡插入圖片描述 對各個檔案和部分資料夾進行介紹:
  1. core_cm3.c和core_cm3.h:由ARM公司提供的CMSIS核心檔案,提供進入M3核心的介面;(此檔案儘量不能改) 資料夾startup
    :顧名思義內部放著啟動檔案,在此資料夾下有arm,gcc_ride7,iar,TrueSTUDIO四個子資料夾,開啟後會發現四個資料夾下啟動檔案檔名一樣,為什麼會這樣的?原因是stm32的開發環境不止一種,這個資料夾名分別代表了各個環境的啟動檔案,比如如果用KEIL MDK環境開發就選擇arm資料夾下的啟動檔案,如果用IAR環境開發就選擇iar環境下的啟動檔案;
  2. startup_stm32f10x_XX.s:晶片啟動檔案;主要功能有兩個:① 程式開始執行後,使程式進入系統初始化函式SystemInit(),在此處,完成對晶片的時鐘系統,管腳等進行初始化;② 初始化結束後使程式進入主函式main()進行; 這裡發現一個問題:arm資料夾下不止這一種,那麼應該選擇哪一個那?看下錶
檔名 含義 容量範圍
startup_stm32f10x_ld.s 小容量啟動檔案 FLASH≤32K
startup_stm32f10x_md.s 中等容量啟動檔案 64K≤FLASH≤128K
startup_stm32f10x_hd.s 大容量啟動檔案 256K≤FLASH

(其他幾個暫時用不著,先不介紹,後續用到的時候再補充)

  1. stm32f10x.h:STM32F10x系列晶片標頭檔案,是所有外設的標頭檔案,這個經常被各個原始檔呼叫的標頭檔案; system_stm32f10x.c和system_stm32f10x.h:系統配置檔案;其中包括的System()函式用來配置初始化的整個時鐘系統; inc:晶片外設標頭檔案;包含所有STM32晶片外設的所有標頭檔案;一般在建立工程的時候用到那個外設就呼叫那個外設標頭檔案,和src搭配使用; src:晶片外設原始檔;包含所有STM32晶片外設的所有原始檔;一般在建立工程的時候用到那個外設就呼叫那個外設原始檔,和inc搭配使用;

Project: 工程資料夾;此資料夾提供了建立工程的模板和模組的例程; 在這裡插入圖片描述 STM32F10x_StdPeriph_Examples:包含標準庫所有外設例程;例程內是ST公司提供的模組程式碼,根據需要可以直接摘取使用; STM32F10x_StdPeriph_Template:建立一個庫開發工程的模板;我們下面建立工程的時候可以效仿這個模板,模板的意思就是這個是ST公司的工程師提供的,但是用不用這個模板看個人愛好,一般我們建立工程都有自己的風格,但關鍵性的庫檔案都是一樣的;main.c很常見,我們建工程的時候自己建也可以;stm32f10x_conf.h是配置檔案;stm32f10x_it.c和stm32f10x_it.h為中斷函式,不過內部只包含9箇中斷函式;

工程的建立

  1. 新建資料夾——重新命名:test

  2. 進入test,test內分別建立FWLib,CMSIS,USER,OBJ四個資料夾

  3. 進入3.5.0韌體庫資料夾,進入到STM32F10x_Stdperiph_Lib_V3.5.0→Libraries→STM32F10x_StdPeriph_Driver,複製inc和src資料夾到test資料夾下的FWLib下;

  4. 進入3.5.0韌體庫資料夾,進入到STM32F10x_StdPeriph_Lib_V3.5.0→Libraries→CMSIS→CM3→CoreSupport,複製core_cm3.h和core_cm3.c到test資料夾下的CMSIS下;

  5. 進入3.5.0韌體庫資料夾,進入STM32F10x_StdPeriph_Lib_V3.5.0→Libraries→CMSIS→CM3→DeviceSupport→ST→STM32F10x;複製startup資料夾和Release_Notes,stm32f10x.h和system_stm32f10x.c和system_stm32f10x.h到test資料夾下的CMSIS下

  6. 開啟3.5.0韌體庫資料夾,進入STM32F10x_StdPeriph_Lib_V3.5.0→Project→STM32F10x_StdPeriph_Template,複製main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h到test資料夾下的USER資料夾下;

  7. 開始開啟keil5建立工程,project→NEWproject→選擇器件型別(我這裡預設選擇STM32F103ZET6)→OK→NO;

  8. 右鍵target1→manang components,在Groups框內新建USER,FWLib,CMSIS,STATUP然後OK,

  9. 展開target1,雙擊USER,分別雙擊main.c和stm32f10x_it.c加入到USER資料夾;

  10. 雙擊FWLib,選擇FWLib並將FWLib資料夾下的src資料夾下的所有檔案新增;

  11. 雙擊CMSIS,選擇CMSIS資料夾,將core_cm3.c和system_stm32f10x.c新增

  12. 雙擊STARTUP,選CMSIS→startup→arm,將startup_stm32f10x_hd.s新增;

  13. 配置工程: 晶振=8.0, output→create HEX; C/C++→Optimization→level3(-O3); C/C++→include paths→新建→選中USER,再新建→選中→FWLib→inc,再新建→選中→CMSIS,然後OK 複製USE_STDPERIPH_DRIVER,STM32F10X_HD到C/C++的define內,然後OK。

  14. 測試:清空main.c 內的全部程式碼,然後編寫如下程式除錯;

 #include "stm32f10x.h"
  Int main()
  {
  }
  
  //注意在每個原始檔和標頭檔案的最後要空一行,不然會有警告;

如果編譯通過就沒有問題,可以放心的寫自己的程式碼了;