嵌入式入門 -第1章 學嵌入式從STM32開始

1.1 STM32簡介

ARM公司簡介

ARM是Advanced RISC Machines的縮寫,它是一家微處理器行業的知名企業,該企業設計了大量高性能、廉價、耗能低的RISC (精簡指令集)處理器。公司的特色是隻設計芯片,而不生產。它將技術受權給世界上許多著名的半導體、軟件和OEM廠商,並提供服務。 編程

這裏寫圖片描述

 

圖1-1

 

ARM(Advanced RISC Machines)有3種含義:數組

  • 一個公司的名稱;
  • 一類微處理器的通稱;
  • 一種技術的名稱。

ARM微處理器的特色

(1)體積小、低功耗、低成本、高性能; 
(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件; 
(3)大量使用寄存器,指令執行速度更快; 
(4)大多數數據操做都在寄存器中完成; 
(5)尋址方式靈活簡單,執行效率高; 
(6)指令長度固定。緩存

ARM微處理器系列

ARM處理器的產品系列很是廣,包括ARM七、ARM九、ARM9E、ARM10E、ARM11和Cortex等。以及其它廠商基於ARM體系結構的處理器,除了具備ARM體系結構的共同特色之外,每一系列提供一套特定的性能來知足設計者對功耗、性能、體積的需求。 安全

表 1-1 ARM 系列

 

這裏寫圖片描述


基於ARMv7版本的ARM Cortex系列產品由A、R、M三個系列組成,具體分類延續了一直以來ARM面向具體應用設計CPU的思路。 
其中: 
A應用處理器(Application Processor )系列 
R實時控制處理(Real Time Control )系列 
M微控制器(Micro Controller )系列網絡

 

  • CortexTM-R4處理器簡介

該處理器是首款基於ARMv7架構的高級嵌入式處理器,其主要目標爲產量巨大的高級嵌入式應用系統,如硬盤,噴墨式打印機,以及汽車安全系統等等。架構

  • CortexTM-R4F處理器簡介

該處理器在CortexTM-R4處理器的基礎上加入了代碼錯誤校訂(ECC)技術,浮點運算單元(FPU)以及DMA綜合配置的能力,加強了處理器在存儲器保護單元、緩存、緊密耦合存儲器、DMA訪問以及調試方面的能力。框架

  • CortexTM-A8處理器簡介

該處理器是ARM公司所開發的基於ARMv7架構的首款應用級處理器,其特點是運用了可增長代碼密度和增強性能的技術、可支持多媒體以及信號處理能力的NEONTM技術、以及可以支持Java和其餘文字代碼語言的提早即時編譯的Jazelle@RTC技術。衆多先進的技術使其適用於家電以及電子行業等各類高端的應用領域。函數

  • CortexTM-M3處理器簡介

Cortex-M3處理器是一個低功耗的處理器,具備門數少,中斷延遲小,調試容易等特色。它是爲功耗和價格敏感的應用領域而專門設計的、具備較高性能的處理器,應用範圍可從低端微控制器到複雜SoC。 
Cortex-M3處理器使用了ARMv7-M體系結構,採用了純Thumb2指令的執行方式,具備極高的運算能力和中斷相應能力,是一個可綜合的、高度可配置的處理器。它包含了一個高效的哈佛結構三級流水線,可提供1.25DMIPS/MHz的性能。在一個具備32個物理中斷的標準處理器上實現(0.13umMetro@50MHz),達到了突出的0.06mW/MHz能效比。 性能

這裏寫圖片描述

 

圖1-2基於Cortex-M3的MCU

 

 

表1-2ARM7與Cortex-M3的比較

 

這裏寫圖片描述


Cortex-M3處理器在高性能內核基礎上,集成了多種系統外設,能夠知足不一樣應用對成本和性能的要求。處理器是所有可綜合、高度可定製的(包括物理中斷、系統調試等),Cortex-M3還有一個可選的細粒度的(fine-granularity)存儲器保護單元(MPU)和一個嵌入式跟蹤宏單元(ETM)。 
爲了下降成本,Cortex-M3處理器採用了與系統部件緊耦合的實現方法,來縮小芯片面積,其內核面積比現有的三級流水線內核縮小了30%。Cortex-M3處理器實現了Thumb-2指令集架構,具備很高的代碼密度,可下降存儲器需求,並能達到很是接近32位ARM指令集的性能。 
對於系統和軟件開發,Cortex-M3處理器具備如下優點: 
(1)小的處理器內核、系統和存儲器,可下降器件成本; 
(2)完整的電源管理,很低的功耗; 
(3)突出的處理器性能,可知足挑戰性的應用需求; 
(4)快速的中斷處理,知足高速、臨界的控制應用; 
(5)可選的存儲器保護單元(MPU),提供平臺級的安全性; 
(6)加強的系統調試功能,能夠加快開發進程; 
(7)沒有彙編代碼要求,簡化系統開發; 
(8)寬廣的適用範圍:從超低成本微控制器到高性能Soc。 
Cortex-M3主要應用於汽車車身系統,工業控制系統和無線網絡等對功耗和成本敏感的嵌入式應用領域。目前最便宜的基於該內核的ARM單片機售價爲1美圓。學習

 

1.2 爲何學習 STM32

能夠發現,在嵌入式領域 STM32 芯片介於低端和高端之間,它相對於普通的 8/16 位機有更多的片上外設,更先進的內核架構,能夠運行 μC/OS 等實時操做系統 ;相對於可運行 Linux 操做系統的高端 CPU,其成本低,實時性強。這個定位使得 STM32 不只佔領了大部分中端控制器的市場,更是成爲提高開發者技術的優良過渡平臺,爲後續的學習打下堅實的基礎。 
本節系統介紹了嵌入式工程師的技術成長路線,並詳細介紹技術路線中的崗位設置和知識結構,讓讀者對於嵌入式工程師有一個全面系統地瞭解,並在此基礎上引導工程師規劃本身職業生涯。在本章的最後,做爲承上啓下的內容,從爲何學習 STM32 和如何學習 STM32 這兩個話題入手,引導讀者開始對於 STM32 的庫開發方式有個初步地理解。

1.2.1 嵌入式技術知識結構

嵌入式技術是專用計算機系統技術,它以應用爲核心,以計算機技術爲基礎,軟硬件都可裁剪,適用在對功能、穩定性、功耗有嚴格要求的系統之中。嵌入式技術的開發人員須要對整個計算機體系(從底層硬件到軟件操做系統)都有了解,而在這個體系之中,每一個部分均可以分出一些小領域,於是技術要求很高,見圖 1- 3。 

這裏寫圖片描述

 

圖 1- 3 嵌入式技術知識結構


這個圖只是粗略地歸納了嵌入式技術的知識結構,但從中已經能夠看出它涉及的知識面很是廣,難怪衆多學生甚至技術人員老是「迷茫」。很多電子專業出身的嵌入式技術人員主要從事硬件抽象層(中間層)的開發,這一層是溝通嵌入式系統的硬件層和軟件操做系統的橋樑,於是主要的工做是開發驅動程序、板級應用支持、協調軟硬件的開發,於是對軟硬件都要有深刻的瞭解。

 

1.2.2 嵌入式工程師成長之路

1.從學生成爲工程師

若但願從事硬件抽象層的開發,應該如何學習這些知識,才能從學生過渡到工程師呢?見圖 1- 2,對於但願成爲其餘方向的嵌入式技術人員也能夠參考。從圖 1- 2 能夠看出,越往上層深刻,就越接近於純軟件開發,但這並不表明嵌入式技術人員就不須要了解硬件,相反,上層的知識都是以底層爲基礎的,不少人說的「作嵌入式軟件開發至少要讀懂原理圖」就是這個道理。 

這裏寫圖片描述

 

圖 1- 4 從事硬件抽象層開發的工程師成長之路

 

2.職業規劃

在嵌入式技術領域的公司,除了工程師還分不少職業崗位。通常公司的研發部門職位見圖 1- 3。 

這裏寫圖片描述

 

圖 1- 5嵌入式工程師的職業成長路線


通常須要 3 ~ 5 年過渡到下一級的崗位,在小公司裏項目經理通常也兼任部門經理。部門經理不必定要懂技術,並非非由項目經理升職而成。直接與技術相關的是開發工程師和系統架構師,開發工程師會針對嵌入式技術的不一樣領域有不一樣的區分。在小公司裏,熟悉軟硬件的跨領域工程師很受歡迎,而大公司則分工明確,更看重在某領域研究得深刻的開發工程師。做爲系統架構師,則須要熟悉整個嵌入式領域,可以協調不一樣領域的開發工程師進行項目開發。 
對於職業規劃,不一樣的人有不一樣的看法,狀況千差萬別,以上所述僅供讀者參考。

 

1.3學習STM32須要哪些基礎

首先要對C語言有必定的瞭解,不用學到精通,只要會使用一些簡單的命令語句。好比賦值語句、if語句、for循環語句、while語句、一維數組、二維數組等。還有一點須要重點學習的是函數的定義、調用,參數的傳遞與參數的返回。推薦給你們一本學C語言的書籍《譚浩強C語言程序設計》,這本書也是不少大學裏的教材,寫的很詳細。 
當你學會了C語言,說明你已經掌握了軟件的基礎了,接下來須要學習一些硬件的基礎知識。能夠到書店買兩本數字電路與模擬電路相關的書籍,建議你不用學的太深,只要簡單的瞭解能看懂原理圖就能夠了,等到你真正到工做崗位上,大的公司裏軟件開發人員和硬件設計人員都是分開的,只有專心作一件事情才能作的精益求精,有一個好的發展。若是你之前學過51單片機,你必定熟悉C語言、模擬電路和數字電路。那麼你就能夠直接學習STM32。須要注意的是咱們之前學習51單片機時都是直接操做寄存器,而如今咱們學習STM32大部分都是調用庫函數。 
咱們對初學者的要求是具備基本的單片機基礎,如 5一、AVR 等,曾使用 C 語言寫過單片機程序,但不需精通。讀者在學習 STM32 的時候,無需太擔憂本身的基礎,咱們更須要的是學習的勇氣,須要的是拿下 STM32 的決心。試問,咱們剛開始學習最簡單的單片機的時候,是否是也沒基礎呢,是否是所以就中止了本身學習的腳步了呢?不是的。咱們須要作的是認定一個目標,行動起來,堅持朝向目標的苦行,其中艱辛芳華,惟你自知。

1.4 如何學習 STM32

若是你去問業內人士,怎樣學習STM32,他們都會說多實踐,作多了天然就會了。但是我以爲對於一名初學者,沒有一點的理論基礎,根本就無從下手,不知道從何作起。咱們常說實踐是在有理論的指導下進行的,沒有理論的實踐是蠻幹,沒有實踐的理論那是空談。那麼怎樣得到理論知識那?最好的辦法就是看視頻教程與配套的書籍。建議初學者多看視頻教程,一遍不會就看兩遍。而後再仔細看看配套的書籍,當咱們有了理論基礎,就能夠動手實踐了。實踐也要由小到大,由淺入深的進行,別總想一步登天。知識都是一點一滴的逐漸積累起來的。 
由於 STM32 的開發方式較普通的單片機開發仍是有很大的不一樣,因此學習時要注意以下幾點 : 
1)轉變思惟,適應使用固件庫的開發方式,增強運用 C 語言的能力,創建工程意 
識。 
2)熟悉 Cortex-M 系列芯片架構,瞭解 CMSIS 標準,熟悉 STM32 的總線架構。 
3)掌握 I 2 C、SPI、SDIO、CAN、TCP/IP 等各類通訊協議,掌握了這些協議,開發軟件驅動就變得相對容易了。 
上面有關的內容本教程都會詳細講解,但「紙上得來終覺淺,絕知此事要躬行」,讀者親自編程實踐是不能少的。
基礎入門篇能夠幫助初學者快速上手 STM32,寫出本身的應用程序。以點亮 LED 燈的實例,從軟件工程的角度深刻剖析什麼是固件庫、爲何使用固件庫和怎樣使用固件庫 ;從 STM32 固件庫、新建工程、編譯和下載程序出發,瞭解如何操做 GPIO,讓新手步步爲營,盡享 STM32 的學習樂趣。

整套教程主要分爲四部分:

1.入門篇 ,主要介紹STM32及環境搭建,新建工程以及下載代碼及調試等; 
2.基礎篇,主要講解的是STM32F103VET6芯片內部的資源。包括(TIMER、CAN、ADC、DAC、RTC、DMA、USART等); 
3.外設篇,主要講解的是外圍芯片的使用方法。包(24C0四、FLASH芯片、紅外發射與接收、MP三、FM收音機、USB通信、以太網、觸摸屏等); 
4.系統篇,主要講解ucosⅡ實時操做系統和ucgui圖形支持系統的移植與使用方法。

1.5應用領域

1.銷售終端

銀行的讀卡機、收銀機、熱敏打印機、票據驗證、包裹跟蹤、自動售貨機。

2.身份識別設備

安全和生物特徵識別、公路自動收費系統。

3.工業自動化

現場數據採集器、電錶、可編程邏輯控制器(PLC)、工業縫紉機。

4.消費電子

計算機外設、遊戲手柄、玩具、萬能遙控器、衛星收音機、

5.建築安防/消防/HVAC

報警系統、控制面板。

6.醫療

心臟監控、便攜試儀器。

7.通訊領域

同聲翻譯系統、光纖接入控制、3G基站監控。

8.家電

電動自行車、變頻空調、洗衣機。

9.儀器儀表

電子秤、電錶、水錶。

小貼士:寄存器與庫函數的區別

首先,兩個都是C語言。從51過渡過來的,就先說寄存器操做。每一個MCU都有本身的寄存器,51是功能比較簡單的一種,相應的寄存器也比較少,咱們經常使用的就那麼幾個,像P0、P一、SMOD、TMOD之類的,這些存在於標準頭文件reg.h裏面。由於少,因此你們就直接去操做了。每一位對應的意義隨便翻一下手冊就看獲得,甚至作幾個小項目就記的很清楚了。因此作51開發的時候大多數都是直接操做寄存器。 
到了STM32,原理同樣,也是有本身的寄存器,可是做爲一款ARM內核的芯片,功能多了不少,寄存器天然也就多了不少,STM32的手冊有1000多頁,這時候想去像51那樣記住每一個寄存器已經不現實了,因此ST的工程師就給你們提供了庫函數這麼一個東西。庫函數裏面把STM32的全部寄存器用結構體一一對應而且封裝起來,並且提供了基本的配置函數。咱們要去操做配置某個外設的時候不須要再去翻眼花繚亂的數據手冊,直接找到庫函數描述拿來就能夠用,這樣就能把精力放在邏輯代碼的開發上,而不是去費力的研究一個芯片的外設要怎麼配置寄存器才能驅動起來。 
簡單講就是這些了,庫函數是爲了讓開發者從大量繁瑣的寄存器操做中脫離出來的一個文件包,在使用一個外設的時候讓開發者直接去調用相應的驅動函數而不是本身去翻手冊一個一個配置寄存器。 
有人說用庫函數掌握不到芯片的精髓,仁者見仁智者見智。熟悉一款芯片是在不斷的開發使用中逐漸瞭解並掌握的,調試的過程當中會遇到不少問題,會要求咱們去跟蹤相關寄存器的狀態,在整個框架都已經創建起來的基礎上再去對照手冊作具體到寄存器每一位的分析,代碼對照現象,很快就能積累起來經驗。

參考資料:http://www.makeru.com.cn/ 

相關文章
相關標籤/搜索