1.1 STM32簡(jiǎn)介
ARM公司簡(jiǎn)介
ARM是Advanced RISC Machines的縮寫桂塞,它是一家微處理器行業(yè)的知名企業(yè)篮条,該企業(yè)設(shè)計(jì)了大量高性能刊愚、廉價(jià)踊跟、耗能低的RISC (精簡(jiǎn)指令集)處理器。公司的特點(diǎn)是只設(shè)計(jì)芯片,而不生產(chǎn)商玫。它將技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體箕憾、軟件和OEM廠商,并提供服務(wù)拳昌。
ARM(Advanced RISC Machines)有3種含義:
- 一個(gè)公司的名稱袭异;
- 一類微處理器的通稱;
- 一種技術(shù)的名稱炬藤。
ARM微處理器的特點(diǎn)
(1)體積小御铃、低功耗、低成本沈矿、高性能上真;
(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件羹膳;
(3)大量使用寄存器睡互,指令執(zhí)行速度更快;
(4)大多數(shù)數(shù)據(jù)操作都在寄存器中完成陵像;
(5)尋址方式靈活簡(jiǎn)單就珠,執(zhí)行效率高;
(6)指令長(zhǎng)度固定醒颖。
ARM微處理器系列
ARM處理器的產(chǎn)品系列非常廣嗓违,包括ARM7、ARM9图贸、ARM9E、ARM10E冕广、ARM11和Cortex等疏日。以及其它廠商基于ARM體系結(jié)構(gòu)的處理器,除了具有ARM體系結(jié)構(gòu)的共同特點(diǎn)以外撒汉,每一系列提供一套特定的性能來(lái)滿足設(shè)計(jì)者對(duì)功耗沟优、性能、體積的需求睬辐。
基于ARMv7版本的ARM Cortex系列產(chǎn)品由A挠阁、R、M三個(gè)系列組成溯饵,具體分類延續(xù)了一直以來(lái)ARM面向具體應(yīng)用設(shè)計(jì)CPU的思路侵俗。
其中:
A應(yīng)用處理器(Application Processor )系列
R實(shí)時(shí)控制處理(Real Time Control )系列
M微控制器(Micro Controller )系列
- CortexTM-R4處理器簡(jiǎn)介
該處理器是首款基于ARMv7架構(gòu)的高級(jí)嵌入式處理器,其主要目標(biāo)為產(chǎn)量巨大的高級(jí)嵌入式應(yīng)用系統(tǒng)丰刊,如硬盤隘谣,噴墨式打印機(jī),以及汽車安全系統(tǒng)等等啄巧。
- CortexTM-R4F處理器簡(jiǎn)介
該處理器在CortexTM-R4處理器的基礎(chǔ)上加入了代碼錯(cuò)誤校正(ECC)技術(shù)寻歧,浮點(diǎn)運(yùn)算單元(FPU)以及DMA綜合配置的能力掌栅,增強(qiáng)了處理器在存儲(chǔ)器保護(hù)單元、緩存码泛、緊密耦合存儲(chǔ)器猾封、DMA訪問(wèn)以及調(diào)試方面的能力。
- CortexTM-A8處理器簡(jiǎn)介
該處理器是ARM公司所開發(fā)的基于ARMv7架構(gòu)的首款應(yīng)用級(jí)處理器噪珊,其特色是運(yùn)用了可增加代碼密度和加強(qiáng)性能的技術(shù)晌缘、可支持多媒體以及信號(hào)處理能力的NEONTM技術(shù)、以及能夠支持Java和其他文字代碼語(yǔ)言的提前即時(shí)編譯的Jazelle@RTC技術(shù)卿城。眾多先進(jìn)的技術(shù)使其適用于家電以及電子行業(yè)等各種高端的應(yīng)用領(lǐng)域枚钓。
- CortexTM-M3處理器簡(jiǎn)介
Cortex-M3處理器是一個(gè)低功耗的處理器,具有門數(shù)少瑟押,中斷延遲小搀捷,調(diào)試容易等特點(diǎn)。它是為功耗和價(jià)格敏感的應(yīng)用領(lǐng)域而專門設(shè)計(jì)的多望、具有較高性能的處理器嫩舟,應(yīng)用范圍可從低端微控制器到復(fù)雜SoC。
Cortex-M3處理器使用了ARMv7-M體系結(jié)構(gòu)怀偷,采用了純Thumb2指令的執(zhí)行方式家厌,具有極高的運(yùn)算能力和中斷相應(yīng)能力,是一個(gè)可綜合的椎工、高度可配置的處理器饭于。它包含了一個(gè)高效的哈佛結(jié)構(gòu)三級(jí)流水線,可提供1.25DMIPS/MHz的性能维蒙。在一個(gè)具有32個(gè)物理中斷的標(biāo)準(zhǔn)處理器上實(shí)現(xiàn)(0.13umMetro@50MHz),達(dá)到了突出的0.06mW/MHz能效比掰吕。
Cortex-M3處理器在高性能內(nèi)核基礎(chǔ)上,集成了多種系統(tǒng)外設(shè)颅痊,可以滿足不同應(yīng)用對(duì)成本和性能的要求殖熟。處理器是全部可綜合、高度可定制的(包括物理中斷斑响、系統(tǒng)調(diào)試等)菱属,Cortex-M3還有一個(gè)可選的細(xì)粒度的(fine-granularity)存儲(chǔ)器保護(hù)單元(MPU)和一個(gè)嵌入式跟蹤宏單元(ETM)。
為了降低成本舰罚,Cortex-M3處理器采用了與系統(tǒng)部件緊耦合的實(shí)現(xiàn)方法纽门,來(lái)縮小芯片面積,其內(nèi)核面積比現(xiàn)有的三級(jí)流水線內(nèi)核縮小了30%沸停。Cortex-M3處理器實(shí)現(xiàn)了Thumb-2指令集架構(gòu)膜毁,具有很高的代碼密度,可降低存儲(chǔ)器需求,并能達(dá)到非常接近32位ARM指令集的性能瘟滨。
對(duì)于系統(tǒng)和軟件開發(fā)候醒,Cortex-M3處理器具有以下優(yōu)勢(shì):
(1)小的處理器內(nèi)核、系統(tǒng)和存儲(chǔ)器杂瘸,可降低器件成本倒淫;
(2)完整的電源管理,很低的功耗败玉;
(3)突出的處理器性能敌土,可滿足挑戰(zhàn)性的應(yīng)用需求;
(4)快速的中斷處理运翼,滿足高速返干、臨界的控制應(yīng)用;
(5)可選的存儲(chǔ)器保護(hù)單元(MPU)血淌,提供平臺(tái)級(jí)的安全性矩欠;
(6)增強(qiáng)的系統(tǒng)調(diào)試功能,可以加快開發(fā)進(jìn)程悠夯;
(7)沒(méi)有匯編代碼要求癌淮,簡(jiǎn)化系統(tǒng)開發(fā);
(8)寬廣的適用范圍:從超低成本微控制器到高性能Soc沦补。
Cortex-M3主要應(yīng)用于汽車車身系統(tǒng)乳蓄,工業(yè)控制系統(tǒng)和無(wú)線網(wǎng)絡(luò)等對(duì)功耗和成本敏感的嵌入式應(yīng)用領(lǐng)域。目前最便宜的基于該內(nèi)核的ARM單片機(jī)售價(jià)為1美元夕膀。
1.2 為什么學(xué)習(xí) STM32
可以發(fā)現(xiàn)虚倒,在嵌入式領(lǐng)域 STM32 芯片介于低端和高端之間,它相對(duì)于普通的 8/16 位機(jī)有更多的片上外設(shè)产舞,更先進(jìn)的內(nèi)核架構(gòu)裹刮,可以運(yùn)行 μC/OS 等實(shí)時(shí)操作系統(tǒng) ;相對(duì)于可運(yùn)行 Linux 操作系統(tǒng)的高端 CPU庞瘸,其成本低,實(shí)時(shí)性強(qiáng)赠叼。這個(gè)定位使得 STM32 不僅占領(lǐng)了大部分中端控制器的市場(chǎng)擦囊,更是成為提升開發(fā)者技術(shù)的優(yōu)良過(guò)渡平臺(tái),為后續(xù)的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)嘴办。
本節(jié)系統(tǒng)介紹了嵌入式工程師的技術(shù)成長(zhǎng)路線瞬场,并詳細(xì)介紹技術(shù)路線中的崗位設(shè)置和知識(shí)結(jié)構(gòu),讓讀者對(duì)于嵌入式工程師有一個(gè)全面系統(tǒng)地了解涧郊,并在此基礎(chǔ)上引導(dǎo)工程師規(guī)劃自己職業(yè)生涯贯被。在本章的最后,作為承上啟下的內(nèi)容,從為什么學(xué)習(xí) STM32 和如何學(xué)習(xí) STM32 這兩個(gè)話題入手彤灶,引導(dǎo)讀者開始對(duì)于 STM32 的庫(kù)開發(fā)方式有個(gè)初步地理解看幼。
1.2.1 嵌入式技術(shù)知識(shí)結(jié)構(gòu)
嵌入式技術(shù)是專用計(jì)算機(jī)系統(tǒng)技術(shù),它以應(yīng)用為核心幌陕,以計(jì)算機(jī)技術(shù)為基礎(chǔ)诵姜,軟硬件均可裁剪,適用在對(duì)功能搏熄、穩(wěn)定性棚唆、功耗有嚴(yán)格要求的系統(tǒng)之中。嵌入式技術(shù)的開發(fā)人員需要對(duì)整個(gè)計(jì)算機(jī)體系(從底層硬件到軟件操作系統(tǒng))都有了解心例,而在這個(gè)體系之中宵凌,每個(gè)部分都可以分出一些小領(lǐng)域,因而技術(shù)要求很高止后,見圖 3瞎惫。
這個(gè)圖只是粗略地概括了嵌入式技術(shù)的知識(shí)結(jié)構(gòu),但從中已經(jīng)可以看出它涉及的知識(shí)面非常廣坯门,難怪眾多學(xué)生甚至技術(shù)人員總是“迷梦⒓ⅲ”。不少電子專業(yè)出身的嵌入式技術(shù)人員主要從事硬件抽象層(中間層)的開發(fā)古戴,這一層是溝通嵌入式系統(tǒng)的硬件層和軟件操作系統(tǒng)的橋梁欠橘,因而主要的工作是開發(fā)驅(qū)動(dòng)程序、板級(jí)應(yīng)用支持现恼、協(xié)調(diào)軟硬件的開發(fā)肃续,因而對(duì)軟硬件都要有深入的了解。
1.2.2 嵌入式工程師成長(zhǎng)之路
1.從學(xué)生成為工程師
若希望從事硬件抽象層的開發(fā)叉袍,應(yīng)該如何學(xué)習(xí)這些知識(shí)始锚,才能從學(xué)生過(guò)渡到工程師呢?見圖 1- 2喳逛,對(duì)于希望成為其他方向的嵌入式技術(shù)人員也可以參考瞧捌。從圖 1- 2 可以看出,越往上層深入润文,就越接近于純軟件開發(fā)姐呐,但這并不代表嵌入式技術(shù)人員就不需要了解硬件,相反典蝌,上層的知識(shí)都是以底層為基礎(chǔ)的曙砂,很多人說(shuō)的“做嵌入式軟件開發(fā)至少要讀懂原理圖”就是這個(gè)道理。
2.職業(yè)規(guī)劃
在嵌入式技術(shù)領(lǐng)域的公司骏掀,除了工程師還分很多職業(yè)崗位鸠澈。一般公司的研發(fā)部門職位見圖 1- 3柱告。
一般需要 3 ~ 5 年過(guò)渡到下一級(jí)的崗位,在小公司里項(xiàng)目經(jīng)理一般也兼任部門經(jīng)理笑陈。部門經(jīng)理不一定要懂技術(shù)际度,并不是非由項(xiàng)目經(jīng)理升職而成。直接與技術(shù)相關(guān)的是開發(fā)工程師和系統(tǒng)架構(gòu)師新锈,開發(fā)工程師會(huì)針對(duì)嵌入式技術(shù)的不同領(lǐng)域有不同的區(qū)分甲脏。在小公司里,熟悉軟硬件的跨領(lǐng)域工程師很受歡迎妹笆,而大公司則分工明確块请,更看重在某領(lǐng)域研究得深入的開發(fā)工程師。作為系統(tǒng)架構(gòu)師拳缠,則需要熟悉整個(gè)嵌入式領(lǐng)域墩新,能夠協(xié)調(diào)不同領(lǐng)域的開發(fā)工程師進(jìn)行項(xiàng)目開發(fā)。
對(duì)于職業(yè)規(guī)劃窟坐,不同的人有不同的見解海渊,情況千差萬(wàn)別,以上所述僅供讀者參考哲鸳。
1.3學(xué)習(xí)STM32需要哪些基礎(chǔ)
首先要對(duì)C語(yǔ)言有一定的了解臣疑,不用學(xué)到精通,只要會(huì)使用一些簡(jiǎn)單的命令語(yǔ)句徙菠。比如賦值語(yǔ)句讯沈、if語(yǔ)句、for循環(huán)語(yǔ)句婿奔、while語(yǔ)句缺狠、一維數(shù)組、二維數(shù)組等萍摊。還有一點(diǎn)需要重點(diǎn)學(xué)習(xí)的是函數(shù)的定義挤茄、調(diào)用,參數(shù)的傳遞與參數(shù)的返回冰木。推薦給大家一本學(xué)C語(yǔ)言的書籍《譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì)》穷劈,這本書也是很多大學(xué)里的教材,寫的很詳細(xì)踊沸。
當(dāng)你學(xué)會(huì)了C語(yǔ)言囚衔,說(shuō)明你已經(jīng)掌握了軟件的基礎(chǔ)了,接下來(lái)需要學(xué)習(xí)一些硬件的基礎(chǔ)知識(shí)雕沿。可以到書店買兩本數(shù)字電路與模擬電路相關(guān)的書籍猴仑,建議你不用學(xué)的太深审轮,只要簡(jiǎn)單的了解能看懂原理圖就可以了肥哎,等到你真正到工作崗位上,大的公司里軟件開發(fā)人員和硬件設(shè)計(jì)人員都是分開的疾渣,只有專心做一件事情才能做的精益求精篡诽,有一個(gè)好的發(fā)展。如果你以前學(xué)過(guò)51單片機(jī)榴捡,你一定熟悉C語(yǔ)言杈女、模擬電路和數(shù)字電路。那么你就可以直接學(xué)習(xí)STM32吊圾。需要注意的是我們以前學(xué)習(xí)51單片機(jī)時(shí)都是直接操作寄存器达椰,而現(xiàn)在我們學(xué)習(xí)STM32大部分都是調(diào)用庫(kù)函數(shù)。
我們對(duì)初學(xué)者的要求是具有基本的單片機(jī)基礎(chǔ)项乒,如 51啰劲、AVR 等,曾使用 C 語(yǔ)言寫過(guò)單片機(jī)程序檀何,但不需精通蝇裤。讀者在學(xué)習(xí) STM32 的時(shí)候,無(wú)需太擔(dān)心自己的基礎(chǔ)频鉴,我們更需要的是學(xué)習(xí)的勇氣栓辜,需要的是拿下 STM32 的決心。試問(wèn)垛孔,我們剛開始學(xué)習(xí)最簡(jiǎn)單的單片機(jī)的時(shí)候藕甩,是不是也沒(méi)基礎(chǔ)呢,是不是因此就停止了自己學(xué)習(xí)的腳步了呢似炎?不是的辛萍。我們需要做的是認(rèn)定一個(gè)目標(biāo),行動(dòng)起來(lái)羡藐,堅(jiān)持朝向目標(biāo)的苦行贩毕,其中艱辛芳華,唯你自知仆嗦。
1.4 如何學(xué)習(xí) STM32
如果你去問(wèn)業(yè)內(nèi)人士辉阶,怎樣學(xué)習(xí)STM32,他們都會(huì)說(shuō)多實(shí)踐瘩扼,做多了自然就會(huì)了谆甜。可是我覺得對(duì)于一名初學(xué)者集绰,沒(méi)有一點(diǎn)的理論基礎(chǔ)规辱,根本就無(wú)從下手,不知道從何做起栽燕。我們常說(shuō)實(shí)踐是在有理論的指導(dǎo)下進(jìn)行的罕袋,沒(méi)有理論的實(shí)踐是蠻干改淑,沒(méi)有實(shí)踐的理論那是空談。那么怎樣獲得理論知識(shí)那浴讯?最好的辦法就是看視頻教程與配套的書籍朵夏。建議初學(xué)者多看視頻教程,一遍不會(huì)就看兩遍榆纽。然后再仔細(xì)看看配套的書籍仰猖,當(dāng)我們有了理論基礎(chǔ),就可以動(dòng)手實(shí)踐了奈籽。實(shí)踐也要由小到大饥侵,由淺入深的進(jìn)行,別總想一步登天唠摹。知識(shí)都是一點(diǎn)一滴的逐漸積累起來(lái)的爆捞。
因?yàn)?STM32 的開發(fā)方式較普通的單片機(jī)開發(fā)還是有很大的不同,所以學(xué)習(xí)時(shí)要注意如下幾點(diǎn) :
1)轉(zhuǎn)變思維勾拉,適應(yīng)使用固件庫(kù)的開發(fā)方式煮甥,加強(qiáng)運(yùn)用 C 語(yǔ)言的能力,建立工程意
識(shí)藕赞。
2)熟悉 Cortex-M 系列芯片架構(gòu)成肘,了解 CMSIS 標(biāo)準(zhǔn),熟悉 STM32 的總線架構(gòu)斧蜕。
3)掌握 I 2 C双霍、SPI、SDIO批销、CAN洒闸、TCP/IP 等各種通信協(xié)議,掌握了這些協(xié)議均芽,開發(fā)軟件驅(qū)動(dòng)就變得相對(duì)容易了丘逸。
上面有關(guān)的內(nèi)容本教程都會(huì)詳細(xì)講解,但“紙上得來(lái)終覺淺掀宋,絕知此事要躬行”深纲,讀者親自編程實(shí)踐是不能少的。
基礎(chǔ)入門篇可以幫助初學(xué)者快速上手 STM32劲妙,寫出自己的應(yīng)用程序湃鹊。以點(diǎn)亮 LED 燈的實(shí)例,從軟件工程的角度深入剖析什么是固件庫(kù)镣奋、為什么使用固件庫(kù)和怎樣使用固件庫(kù) 币呵;從 STM32 固件庫(kù)、新建工程侨颈、編譯和下載程序出發(fā)余赢,了解如何操作 GPIO掸驱,讓新手步步為營(yíng),盡享 STM32 的學(xué)習(xí)樂(lè)趣没佑。
整套教程主要分為四部分:
1.入門篇 ,主要介紹STM32及環(huán)境搭建温赔,新建工程以及下載代碼及調(diào)試等蛤奢;
2.基礎(chǔ)篇,主要講解的是STM32F103VET6芯片內(nèi)部的資源陶贼。包括(TIMER啤贩、CAN、ADC拜秧、DAC痹屹、RTC、DMA枉氮、USART等)志衍;
3.外設(shè)篇,主要講解的是外圍芯片的使用方法聊替。包(24C04楼肪、FLASH芯片、紅外發(fā)射與接收惹悄、MP3春叫、FM收音機(jī)、USB通訊泣港、以太網(wǎng)暂殖、觸摸屏等);
4.系統(tǒng)篇当纱,主要講解ucosⅡ?qū)崟r(shí)操作系統(tǒng)和ucgui圖形支持系統(tǒng)的移植與使用方法呛每。
1.5應(yīng)用領(lǐng)域
1.銷售終端
銀行的讀卡機(jī)、收銀機(jī)惫东、熱敏打印機(jī)莉给、票據(jù)驗(yàn)證、包裹跟蹤廉沮、自動(dòng)售貨機(jī)颓遏。
2.身份識(shí)別設(shè)備
安全和生物特征識(shí)別、公路自動(dòng)收費(fèi)系統(tǒng)滞时。
3.工業(yè)自動(dòng)化
現(xiàn)場(chǎng)數(shù)據(jù)采集器叁幢、電表、可編程邏輯控制器(PLC)坪稽、工業(yè)縫紉機(jī)曼玩。
4.消費(fèi)電子
計(jì)算機(jī)外設(shè)鳞骤、游戲手柄、玩具黍判、萬(wàn)能遙控器豫尽、衛(wèi)星收音機(jī)、
5.建筑安防/消防/HVAC
報(bào)警系統(tǒng)顷帖、控制面板美旧。
6.醫(yī)療
心臟監(jiān)控、便攜試儀器贬墩。
7.通信領(lǐng)域
同聲翻譯系統(tǒng)榴嗅、光纖接入控制、3G基站監(jiān)控陶舞。
8.家電
電動(dòng)自行車嗽测、變頻空調(diào)、洗衣機(jī)肿孵。
9.儀器儀表
電子秤唠粥、電表、水表颁井。
小貼士:寄存器與庫(kù)函數(shù)的區(qū)別
首先厅贪,兩個(gè)都是C語(yǔ)言。從51過(guò)渡過(guò)來(lái)的雅宾,就先說(shuō)寄存器操作养涮。每個(gè)MCU都有自己的寄存器,51是功能比較簡(jiǎn)單的一種眉抬,相應(yīng)的寄存器也比較少贯吓,我們常用的就那么幾個(gè),像P0蜀变、P1悄谐、SMOD、TMOD之類的库北,這些存在于標(biāo)準(zhǔn)頭文件reg.h里面爬舰。因?yàn)樯伲源蠹揖椭苯尤ゲ僮髁撕摺C恳晃粚?duì)應(yīng)的意義隨便翻一下手冊(cè)就看得到情屹,甚至做幾個(gè)小項(xiàng)目就記的很清楚了。所以做51開發(fā)的時(shí)候大多數(shù)都是直接操作寄存器杂腰。
到了STM32垃你,原理一樣,也是有自己的寄存器,但是作為一款A(yù)RM內(nèi)核的芯片惜颇,功能多了很多皆刺,寄存器自然也就多了很多,STM32的手冊(cè)有1000多頁(yè)凌摄,這時(shí)候想去像51那樣記住每個(gè)寄存器已經(jīng)不現(xiàn)實(shí)了羡蛾,所以ST的工程師就給大家提供了庫(kù)函數(shù)這么一個(gè)東西。庫(kù)函數(shù)里面把STM32的所有寄存器用結(jié)構(gòu)體一一對(duì)應(yīng)并且封裝起來(lái)锨亏,而且提供了基本的配置函數(shù)林说。我們要去操作配置某個(gè)外設(shè)的時(shí)候不需要再去翻眼花繚亂的數(shù)據(jù)手冊(cè),直接找到庫(kù)函數(shù)描述拿來(lái)就可以用屯伞,這樣就能把精力放在邏輯代碼的開發(fā)上,而不是去費(fèi)力的研究一個(gè)芯片的外設(shè)要怎么配置寄存器才能驅(qū)動(dòng)起來(lái)豪直。
簡(jiǎn)單講就是這些了劣摇,庫(kù)函數(shù)是為了讓開發(fā)者從大量繁瑣的寄存器操作中脫離出來(lái)的一個(gè)文件包,在使用一個(gè)外設(shè)的時(shí)候讓開發(fā)者直接去調(diào)用相應(yīng)的驅(qū)動(dòng)函數(shù)而不是自己去翻手冊(cè)一個(gè)一個(gè)配置寄存器弓乙。
有人說(shuō)用庫(kù)函數(shù)掌握不到芯片的精髓末融,仁者見仁智者見智。熟悉一款芯片是在不斷的開發(fā)使用中逐漸了解并掌握的暇韧,調(diào)試的過(guò)程中會(huì)遇到很多問(wèn)題勾习,會(huì)要求我們?nèi)ジ櫹嚓P(guān)寄存器的狀態(tài),在整個(gè)框架都已經(jīng)建立起來(lái)的基礎(chǔ)上再去對(duì)照手冊(cè)做具體到寄存器每一位的分析懈玻,代碼對(duì)照現(xiàn)象巧婶,很快就能積累起來(lái)經(jīng)驗(yàn)。
歡迎訪問(wèn)我的網(wǎng)站: