STM32筆記(8):重新認識 STM32

自從寫了 STM32筆記(1):我的第一個STM32程式,使用Arduino IDE 介面 這篇文章後,陸續完成幾個實作,包括 LCD 及 LED顯示等。當時的想法是使用 Arduino IDE 進行程式編譯,並上傳執行檔到 STM32 開發板上,控制其他感測器或元件。繼續實作時陸續出現一些問題,例如:想要使用 PWM 來控制電機時,發現 STM32對 I/O可控的是12位元,但Arduino IDE的定義僅有 10位元,也就是設定僅能介於 0~1023之間,總覺得只是將 STM32當作Arduino來使用,無法瞭解 STM32 的全貌,差別只在於 STM32 速度快些而已,總覺得這不是我想學習的,就先擱置下來,將其他幾個實作完成後再來瞭解 STM32 的內容。最近利用一點點空檔時間,在淘X買了一片普中-定通-T200的開發板,打算從基本概念開始學習起,之後的會陸續放一些基本觀念及實作的文章到部落格,記錄學習的內容,也方便日後文件的查閱。

[什麼是STM32]

STM32,從字面上來理解,ST 是意法半導體的簡稱,M 是 Microelectronics 的縮寫,32表示 32 位元,合起來理解,STM32就是指 ST 公司開發的 32 位微控制器。STM32 採用 ARM Cortex-M 架構,分成高效能、主流系列、超低電耗、無線等幾個系列,每個系統有多種不同的規格,請參見下圖:

在這些系統中,針對產品型號的命名規則,可參見下表:

市面上比較常見的兩個型號是:STM32F103和STM32F407,兩個開發板的價格都不高,在拍賣網站很容易買到。
普中-定通-T200的開發板


[STM32核心架構]

STM32在產品構成上來看,主要由內核和外部設備(Peripherals)組成,Cortex-M 系列內核是由 ARM 公司授權,晶片廠商則是在內核之外設計並生產晶片,好比電腦的CPU與周邊裝置,外部設備如顯示卡、硬碟等而,內核就好比是 CPU。內核之外最重要的就是外部設備,它包括GPIO、UART、I2C、SPI、USB、ADC等常用功能。以Cortex-M4 內核存儲器映射為例,FALSH、RAM和外設設備都分佈在總線上,這些部件排列在一個 4GB 的地址空間內,存儲器本身不具有地址屬性,這些地址由芯片廠商和用戶來分配,分配地址的過程就是通常所說的存儲器映射,重映射也是這樣一個過程。

STM32 採用 ARM Cortex-M 32位元微處理器,系統方塊圖如下:
如果將上圖的架構再展開,以 STM32F103x 的單片機為例,DataSheet內繪製的架構圖如下:
Cortex-M4 的架構圖如下:
這幾張圖參考普中開發板的教學,圖內還有很多學問,日後的實作裡再慢慢瞭解其整體的功能。

[STM32與電腦連接]

STM32與電腦連接常見的有兩種:
(1)使用UART連接
通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter,通常稱為UART)是一種異步收發傳輸器,是電腦硬體的一部分,將數據透過串列通訊和平行通訊間作傳輸轉換。UART通常用在與其他通訊接口(如EIA RS-232)的連接上,可以全雙工傳輸。
我先前紀錄的STM32筆記(1)至(7),就是使用 UART 方式連接 STM32,透過 USB 轉串口模組(USB to TTL)的晶片模組是 CP2102,如果你手邊有 CH340 ,功能也是一樣的,可以作為與 STM32 通訊用。將 CP2102 的 RX 連接 STM32 的 PA9,TX 接 PA10,GND/3.3V分別接在 STM32 的引腳 GND/3.3V,就可以開始進行通訊,將程式寫入 Flash記憶體內。
(2)使用ST-Link 燒錄器
ST-Link是一個用於STM8和STM32微控制器系列的在線調試器和編程控制器,一般也稱為「下載器」。Junction Link接合鏈路,就是 ARM 板上要用的 JLINK。ST-Link 具有SWIM(Single Wire Interface Module)、JTAG/SWD(Serial Wire Debugging)等通信接口,用於與 STM8 或 STM32 微控制器進行通信。
下圖左方是我購買的ST-Link V2,右邊是ST官方的下載器。

[程式編寫]

STM32的程式編寫方式主要有「標準庫函數」、「暫存器」和「HAL函數庫」三種。在簡體中文的用語中會將函數的 Library,翻譯成「庫函數」,我們稱為「函數庫」,將中央處理器內用來暫存指令、數據和位址的電腦記憶體位址 Register 翻譯成「寄存器」,我們則稱作「暫存器」。之後的幾篇文章中,這幾個名詞會交錯使用,但意義是一樣的。
在撰寫 STM32 控制程式時,使用寄存器編寫的程式不容易閱讀,因為都是在操作暫存器的位址,利用位址的定義,讓中央處理器執行指令。而函數庫是將暫存器用結構化的函數一一對應並封裝起來,並配置基本的函數。編寫程式的人,看了函數庫的名詞及定義後,比較容易瞭解這個函數的功能是什麼?不需再翻閱使用手冊,也較不容易因暫存器都是數字而弄錯。執行函數,也是控制底層的位址,但程式的可閱讀性提高很多。

使用暫存器與函數庫各有優缺點,使用暫存器的優點是編譯後的執行速度比函數庫編譯的執行速度快,但是可讀性比較差,如果有更改程式就要一直去翻閱規格書或參考手冊。而函數庫撰寫的程式的好處可讀性較高,STM32提供的函數庫已經幫你把暫存器的操作寫成函數,只要配置參數,然後 Enable(使能)這個函數,即可使用 STM32 執行相關控制。想學得精建議從暫存器入手,如果站在商業用途或單純只是要利用晶片進行相關操作的話,建議用庫函數來撰寫程式,日後要修改與維護會比較容易。

意法半導體提供 STM32Cube 生態系統來作為 STM32 微控制器和微處理器的完整軟件解決方案,免費提供給 STM32 開發環境的用戶,其中包括STM32CubeMX、STM32CubeProgrammer 或 STM32CubeMonitor 等各種組件。STM32Cube 生態系如下圖:

STM32Cube的軟體工具套件包括:
  • STM32CubeMX:STM32 的配置工具,使用圖形界面為 Cortex-M 生成 C 語言程式碼。
  • STM32CubeIDE:程式的開發環境,這個 IDE 基於 Eclipse 或 GNU C / C ++工具提供開源解決方案,包括編譯及進階測試功能。
  • STM32CubeProgrammer:編譯工具,它通過多種可用的通信介面(JTAG,SWD,UART,USB DFU,I2C,SPI,CAN等),很容易地進行裝置燒錄。
  • STM32CubeMonitor:強大的監視工具,可幫助開發人員實時微調其應用程序的結果和性能調校。

[常用參考文件]

撰寫 STM32 程式,除了 C 語言以是必備的基本能力外,還需要規格書及參考文件等輔助。STM32 的型號很多且相關文件豐,僅列出我手邊有的兩種單片機的文件連結,方便隨時參閱,如與這兩個型號不同,可以到 ST 官方網站 下載。常用的文件如下:
(1) Datasheet :晶片的基本資料,功能參數封裝管腳定義和性能規範。
(2) 參考手冊 :各種功能的具體描述,使用方法,原理,相關寄存器。 
(3) 韌體(固件)函式程式庫用戶手冊 :函數程式庫功能,庫函數的定義、功能和用法。
(4) 其他書籍

[參考資料]

Post a Comment

較新的 較舊