STM32筆記(1) STM32簡介及環境搭建

STM32簡介

ST 指法意半導體,M 指微控制器,即微型計算機的主要組成部分集成在一塊芯片上的單芯片微型計算機。32表示這是一個32位的微型控制器。總的來說,STM32就是由意法半導體生產的32位微控制器,基於ARMv7架構的Coretex-M3內核,也是一種單片機。

命名規則及選型依據

1.命名規則
在這裏插入圖片描述
2.選型依據
首先根據項目需求選擇合適的MCU芯片,一般來說如果並不需要高性能來進行大量的數據運算,可以選擇F1系列,反之,F4系列芯片比較適合。

其次,引腳的多少與功能,FLASH 容量,根據程序的需求進行適當選擇。

開發環境

一般開發環境就是Keil5 MDK,除此之外還有ST官方的TrueStudio,以及HAL+STM32CubeMX+Keil5。

其中TrueStudio for STM32是一個靈活的、可擴展的IDE和調試STM32單片機的強大工具,基於開放標準(Eclipse和GNU)和擴展代碼的專業特點,給系統的結構和動態行爲提供了獨特的見解。

而STM32CubeMx可以可視化地進行芯片資源和管腳配置,並且生成項目所有源程序,支持導入到keil5中進行後續程序的編寫。

基於HAL庫的開發方式是ST官方目前主推的開發方式,普通的固件庫官方已經停止更新了。

並且對於單獨採用Keil5來開發的話,需要下載對應芯片的芯片包,STM32F1系列芯片應下載F1系列的芯片包,F4的就下載F4的芯片包,同時如果是基於固件庫開發還要去官網下載芯片相應的固件庫。

程序燒錄方式

1.串口下載
用USB轉串口的方式燒錄程序時,需要先下載相應的芯片驅動以及一個燒錄軟件,一般是Flymcu。

2.ST-LINK驅動
ST-LINK是一種調試下載器,通過20針腳與開發板相連,直接從keil5點擊“load”燒錄程序,可以減少燒錄時間,並且進行相應Debug仿真測試。使用前需在keil5中先進行設置。

開發方式

1.固件庫開發
固件庫是由官方提前編好的函數的集合。通過將寄存器底層進行封裝,使得可以直接調用函數來控制寄存器,提高了可讀性。

2.寄存器開發
寄存器是相當於一個存在於開發板上的一個變量,而我們可以通過編程直接控制寄存器,即使是固件庫開發,歸根到底也是對寄存器的控制

差別:寄存器是基礎,雖然只掌握固件庫開發可以比較容易上手stm32,但是無法直觀地理解各種底層寄存器。
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200503221907165.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly

Keil5工程建立

基於固件庫開發

  1. 在建立工程之前,建議在電腦的某個目錄下面建立一個文件夾,後面所建立的工程都可以放在這個文件夾下面,這裏建立一個文件夾爲 Tem。
  1. 使用keil5建立新的工程並將目錄定位到剛纔建立的文件夾Tem 之下,在這個目錄下面建立子文件夾 USER然後定位到 USER 目錄下面,工程文件就都保存到 USER 文件夾下面。工程命名爲Tem。
  2. 接下來會出現一個選擇 CPU 的界面,即選擇相應的芯片型號。
  1. 接 下 來 ,在 Template 工 程 目 錄 下 面 , 新 建 3 個 文 件 夾 CORE, OBJ 以 及FWLib。 CORE 用來存放核心文件和啓動文件, OBJ 是用來存放編譯過程文件以及 hex 文件,FWLib 文件夾顧名思義用來存放 ST 官方提供的庫函數源碼文件。已有的 USER 目錄除了用來放工程文件外,還用來存放主函數文件 main.c,以及其他包括 system_stm32f10x.c 等等。
  2. 接下來將官方的固件庫包裏的 打開官方固件庫包,定位到我們之前準備好的固件庫包的目錄
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面, 將目錄下面的 src,inc 文件夾 複製到剛纔建立的 FWLib 文件夾下面。
    (這裏需要相應的官方固件庫包,在下面的步驟也同樣有需要複製相應文件)
  3. 下面將固件庫包裏面相關的啓動文件複製到工程目錄 CORE 之下。打開官方固件庫包,定位到目錄
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,將文件 core_cm3.c
    和 文 件 core_cm3.h 復 制 到 CORE 下 面 去 。 然 後 定 位 到 目 錄
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\a
    rm 下面,將裏面 startup_stm32f10x_hd.s 文件複製到 CORE 下面。
    (這裏不同容量的芯片使用不同的啓動文件)
  4. 定位到目錄:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面將裏面的三個文件 stm32f10x.h, system_stm32f10x.c,system_stm32f10x.h,複製到 USER目錄之下。然後將
    STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 個文 件main.c, stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h 複製到 USER 目錄下面。
  1. 4~7步驟爲固件庫的複製,接下來在keil5的工程裏右鍵點擊 Target1,選擇 Manage Components ,在Project Targets 一欄,在 Groups 一欄刪掉一個 SourceGroup1,建立三個 Groups: USER,CORE,FWLIB。並將文件夾中相應文件導入。
  1. 接下來選擇編譯中間文件編譯後存放目錄。方法是點擊魔術棒,然後選擇“Output”選項下面的“Select folder for objects…” ,然後選擇目錄爲我們上面新建的 OBJ 目錄。
  1. 回到工程主菜單,點擊魔術棒 ,出來一個菜單,然後點擊 c/c++選項.然後點擊Include Paths 右邊的按鈕。彈出一個添加 path 的對話框,將圖上面的 3 個目錄添加進去。記住, keil 只會在一級目錄查找,所以如果目錄下面還有子目錄,記得 path一定要定位到最後一級子目錄。然後點擊 OK.
  2. 接下來配置一個全局的宏定義變量。按照步驟 10,定位到 c/c++界面,然後填寫“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 輸入框裏面。(注意:這個是大容量的宏定義)
  3. 打開工程 USER 下面的 main.c,用相應代碼將 main.c 已
    有代碼覆蓋,然後進行編譯。
  4. 這樣一個工程模版建立完畢。下面還需要配置,讓編譯之後能夠生成 hex 文件。同樣點擊魔術棒,進入配置菜單,選擇 Output。然後勾上下三個選項。

