嵌入式入門 -第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處理器的產品系列非常廣,包括ARM7、ARM9、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大部分都是調用庫函數。 
我們對初學者的要求是具有基本的單片機基礎,如 51、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.外設篇,主要講解的是外圍芯片的使用方法。包(24C04、FLASH芯片、紅外發射與接收、MP3、FM收音機、USB通訊、以太網、觸摸屏等); 
4.系統篇,主要講解ucosⅡ實時操作系統和ucgui圖形支持系統的移植與使用方法。

1.5應用領域

1.銷售終端

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

2.身份識別設備

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

3.工業自動化

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

4.消費電子

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

5.建築安防/消防/HVAC

報警系統、控制面板。

6.醫療

心臟監控、便攜試儀器。

7.通信領域

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

8.家電

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

9.儀器儀表

電子秤、電表、水表。

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM