本書以南京沁恒微電子的RISC-v內核的CH32系列微控制器為藍本、以知識要素為核心、以構件化為基礎闡述嵌入式系統(tǒng)開發(fā)實踐,同時本書隨附實踐硬件系統(tǒng)。全書共13章,其中第1章在運行一個嵌入式系統(tǒng)實例基礎上簡要闡述嵌入式系統(tǒng)的知識體系、學習誤區(qū)與學習建議;第2章給出RISC-v處理器簡介;第3章給出MCU存儲映像、中斷源與硬件最小系統(tǒng)。第4章以GPI0為例給出規(guī)范的工程組織框架,闡述底層驅動應用方法;第5章闡述嵌入式硬件構件與底層驅動構件基本規(guī)范。第6章給出串行通信接口UART及第一個帶中斷的實例。第1-6章囊括了學習一個微控制器入門環(huán)節(jié)的完整要素。第7-12章分別介紹了RTC、TIM、PVIM、F1ash、ADC、DAC、SPI、I2C、CAN、DMA、USB、ESIG、系統(tǒng)時鐘、看門狗、復位模塊及電源控制模塊等。第13章給出了RTOS、嵌入式人工智能、NB-IoT、4G、Wi-Fi及WSN等應用案例。
① 作者資深。主編王宜懷教授為蘇州大學嵌入式系統(tǒng)與物聯(lián)網□□□所長,蘇州大學-沁恒RISC-V協(xié)同創(chuàng)新中心主任,江蘇省計算機學會嵌入式系統(tǒng)與物聯(lián)網專業(yè)委員會主任,中國軟件行業(yè)協(xié)會嵌入式系統(tǒng)分會理事,教學、科研成果顯著,撰寫嵌入式系統(tǒng)方面著作十余部,獲得發(fā)明專利三十余項。
② 結構科學。書中以嵌入式硬件構件及底層軟件構件設計為主線,基于嵌入式軟件工程的思想,按照“通用知識—驅動構件使用方法—測試實例—構件制作過程”的線條,逐步闡述電子系統(tǒng)智能化嵌入式應用的軟件與硬件設計。
③ 內容新穎。本書在蘇州大學嵌入式團隊幾十年教學積累的基礎上,基于沁恒微電子的RISC-V架構CH3□V307微控制器構建通用嵌入式計算機GEC生態(tài)系統(tǒng),形成了相對完備的教學及實踐系統(tǒng)。
④ 實例化教學。書中設計了大量的測試用例,也提供了所有模板完整的底層驅動構件化封裝程序。
⑤ 本書設計了可直接進行實踐的硬件系統(tǒng)AHL- CH3□V307,該系統(tǒng)簡捷、便利,可邊學邊實踐,詳情見書中介紹。
嵌入式計算機系統(tǒng)簡稱為嵌入式系統(tǒng),其概念□初源于傳統(tǒng)測控系統(tǒng)對計算機的需求.隨著以微處理器(MPU)為內核的微控制器(MCU)制造技術的不斷進步,計算機領域在通用計算機系統(tǒng)與嵌入式計算機系統(tǒng)這兩大分支上分別得以發(fā)展.通用計算機已經在科學計算、通信、日常生活等各個領域產生了重要影響.在后PC時代,嵌入式系統(tǒng)的廣泛應用是計算機發(fā)展的重要特征.一般來說,嵌入式系統(tǒng)的應用領域可以粗略分為兩大類:一類是電子系統(tǒng)的智能化(如工業(yè)控制、汽車電子、數據采集、測控系統(tǒng)、家用電器、現代農業(yè)、嵌入式人工智能及物聯(lián)網應用等),這類應用也被稱為微控制器MCU 領域;另一類是計算機應用的延伸(如平板電腦、手機、電子圖書等),這類應用也被稱為應用處理器MAP領域.不論如何分類,嵌入式系統(tǒng)的技術基礎都是不□的,即要想完成一個嵌入式系統(tǒng)產品的設計,就需要有硬件、軟件及行業(yè)領域的相關知識.但是,隨著嵌入式系統(tǒng)中的軟件規(guī)模日益增大,對嵌入式底層驅動軟件的封裝提出了更高的要求,可復用性與可移植性受到特別的關注,嵌入式軟硬件構件化開發(fā)方法逐步被業(yè)界所重視。
□0□0年以來,RISC V 架構處理器在我國得以快速發(fā)展.本書在蘇州大學嵌入式團隊幾十年教學積累的基礎上,基于沁恒微電子公司的RISC-V 架構CH3□V307微控制器構建的通用嵌入式計算機GEC生態(tài)系統(tǒng),形成了相對完備的教學及實踐體系.本書內容是在作者前期撰寫的普通高等教育“十一五”“十二五”□□□規(guī)劃教材、□□□□□本科課程教學實踐的基礎上,以CH3□V307微控制器為藍本重新撰寫的.同時,在南京沁恒微電子公司及北京航空航天大學出版社的支持下,隨書配備了可以直接進行實踐的硬件系統(tǒng)AHL- CH3□V307,該系統(tǒng)具有簡捷、便利、邊學邊實踐等優(yōu)點,克服了實驗箱模式的冗余、不方便帶出實驗室、不易升級等缺點,以逐步探索嵌入式教學的新模式。
書中以嵌入式硬件構件及底層軟件構件設計為主線,基于嵌入式軟件工程的思想,按照“通用知識—驅動構件使用方法—測試實例—構件制作過程”的脈絡,逐步闡述電子系統(tǒng)智能化嵌入式應用的軟件與硬件設計.需要特別說明的是,雖然書籍的撰寫與相關課程的教學必須以某一特定芯片為藍本,但作為嵌入式技術的基礎,本書試圖闡述嵌入式通用知識要素.因此,本書以知識要素為基本立足點,設計芯片的底層驅動,使得應用程序與芯片無關,使其具有通用嵌入式計算機(GEC)的性質.書中將大部分驅動的使用方法提前闡述,而將驅動構件的設計方法后置,目的是先學會使用構件進行實際編程,再理解構件的設計方法。因為理解構件的設計方法有一定難度,所以對于不同要求的教學場景,可以不要求學生理解全部構件的設計方法,僅講解一兩個即可。
本書具有以下特點:
(1)把握通用知識與芯片相關知識之間的平衡。書中對于嵌入式“通用知識”的基本原理,以應用為立足點,進行語言簡潔、邏輯清晰的闡述,并注意與芯片相關知識的銜接,使讀者在更好地理解基本原理的基礎上,理解芯片應用的設計;同時反過來,加深對通用知識的理解。
(2)把握硬件與軟件的關系。嵌入式系統(tǒng)是軟件與硬件的綜合體,嵌入式系統(tǒng)設計是一個軟件、硬件協(xié)同設計的工程,不能像通用計算機那樣,將軟件、硬件完全分開來看.特別對電子系統(tǒng)智能化嵌入式應用來說,沒有對硬件的理解就不可能寫好嵌入式軟件,同樣沒有對軟件的理解也不可能設計好嵌入式硬件.因此,本書注重把握硬件知識與軟件知識之間的關系。
(3)對底層驅動進行構件化封裝。書中對每個模塊均給出根據嵌入式軟件工程基本原則并按照構件化封裝要求編制底層驅動程序,同時給出詳細、規(guī)范的注釋及對外接口,為實際應用提供底層構件,方便移植與復用,可以為實際項目開發(fā)節(jié)省大量時間。
(4)設計合理的測試用例。書中所有源程序均經測試通過,并將測試用例保留在本書的網上教學資源中,避免因例程書寫或固有的錯誤給讀者帶來煩惱.這些測試用例也為讀者驗證與理解相關知識帶來方便。
(5)本書網上的電子資源提供了所有模塊完整的底層驅動構件化封裝程序與測試用例。需要使用PC機的測試用例程序,還提供了PC機的C#源程序、芯片資料、使用文檔和硬件說明等,網上電子資源的版本會適時更新。
本書由蘇州大學王宜懷統(tǒng)稿,楊勇、施連敏、游輝敏參與編寫.蘇州大學嵌入式系統(tǒng)與物聯(lián)網□□□的研究生參與了程序開發(fā)、書稿整理及有關資源建設,他們卓有成效的工作使得本書內容更加充實。南京沁恒微電子公司的司云騰、李天培、陶玉凱、陳瑤、劉琪等給予了技術支持并校對書稿。蘇州大學的劉純平、趙雷、章曉芳、楊璐、劉曉升等老師,宿遷學院的王志超、陳林、萬娟、史洪瑋等老師,為本書提出了許多建設性意見,在此一并表示誠摯的感謝。
鑒于作者水平有限,對于書中存在的不足和錯誤之處,懇望讀者提出寶貴意見和建議。
蘇州大學 王宜懷
2022年2月
王宜懷,博士,蘇州大學計算機科學與技術學院教授、軟件工程系主任、博士生導師;蘇州大學嵌入式系統(tǒng)與物聯(lián)網□□□所長;蘇州大學-沁恒RISC-V協(xié)同創(chuàng)新中心主任,江蘇省計算機學會嵌入式系統(tǒng)與物聯(lián)網專業(yè)委員會主任,中國軟件行業(yè)協(xié)會嵌入式系統(tǒng)分會理事。曾獲福建省八五期間電子信息應用先進個人、全國高等學校計算機教學成果獎一等獎、□□本科課程、江蘇省高等教育教學成果一等獎、蘇州大學五四青年特別感謝獎、蘇州大學高尚師德獎等。致力于嵌入式系統(tǒng)與物聯(lián)網、嵌入式人工智能、嵌入式軟件工程等方向研究與教學工作,撰寫嵌入式系統(tǒng)方面著作十余部,獲得發(fā)明專利三十余項。
第1章 概 述 1
。保薄〕踝R嵌入式系統(tǒng) 1
。保保薄∵\行硬件系統(tǒng) 1
。保保病嵺`體系簡介 3
。保保场【幾g、下載與運行□□個嵌入式程序 4
。保病∏度胧较到y(tǒng)的定義、發(fā)展簡史、分類及特點 6
。保玻薄∏度胧较到y(tǒng)的定義 6
1.2.2 嵌入式系統(tǒng)的由來及發(fā)展簡史 7
。保玻场∏度胧较到y(tǒng)的分類 8
1.2.4 嵌入式系統(tǒng)的特點 9
。保场∏度胧较到y(tǒng)的學習困惑、知識體系及學習建議 10
。保常薄∏度胧较到y(tǒng)的學習困惑 10
1.3.2 嵌入式系統(tǒng)的知識體系 13
。保常场』A階段的學習建議 14
。保础∥⒖刂破髋c應用處理器簡介 16
。保矗薄CU簡介 16
。保矗病∫ MCU為核心的嵌入式測控產品的基本組成 17
。保矗场AP簡介 19
。保怠∏度胧较到y(tǒng)常用術語 20
。保担薄∨c硬件相關的術語 20
。保担病∨c通信相關的術語 21
1.5.3 與功能模塊相關的術語 22
本章小結 23
習 題 24
第2章 RISC V架構微處理器 25
。玻薄ISC V概述與青稞 V4F微處理器簡介 25
2.1.1 RISC V概述 25
。玻保病∏囡 V4F微處理器內部結構概要 27
2.1.3 寄存器通用基礎知識及相關基本概念 28
。玻保础∏囡 V4F微處理器的內部寄存器 29
。玻病ぶ贩绞脚c機器碼的獲取方法 30
2.2.1 指令保留字簡表與尋址方式 31
。玻玻病C器碼的獲取方法 32
2.3 RISC V基本指令分類解析 34
。玻常薄祿䝼魉皖愔噶 34
。玻常病祿僮黝愔噶 36
。玻常场√D類指令 37
。玻常础SR類指令 38
。玻常怠∑渌噶 39
2.4 匯編語言的基本語法 39
2.4.1 匯編語言的格式 39
。玻矗病〕S脗沃噶詈喗 41
本章小結 43
習 題 44
第3章 存儲器映像、中斷源與硬件□小系統(tǒng) 45
3.1 CH32V307系列 MCU概述 45
。常保薄H32V307系列 MCU命名規(guī)則 45
。常保病H32V307存儲器映像 46
。常保场H32V307中斷源 47
。常病H32V307的引腳圖與硬件□小系統(tǒng) 50
。常玻薄H32V307的引腳圖 50
3.2.2 CH32V307硬件□小系統(tǒng)原理圖 52
。常场∮ MCU構建通用嵌入式計算機 54
3.3.1 嵌入式□□開發(fā)方式存在的問題與解決辦法 55
。常常病√岢鯣EC概念的時機、GEC的定義與特點 56
。常常场∮蒀H32V307VCT6構成的GEC 57
本章小結 62
習 題 62
第4章 GPIO及程序框架 64
。矗薄PIO通用基礎知識 64
4.1.1 GPIO概念 64
。矗保病≥敵鲆_的基本接法 64
。矗保场∩侠吕娮枧c輸入引腳的基本接法 65
4.2 軟件干預硬件的方法 66
。矗玻薄PIO構件 API 66
。矗玻病 酢鮽C語言工程:控制小燈閃爍 68
4.3 認識工程框架 70
。矗常薄」こ炭蚣芗八募喗 70
4.3.2 了解機器碼文件及芯片執(zhí)行流程 72
。矗础PIO構件的制作過程 74
。矗矗薄《丝谂cGPIO模塊———對外引腳與內部寄存器 74
。矗矗病PIO基本編程步驟并點亮一盞小燈 77
。矗矗场PIO構件的設計 78
。矗怠 酢鮽匯編語言工程:控制小燈閃爍 83
。矗担薄R編工程文件的組織 83
。矗担病R編語言小燈測試工程主程序 84
。矗丁嶒炓弧 熟悉實驗開發(fā)環(huán)境及GPIO編程 88
本章小結 91
習 題 92
第5章 嵌入式硬件構件與底層驅動構件基本規(guī)范 93
5.1 嵌入式硬件構件 93
。担保薄∏度胧接布䴓嫾拍钆c嵌入式硬件構件分類 93
5.1.2 基于嵌入式硬件構件的電路原理圖設計簡明規(guī)則 94
。担病∏度胧降讓域寗訕嫾母拍钆c層次模型 97
。担玻薄∏度胧降讓域寗訕嫾母拍 98
。担玻病∏度胧接布䴓嫾c軟件構件結合的層次模型 98
。担玻场∏度胧杰浖䴓嫾诸 99
。担场〉讓域寗訕嫾姆庋b規(guī)范 100
5.3.1 構件設計的基本思想與基本原則 100
。担常病【幋a風格基本規(guī)范 102
5.3.3 頭文件的設計規(guī)范 105
。担常础≡闯绦蛭募脑O計規(guī)范 107
。担础∮布䴓嫾捌潋寗訕嫾膹陀门c移植方法 108
。担矗薄∮布䴓嫾膹陀门c移植 108
。担矗病◎寗訕嫾囊浦 109
本章小結 110
習 題 111
第6章 串行通信模塊及□□個中斷程序結構 112
6.1 異步串行通信的通用基礎知識 112
。叮保薄〈型ㄐ诺幕靖拍 112
。叮保病S232和RS485總線標準 114
。叮保场TL USB串口 115
。叮保础〈型ㄐ啪幊棠P 116
。叮病』跇嫾拇型ㄐ啪幊谭椒 117
。叮玻薄H32V307VCT6芯片的 UART對外引腳 117
6.2.2 UART構件API 118
。叮玻场ART構件API的發(fā)送測試方法 119
。叮玻础rintf的設置方法與使用 120
。叮场ART構件的制作過程 121
6.3.1 UART寄存器概述 121
。叮常病±弥苯拥刂凡僮鞯拇诎l(fā)送打通程序 121
。叮常场ART構件設計 125
。叮础≈袛鄼C制及中斷編程步驟 129
6.4.1 關于中斷的通用基礎知識 129
。叮矗病ISC V非內核模塊中斷編程結構 132
。叮矗场H32V307VCT6中斷編程步驟———以串口接收中斷為例 134
。叮怠嶒灦〈谕ㄐ偶爸袛鄬嶒 137
本章小結 139
習 題 139
第7章 定時器相關模塊 141
。罚薄《〞r器的通用基礎知識 141
。罚病H32V307VCT6中的定時器 141
。罚玻薄∏囡 V4F內核中的系統(tǒng)定時器SysTick 142
。罚玻病崟r時鐘RTC模塊 146
7.2.3 Timer模塊的基本定時功能 149
。罚场∶}寬調制 151
。罚常薄∶}寬調制PWM 的通用基礎知識 151
7.3.2 基于構件的PWM 編程方法 154
。罚常场∶}寬調制構件的制作過程 157
。罚础≥斎氩东@與輸出比較 162
7.4.1 輸入捕獲與輸出比較的通用基礎知識 162
。罚矗病』跇嫾妮斎氩东@和輸出比較編程方法 162
。罚怠嶒炄《〞r器及PWM 實驗 167
本章小結 168
習 題 169
第8章 Flash在線編程、ADC與DAC 170
。福薄lash在線編程 170
。福保薄lash在線編程的通用基礎知識 170
。福保病』跇嫾腇lash在線編程方法 171
。福保场lash構件的制作過程 173
。福病DC 176
。福玻薄DC的通用基礎知識 176
。福玻病』跇嫾腁DC編程方法 180
。福玻场DC構件的制作過程 183
。福场AC 186
。福常薄AC的通用基礎知識 186
。福常病』跇嫾腄AC編程方法 187
。福础嶒炈摹DC實驗 189
本章小結 190
習 題 190
第9章 SPI、I2C與TSC模塊 192
9.1 串行外設接口SPI模塊 192
。梗保薄PI的通用基礎知識 192
。梗保病』跇嫾腟PI通信編程方法 195
9.2 集成電路互聯(lián)總線I2C模塊 199
。梗玻薄2C的通用基礎知識 199
。梗玻病』跇嫾腎2C通信編程方法 204
9.3 觸摸感應控制器TSC模塊 208
。梗常薄SC的基本原理 208
9.3.2 基于構件的TSC編程方法 209
。梗础嶒炍濉PI通信實驗 212
本章小結 214
習 題 214
第10章 DMA與CAN總線編程 216
。保埃薄AN總線 216
。保埃保薄AN總線的通用基礎知識 216
10.1.2 基于構件的CAN編程方法 220
。保埃病MA 223
10.2.1 DMA的通用基礎知識 223
。保埃玻病』跇嫾腄MA編程方法 225
本章小結 228
習 題 228
第11章 USB與嵌入式以太網模塊 229
11.1 USB的通用基礎知識 229
。保保保薄SB概述 229
。保保保病∨c USB相關的基本概念 232
11.1.3 USB通信協(xié)議 237
。保保保础脑O備的枚舉看 USB數據傳輸 241
。保保病H32V307的 USB模塊應用編程方法 246
11.2.1 CH32V307的 USB模塊簡介 246
。保保玻病H32V307作為 USB從機的編程方法 246
。保保玻场H32V307作為 USB主機的編程方法 254
。保保场∏度胧揭蕴W的通用基礎知識 257
。保保常薄∫蕴W的由來與協(xié)議模型 257
11.3.2 以太網中的主要物理設備 260
。保保常场∠嚓P名詞解釋 262
。保保础H32V307的以太網模塊應用編程方法 265
。保保矗薄H32V307的以太網模塊簡介 265
。保保矗病∫蕴W底層驅動構件 267
11.4.3 以太網測試實例 269
。保保怠”菊滦〗Y 284
習 題 284
第12章 系統(tǒng)時鐘與其他功能模塊 286
12.1 時鐘系統(tǒng) 286
。保玻保薄r鐘系統(tǒng)概述 286
。保玻保病r鐘模塊寄存器概要 287
。保玻保场r鐘模塊編程實例 289
。保玻病‰娫茨K與復位模塊 291
。保玻玻薄‰娫茨K 291
。保玻玻病臀荒K 292
12.3 看門狗 292
。保玻常薄—毩⒖撮T狗 293
。保玻常病∠到y(tǒng)窗口看門狗 294
。保玻础底帧酢踅涌谂c安全數字輸入/輸出 296
。保玻矗薄底帧酢踅涌 296
12.4.2 安全數字輸入/輸出 297
本章小結 298
習 題 298
第13章 應用案例 299
。保常薄∏度胧较到y(tǒng)穩(wěn)定性問題 299
13.2 外接傳感器及執(zhí)行部件的編程方法 300
。保常玻薄¢_關量輸出類驅動構件 300
13.2.2 開關量輸入類驅動構件 303
。保常玻场÷曇襞c加速度傳感器驅動構件 305
。保常场崟r操作系統(tǒng)的簡明實例 306
。保常常薄o操作系統(tǒng)與實時操作系統(tǒng) 306
。保常常病TOS中常用的基本概念 307
13.3.3 線程的三要素、四種狀態(tài)及三種基本形式 308
13.3.4 RTOS下的編程實例 311
。保常础∏度胧饺斯ぶ悄艿暮喢鲗嵗 312
。保常矗薄HLGEORS簡介 312
。保常矗病HLGEORS的數據采集與訓練過程 314
。保常矗场≡谕ㄓ们度胧接嬎銠CGEC上進行的推理過程 315
13.5 沁恒 MCU的其他嵌入式實踐資源簡介 316
。保常担薄HLGCH573 316
。保常担病HLGCH573GNBGIoT 317
13.5.3 AHLGCH573GCAT1 318
參考文獻 320