基於寄存器開發

  1. 新建一個 TEST 的文件夾,然後在 TEST 文件夾裏面新建 USER 文件夾,.使用keil5建立新的工程test並將目錄定位到剛纔建立的文件夾,保存在這個 USER 文件夾裏面,之後, 彈出選擇器件的對話框,在這裏選擇相應的芯片,特別注意: 一定要安裝對應的器件 pack 纔會顯示這些內容!!
  2. 找到 Target1→Source Group1→雙擊→設置打開文件類型爲 Asm Source
    file→選擇 startup_stm32f10x_hd.s→點擊 Add (注意:此處應加入的文件與flash的大小有關。
  3. 在 TEST 目錄下新建一個新的 OBJ 文件夾來存放中間文件 。
  4. 把系統代碼 COPY 過來(即 SYSTEM文件夾,該文件夾由 ALIENTEK 提供,可以在光盤任何一個實例的工程目錄下找到)(注意:不要把庫函數代碼的系統文件夾拷貝到寄存器代碼裏面用,反之亦然!)
  5. 接下來在keil5的工程裏右鍵點擊 Target1,選擇 Manage Components ,在Project Targets 一欄,加入相應文件夾及文件。
  6. 建一個 test.c 文件,並保存在 USER 文件夾下。 然後雙擊 USER 組,會彈出加載文件的對話框,此時在 USER 目錄下選擇 test.c 文件,加入到 USER 組下。
  7. 設置輸出路徑,再編譯。 點擊 魔術棒(Options for Target 按鈕),彈出 Options for Target’ Target 1’ 對話框,選擇 Output 選項卡→選中 Create Hex File(用於生成 Hex 文件,後面會用到) →點擊 Select Folder for Objects→找到 OBJ 文件夾→點擊 OK ,打開 Listing 選項卡→點擊 Select
    Folder for Listings→找到 OBJ 文件夾→點擊 OK ,並在該選項卡做出如下修改:在這裏插入圖片描述
    (注意:一處的輸入與芯片類型有關)

圖中 2 處是編譯器優化選項,有-O0~-O3 四種選擇(default 則是-O2),值越大,優化效果越強,但是仿真調試效果越差。這裏我們選擇-O0 優化,以得到最好的調試效果,方便開發代碼,在代碼調試結束後,可以選擇-O2 之類的優化,得到更好的性能和更少的代碼佔用量。

圖中 3 處, One ELF Section per Function 主要是用來對冗餘函數的優化。通過這個選項,可以在最後生成的二進制文件中將冗餘函數排除掉,以便最大程度地優化最後生成的二進制代碼。

Include Paths 處(4 處),點擊 後面的按鈕。在彈出的對話框中加入 SYSTEM 文件夾下的 3 個文件夾名字,把這幾個路徑都加進去 。

資料查閱

一般不建議百度查閱,雖然好像比較容易,但是答案參差不齊。建議通過ST官網進行資料查找,也可以在CSDN各個博客上查找。當然,在購買開發板後一般商家會附贈一些資料,部分目錄如下:

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章