這是一本介紹如何使用STM32Cube組件學(xué)習(xí)STM32微控制器的入門教材,是一個工程師自身學(xué)習(xí)STM32過程的經(jīng)驗總結(jié)。全書緊緊圍繞《STM32F10xxx參考手冊》,結(jié)合STM32CubeF1軟件包提供的例程進(jìn)行分析、講解、重新生成,全面、系統(tǒng)地介紹了STM32F103的各個功能項。這是一本教你STM32微控制器具體學(xué)習(xí)方法的教材。其先從HAL固件庫例程入手,而后結(jié)合STM32參考手冊、數(shù)據(jù)手冊、ARM Cortex-M3權(quán)威指南、Cortex-M3編程手冊等ST和ARM兩公司提供的原始資料進(jìn)行深入、詳細(xì)的講解,*后,通過可視化圖形配置工具STM32CubeMX重新生成例程。該方法幾乎可以推廣于STM32微控制器的任何一款芯片,也是經(jīng)驗豐富的工程師*快了解一款芯片的獨門絕技。
前言
前兩年在編寫《輕松玩轉(zhuǎn)STM32微控制器》一書時,我就注意到ST公司在主推STM32Cube組件,不過由于自己是從標(biāo)準(zhǔn)外設(shè)固件庫(STM32F10x Standard Peripheral Library縮寫SPL)上手的,而且當(dāng)時網(wǎng)上也有不少對STM32Cube組件的負(fù)面評價,嘗試之后也發(fā)現(xiàn)它的一些不完善之處,因而當(dāng)時還是選擇標(biāo)準(zhǔn)外設(shè)固件庫進(jìn)行編寫的。
然而,隨著這兩年對STM32Cube組件的深入了解,以及ST公司對STM32Cube組件的不斷完善,加上自己也慢慢習(xí)慣于STM32CubeMX生成C語言工程的便捷,越來越覺得有必要寫一本有關(guān)STM32Cube組件的入門書籍。
其實,對一個新事物,大家總有一個從慢慢了解到習(xí)慣的過程。開始大家都是從標(biāo)準(zhǔn)外設(shè)庫入門的,而且網(wǎng)上所賣開發(fā)板提供的例程大多也是基于標(biāo)準(zhǔn)外設(shè)庫的,因而在學(xué)習(xí)與工作過程中,人們就慢慢習(xí)慣于標(biāo)準(zhǔn)外設(shè)庫的開發(fā)。其實,在ST公司推出STM32Cube組件和硬件抽象層固件庫(Hardware Abstracton Layer,HAL)時就招到很多人的質(zhì)疑和排斥,比較網(wǎng)上所賣開發(fā)板提供的例程你會發(fā)現(xiàn),STM32F1xx系列的開發(fā)板幾乎都是基于標(biāo)準(zhǔn)外設(shè)庫開發(fā)板時,清一色提供的都是基于HAL庫的,因為ST公司沒有推出基于該系列微控制器的SPL庫(至少目前沒有還推出)。由此可見,學(xué)習(xí)STM32微控制器,使用HAL庫和STM32Cube組件也是大勢所趨,即使資深工程師也在慢慢適應(yīng)技術(shù)的更新。
使用圖形配置工具STM32CubeMX可以快速便捷地生成STM32微控制器的C語言工程框架,開發(fā)者只需在工程中實現(xiàn)自己的應(yīng)用代碼就可以了。然而,這并不是說就不用對STM32微控制器進(jìn)行學(xué)習(xí)了。在配置STM32CubeMX的過程中你會發(fā)現(xiàn),還有很多STM32微控制器的知識點需要了解,才能有目的地配置,否則也只能對著該工具無所適從。
說到STM32Cube組件和STM32微控制器的學(xué)習(xí),ST公司提供了大量的技術(shù)資料。有關(guān)圖形配置工具STM32CubeMX和STM32CubeF1軟件包,可以重點參考的資料有:
STM32CubeMX for STM32 Configuration and initialization C code generation(STM32CubeMX用戶手冊,UM1718);
Getting started with STM32CubeF1 firmware package for STM32F1 Series(STM32CubeF1用戶手冊,UM1847);
Description of STM32F1xx HAL drivers(HAL庫用戶手冊,UM1850);
STM32Cube firmware examples for STM32F1 Series(STM32Cube應(yīng)用手冊,AN4724)。
有關(guān)STM32微控制器的參考資料就更多了,簡單列舉入門學(xué)習(xí)時需要重點參考的有:
《ARM
Cortex-M3權(quán)威指南》(宋巖譯);
The Cortex-M3 Technical Reference Manual(Cortex-M3技術(shù)參考手冊);
STM32F10xxx Reference manual(STM32F10xxx參考手冊,RM0008);
STM32F10xxx Cortex-M3 Pramming manual(STM32F10xxx
Cortex-M3編程手冊,PM0056);
STM32F10xxx Flash programming manual(STM32F10xxx Flash編程手冊,PM0075);
DS5319:STM32F103x8、STM32F103xB Datasheet(數(shù)據(jù)手冊);
DS5792:STM32F103xC、STM32F103xD、STM32F103xD Datasheet(數(shù)據(jù)手冊);
MDK-ARM開發(fā)環(huán)境、例程及幫助文檔;
其他相關(guān)器件數(shù)據(jù)手冊及網(wǎng)絡(luò)資料。
學(xué)習(xí)新知識,沒有資料可以參考時,會覺得很難;資料太多時,會不知所措,不知哪里應(yīng)該重點學(xué)習(xí),如何才能快速上手。寫作本書的目的就是結(jié)合ST公司和ARM公司提供的豐富資料,引領(lǐng)讀者找到屬于自己的學(xué)習(xí)方法。本書從ST的官網(wǎng)入手,指導(dǎo)讀者如何獲取技術(shù)資料,然后從STM32CubeF1軟件包提供的例程入手,引導(dǎo)讀者如何利用找到的資料,通過例程慢慢了解哪些資料應(yīng)該在什么時間段使用。通過例程的功能認(rèn)識、分析代碼、重新生成,慢慢將例程變?yōu)樽约旱膽?yīng)用實現(xiàn),在學(xué)習(xí)的過程中總結(jié)技術(shù)資料應(yīng)該如何利用、參考,同時總結(jié)出一套屬于自己的學(xué)習(xí)方法。
其實,從學(xué)習(xí)方法上引導(dǎo)讀者學(xué)習(xí),本就是我選擇技術(shù)寫作這條路的初衷。
《輕松玩51單片機(jī)》一書是通過簡單的例程,讓單片機(jī)入門者有一個輕松的入門過程,在快樂中學(xué)習(xí),在學(xué)習(xí)中找到興趣。
《AVR單片機(jī)工程師是怎么煉成的》一書在《輕松玩51單片機(jī)》中例程的基礎(chǔ)上引入了數(shù)據(jù)手冊(Datasheet)的參考,引導(dǎo)讀者學(xué)習(xí)嵌入式開發(fā)要學(xué)會使用數(shù)據(jù)手冊。
本書和《輕松玩轉(zhuǎn)STM32微控制器》是引導(dǎo)讀者如何通過產(chǎn)品官網(wǎng)獲取技術(shù)資料,而后通過例程入手學(xué)習(xí)如何使用豐富的技術(shù)資料。
通過這樣一個臺階一個臺階地學(xué)習(xí),希望讀者能夠找到一套自己的學(xué)習(xí)方法,由開始需要借助圖書,慢慢學(xué)會使用數(shù)據(jù)手冊,最終可以脫離圖書,直接根據(jù)自己的需要找到技術(shù)資料,從例程入門學(xué)習(xí),然后實現(xiàn)自己應(yīng)用工程的開發(fā)。
入門建議
我還算不上STM32微控制器的資深工程師,只是早入門了兩年而已,因而也不敢在讀者面前講太多高深的理論。本書只是告訴讀者如何利用ST公司和ARM公司提供的豐富免費資源快速入門。對于有信心可以自學(xué)的讀者,我在此提供一條學(xué)習(xí)路徑:
先閱讀STM32F10xxx參考手冊的前幾個章節(jié),對STM32有個初步的認(rèn)識;接下來再閱讀宋巖先生翻譯的《ARM Cortex-M3權(quán)威指南》,也不需要看完、吃透,對其內(nèi)核有個了解就可以了;然后就可以閱讀STM32CubeMX用戶手冊UM1718和STM32CubeF1用戶手冊UM1847,使用STM32CubeF1軟件包提供的例程,結(jié)合ST公司提供的硬件抽象層固件庫(HAL)的源代碼及其用戶手冊UM1850進(jìn)行學(xué)習(xí);在學(xué)習(xí)例程時要學(xué)會針對例程再去學(xué)習(xí)STM32F10xxx參考手冊的相關(guān)章節(jié)。
STM32入門的門檻相對于8位單片機(jī)是高了些,不過按上面的路徑入門之后,后面的路怎么走,讀者心里就會清楚許多。本書也正是按照這條路徑來引導(dǎo)讀者使用STM32CubeMX和MDK-ARM學(xué)習(xí)STM32微控制器的。書中并沒講什么高深的內(nèi)容,只是在例程適當(dāng)?shù)牡胤郊右宰⑨,讓新手少走點彎路,輕松入門而已。
開發(fā)板選型
目前市面上的開發(fā)板很多,質(zhì)量參差不齊,當(dāng)然是王婆賣爪,自賣自夸。其實從主芯片是沒有本質(zhì)區(qū)別的,不管使用的是L系列、M系列,還是H系列,都不會影響基本內(nèi)容的學(xué)習(xí)。也就是說,對于STM32入門,幾乎所有的開發(fā)板都可以滿足要求。它們的區(qū)別是板上有多少外設(shè),對后期進(jìn)一步的深入學(xué)習(xí)會有哪些影響。另外,也要看讀者想在哪方面進(jìn)一步深入學(xué)習(xí),不一定非要盲目選擇外設(shè)豐富的。例如,想學(xué)習(xí)物聯(lián)網(wǎng)、無線通信,當(dāng)然要選擇有這些接口、提供豐富例程的開發(fā)板;而如果只是想低成本入門,那么選擇一塊幾十元的板子就足夠了。
我也為本書選擇了一塊開發(fā)板:ST官方提供的Nucleo-F103RB,當(dāng)然對于入門學(xué)習(xí)來說,使用其他開發(fā)板也是完全可以的,本書只是根據(jù)開發(fā)板的原理圖來分析例程,最后使用STM32CubeMX重建例程而已。
致謝
本書由楊百軍編著,參與本書編寫的還有陳澤慧、陳錦權(quán)、段富軍、高維娜、龔欽青、黃得建、康磊、李楠、聶運中、王路、王盛、楊俊杰、張延杰和周宏云。另外,印舟、劉帥、黃雅琴、史蕊、于維濤、周樂平等也為本書的編寫提供了大量的幫助。
學(xué)然后知不足,教然后知困,由于作者水平有限,書中難免會出現(xiàn)一些錯誤,若讀者有疑問或建議,希望能發(fā)電子郵件與我溝通。我的電子郵箱:young45@126com,也可通過我的博客young45blogchinaunixnet來了解相關(guān)內(nèi)容。
最后,感謝我的家人和朋友,特別是父母,能放任我如此自由地寫作,沒有給我太多的壓力;也感謝洛陽的師長和同事:刁海南、張文勇、郭銳、齊文釗、陳劍、李為民、趙博、尹國利、謝永進(jìn)等,嵌入式這條路是在工作之后走上的,若沒有這些前輩的指點,也就沒有我的今天;感謝在大學(xué)、中學(xué)諄諄教導(dǎo)過我的老師:楊明祥、高克權(quán)、楊萬才、李小申、程東明、張曉紅、黎蔚、王輝、劉勇等,楊明祥老師幫我走進(jìn)了河南科技大學(xué)(原洛陽工學(xué)院),數(shù)理學(xué)院的老師為我鋪墊了良好的邏輯分析能力,計算機(jī)方向的老師幫我走進(jìn)了IT行業(yè),由衷地感謝他們的幫助和指引;還有前幾本書的讀者,特別是那些來信給出建議的讀者,如郭凱、張鋒、王帥陽、牛鵬舉、竹顯濤、劉帥、宋文帥等,他們的感謝、鼓勵和建議為我繼續(xù)寫作增添了動力;感謝曾經(jīng)幫助過我的師長、朋友:郝云鵬、黃桂平、欽桂勤、段富軍、許元霄、高金龍、申雷等,正是在他們的鼓勵與幫助下,我完成了這五本圖書的編寫,在此一并表示感謝;也感謝電子工業(yè)出版社的王敬棟、張劍、蘇穎杰及其他編輯朋友;最后,感謝人生路上伴我走過的朋友們。
楊百軍
楊百軍,筆名老楊,曾就職于中航工業(yè)集團(tuán),主要研究微控制器、微處理器及嵌入式系統(tǒng)的移植與優(yōu)化,具有豐富的傳感器與檢測技術(shù)、生物識別技術(shù)、遠(yuǎn)程無線抄表技術(shù)及鋰電池管理系統(tǒng)(BMS)的開發(fā)與教學(xué)經(jīng)驗。