本書主要介紹STM32的庫函數(shù),以及如何使用庫的方式進(jìn)行開發(fā),使初學(xué)者能夠在此基礎(chǔ)上迅速入門,掌握STM32的開發(fā)方法。本書基于ARM—CortexM3內(nèi)核的STM32F103芯片,緊緊圍繞“庫”展開,系統(tǒng)地講述了STM32固件庫的原理、使用方法。
前言再版說明本書是《STM32庫開發(fā)實(shí)戰(zhàn)指南》的第2版,第1版解決了當(dāng)時(shí)市面上幾乎沒有關(guān)于STM32庫開發(fā)技術(shù)書籍的燃眉之急,并且受到了廣大讀者的好評。
但由于技術(shù)的革新、讀者的反饋以及自身經(jīng)驗(yàn)的積累,我們發(fā)現(xiàn)第1版書籍還存在一些缺陷:目前配套的硬件開發(fā)板已更新?lián)Q代,部分程序已不再適用;從寄存器開發(fā)過渡到庫函數(shù)開發(fā)的教學(xué)過程不夠平滑;介紹STM32各種外設(shè)的深入度不足。
因此,第2版中對大部分的內(nèi)容進(jìn)行了改進(jìn):升級代碼,匹配最新的開發(fā)板;增加了自行編寫庫函數(shù)的入門章節(jié),引導(dǎo)讀者加深對庫函數(shù)原理的理解;每個(gè)章節(jié)增加了STM32外設(shè)框圖剖析,增加了庫函數(shù)結(jié)構(gòu)體說明,使讀者更了解基本原理,便于以后遷移至不同的芯片平臺(tái);以本書為教材,制作了教學(xué)課件,并錄制了非常詳細(xì)的教學(xué)視頻,使之更適合于高校、培訓(xùn)機(jī)構(gòu)及員工培訓(xùn)時(shí)使用。
本書的學(xué)習(xí)順序本書分為基礎(chǔ)篇和提高篇;A(chǔ)篇需要按照順序?qū)W習(xí),講究循序漸進(jìn),步步為營。學(xué)習(xí)完基礎(chǔ)篇之后,已經(jīng)算是基本入門STM32開發(fā)了。提高篇屬于高級例程,學(xué)習(xí)的時(shí)候并不一定要按照書中的章節(jié)排序,可根據(jù)需要跳躍式地學(xué)習(xí)。
本書的編寫風(fēng)格本書著重講解STM32F103的外設(shè)以及外設(shè)的應(yīng)用,力爭全面分析每個(gè)外設(shè)的功能框圖和外設(shè)的使用方法,讓讀者可以全面、細(xì)致地掌握STM32F103系列芯片。基本每個(gè)章節(jié)對應(yīng)一個(gè)外設(shè),每章的主要內(nèi)容大致分為3個(gè)部分:第1部分為簡介,第2部分為外設(shè)功能框圖分析,第3部分為代碼講解。
外設(shè)簡介是作者用自己的話把外設(shè)概括性地介紹一遍,力圖語句簡短,通俗易懂,并不會(huì)完全照抄數(shù)據(jù)手冊的介紹。
外設(shè)功能框圖分析則是每章的重點(diǎn),該部分會(huì)詳細(xì)講解功能框圖中每個(gè)部分的作用,這是學(xué)習(xí)STM32F103的精髓所在,掌握了整個(gè)外設(shè)的框圖則可以熟練地使用該外設(shè),進(jìn)而熟練地編程,日后學(xué)習(xí)其他型號的單片機(jī)也將會(huì)得心應(yīng)手。因?yàn)榧词箚纹瑱C(jī)的型號不同,外設(shè)的框圖也是基本一樣的。這一步的學(xué)習(xí)比較枯燥,但是必須下功夫?qū)W,方能達(dá)成所愿。
代碼分析則是針對使用該外設(shè)的實(shí)驗(yàn)進(jìn)行講解,主要分析代碼流程和一些編程的注意事項(xiàng)。在掌握了框圖之后,代碼部分則是手到擒來。
本書的參考資料本書的主要參考資料為:《STM32F10x-?中文參考手冊》《STM32F10x-?數(shù)據(jù)手冊》以及《Cortex-M3權(quán)威指南》。它們是ST及ARM官方的資料,屬于精華版,全面翔實(shí),無所不包。限于篇幅問題,本書不可能面面俱到,只側(cè)重于框圖分析和代碼講解,有關(guān)寄存器的詳細(xì)描述則略過。在學(xué)習(xí)本書的時(shí)候,涉及寄存器描述部分還請參考上述兩本手冊,這樣學(xué)習(xí)效果會(huì)更佳。
本書的配套資料硬件平臺(tái)本書配套的硬件平臺(tái)為:秉火STM32F103-指南者,型號簡稱為“指南者”,見圖1。學(xué)習(xí)的時(shí)候如果基于該硬件平臺(tái)做實(shí)驗(yàn),必會(huì)達(dá)到事半功倍的效果,可以省去中間移植時(shí)遇到的各種問題。
工程代碼、原理圖及課件本書中涉及的工程代碼、開發(fā)板原理圖以及課件均在秉火論壇提供:http://www.firebbs.cn。
部分章節(jié)涉及的各種通信協(xié)議、字符編碼以及芯片的數(shù)據(jù)手冊均有相應(yīng)的參考資料,如《I2C總線協(xié)議》《SPI總線協(xié)議》和《AT24C02》(EEPROM數(shù)據(jù)手冊)等電子文檔,也包含在相應(yīng)章節(jié)的課件文件夾中。在閱讀本書時(shí)請一定打開這些資料來配合閱讀,特別是涉及通信協(xié)議的章節(jié)。
教學(xué)視頻為提高學(xué)習(xí)效率,我們?yōu)楸緯谱髁伺涮椎恼n件PPT以及教學(xué)視頻,請到論壇http://www.firebbs.cn上觀看或下載。
本書的技術(shù)論壇如果在學(xué)習(xí)過程中遇到問題,可以到論壇http://www.firebbs.cn上發(fā)帖交流,開源共享,共同進(jìn)步。
鑒于水平有限,本書難免有紕漏,熱心的讀者也可把勘誤發(fā)到論壇上,好讓我們的技術(shù)不斷完善,做得更好。祝廣大讀者學(xué)習(xí)愉快,STM32的世界中,秉火與您同行!
劉火良,網(wǎng)名野火,是目前國內(nèi)大的電子工程師社區(qū)阿莫論壇的版主,也是業(yè)內(nèi)暢銷的STM32開發(fā)板供應(yīng)商野火嵌入式工作室的聯(lián)合創(chuàng)始人。野火工作室是嵌入式開發(fā)方式中庫開發(fā)方式的倡導(dǎo)者,也是針對初學(xué)者在業(yè)內(nèi)推動(dòng)學(xué)習(xí)庫開發(fā)方法的排頭兵。
目 錄
前言
第一部分 基礎(chǔ)篇
第1章 如何安裝KEIL5 2
1.1 溫馨提示 2
1.2 獲取KEIL5安裝包 2
1.3 開始安裝KEIL5 3
1.4 安裝STM32芯片包 5
第2章 如何用DAP仿真器下載程序 7
2.1 仿真器簡介 7
2.2 硬件連接 7
2.3 仿真器配置 8
2.4 選擇目標(biāo)板 9
2.5 下載程序 10
第3章 如何用串口下載程序 11
3.1 安裝USB轉(zhuǎn)串口驅(qū)動(dòng) 11
3.2 硬件連接 11
3.3 開始下載 12
3.4 ISP一鍵下載原理分析 14
3.4.1 ISP簡介 14
3.4.2 ISP普通下載 14
3.4.3 BOOT配置 15
3.4.4 ISP一鍵下載 15
第4章 初識STM32 17
4.1 什么是STM32 17
4.2 STM32能做什么 17
4.2.1 智能手環(huán) 18
4.2.2 微型四軸飛行器 19
4.2.3 淘寶眾籌 19
4.3 STM32怎么選型 20
4.3.1 STM32分類 20
4.3.2 STM32命名方法 21
4.3.3 選擇合適的MCU 21
第5章 什么是寄存器 24
5.1 STM32芯片外觀 24
5.2 芯片里面有什么 25
5.3 存儲(chǔ)器映射 27
5.4 寄存器映射 30
5.4.1 STM32的外設(shè)地址映射 31
5.4.2 C語言對寄存器的封裝 33
第6章 新建工程——寄存器版 38
6.1 新建本地工程文件夾 38
6.2 新建工程 39
6.3 下載程序 42
第7章 使用寄存器點(diǎn)亮LED 43
7.1 GPIO簡介 43
7.2 GPIO框圖剖析 43
7.2.1 基本結(jié)構(gòu)分析 43
7.2.2 GPIO工作模式 47
7.3 實(shí)驗(yàn):使用寄存器點(diǎn)亮LED 48
7.3.1 硬件連接 49
7.3.2 啟動(dòng)文件 50
7.3.3 stm32f10x.h文件 51
7.3.4 main文件 52
7.3.5 下載驗(yàn)證 56
第8章 自己寫庫——構(gòu)建庫函數(shù)雛形 57
8.1 什么是STM32函數(shù)庫 57
8.2 為什么采用庫來開發(fā)及學(xué)習(xí) 58
8.3 實(shí)驗(yàn):構(gòu)建庫函數(shù)雛形 58
8.3.1 外部寄存器結(jié)構(gòu)體定義 59
8.3.2 外設(shè)存儲(chǔ)器映射 60
8.3.3 外設(shè)聲明 60
8.3.4 定義位操作函數(shù) 62
8.3.5 定義初始化結(jié)構(gòu)體 65
8.3.6 定義引腳模式的枚舉類型 65
8.3.7 定義GPIO初始化函數(shù) 69
8.3.8 全新面貌,使用函數(shù)點(diǎn)亮LED 72
8.3.9 下載驗(yàn)證 73
8.3.10 總結(jié) 73
第9章 初識STM32標(biāo)準(zhǔn)庫 75
9.1 CMSIS標(biāo)準(zhǔn)及庫層次關(guān)系 75
9.1.1 庫目錄、文件簡介 76
9.1.2 庫各文件間的關(guān)系 81
9.2 使用幫助文檔 81
9.2.1 常用官方資料 81
9.2.2 初識庫函數(shù) 83
第10章 新建工程——庫函數(shù)版 85
10.1 新建本地工程文件夾 85
10.2 新建工程 86
第11章 GPIO輸出——使用固件庫點(diǎn)亮LED 93
11.1 硬件設(shè)計(jì) 93
11.2 軟件設(shè)計(jì) 93
11.2.1 編程要點(diǎn) 94
11.2.2 代碼分析 94
11.2.3 下載驗(yàn)證 99
11.3 STM32標(biāo)準(zhǔn)庫補(bǔ)充知識 99
第12章 GPIO輸入——按鍵檢測 102
12.1 硬件設(shè)計(jì) 102
12.2 軟件設(shè)計(jì) 103
12.2.1 編程要點(diǎn) 103
12.2.2 代碼分析 103
12.3 下載驗(yàn)證 105
第13章 GPIO——位帶操作 106
13.1 位帶簡介 106
13.1.1 外設(shè)位帶區(qū) 106
13.1.2 SRAM位帶區(qū) 107
13.1.3 位帶區(qū)和位帶別名區(qū)地址轉(zhuǎn)換 107
13.2 GPIO位帶操作 108
第14章 啟動(dòng)文件 111
14.1 啟動(dòng)文件簡介 111
14.2 查找ARM匯編指令 111
14.3 啟動(dòng)文件代碼講解 111
第15章 RCC——使用HSE/HSI配置時(shí)鐘 118
15.1 RCC主要作用——時(shí)鐘部分 118
15.2 RCC框圖剖析——時(shí)鐘部分 118
15.2.1 系統(tǒng)時(shí)鐘 118
15.2.2 其他時(shí)鐘 122
15.3 配置系統(tǒng)時(shí)鐘實(shí)驗(yàn) 123
15.3.1 使用HSE 123
15.3.2 使用HSI 123
15.3.3 硬件設(shè)計(jì) 123
15.3.4 軟件設(shè)計(jì) 124
15.3.5 下載驗(yàn)證 128
第16章 STM32中斷應(yīng)用概覽 130
16.1 異常類型 130
16.2 NVIC簡介 131
16.2.1 NVIC寄存器簡介 131
16.2.2 NVIC 中斷配置固件庫 132
16.3 中斷優(yōu)先級 132
16.3.1 優(yōu)先級定義 132
16.3.2 優(yōu)先級分組 132
16.4 中斷編程 133
第17章 EXTI——外部中斷/事件控制器 135
17.1 EXTI簡介 135
17.2 EXTI功能框圖剖析 135
17.3 中斷/事件線 137
17.4 EXTI初始化結(jié)構(gòu)體詳解 138
17.5 外部中斷控制實(shí)驗(yàn) 138
17.5.1 硬件設(shè)計(jì) 139
17.5.2 軟件設(shè)計(jì) 139
17.5.3 下載驗(yàn)證 143
第18章 SysTick——系統(tǒng)定時(shí)器 144
18.1 SysTick簡介 144
18.2 SysTick寄存器介紹 144
18.3 SysTick定時(shí)實(shí)驗(yàn) 145
18.3.1 硬件設(shè)計(jì) 145
18.3.2 軟件設(shè)計(jì) 145
18.3.3 下載驗(yàn)證 152
第19章 通信的基本概念 153
19.1 串行通信與并行通信 153
19.2 全雙工、半雙工及單工通信 154
19.3 同步通信與異步通信 154
19.4 通信速率 155
第20章 USART——串口通信 156
20.1 串口通信協(xié)議簡介 156
20.1.1 物理層 156
20.1.2 協(xié)議層 159
20.2 STM32的USART簡介 160
20.3 USART功能框圖剖析 161
20.4 USART初始化結(jié)構(gòu)體詳解 165
20.5 USART1接發(fā)通信實(shí)驗(yàn) 166
20.5.1 硬件設(shè)計(jì) 166
20.5.2 軟件設(shè)計(jì) 167
20.5.3 下載驗(yàn)證 171
20.6 使用USART1指令控制R