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