STM32庫開發實戰指南 ( 簡體 字) |
作者:劉火良 楊森 編著 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> STM32 |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 35806 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:6/1/2013 |
頁數:480 |
光碟數:1 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787111426370 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:單片機是對8/16位MCU(微控制器)的另外一種叫法。傳統的8/16位單片機,久經歲月的洗禮,仍然在工業控制應用中大放光芒。然而,現在的工程師面對的更多的工業控制產品需求是多功能、易用界面、低功耗以及多任務等。基于這樣的需求,以往的8/16位單片機已不能滿足要求,工程師必須尋找新的符合要求的MCU。工程師雖然可以選擇諸如ARM7、ARM9這類速度更快的32位MCU,但是鑒于對成本和開發門檻等種種考慮,它們還是不能滿足需求。正是看準了這個市場, ARM公司推出了其全新的基于ARMv7架構的32位Cortex-M3 微控制器內核。緊隨其后,ST(意法半導體)公司就推出了基于Cortex-M3內核的MCU——STM32。STM32憑借其產品線的多樣化、極高的性價比、簡單易用的開發方式,迅速在眾多Cortex-M3 MCU中脫穎而出,成為最閃亮的一顆新星。STM32一上市就迅速占領了中低端MCU市場,頗有星火燎原之勢,這與它倡導的基于固件庫的開發方式密不可分。采用庫開發的方式可以快速上手,僅通過調用庫里面的API(應用程序接口)就可以迅速搭建一個大型的程序,寫出各種用戶所需的應用,這就大大降低了學習的門檻和開發周期。然而,又因為在開發中只是調用API,而忽略了底層寄存器的操作,庫開發被習慣了寄存器開發方式的工程師指為“于浮沙筑高臺”,沒有學習的價值。這種看法具有一定的片面性,他顯然沒有意識到這是一種全新的學習方法。試問,對于初學者,面對一個32位且有如此多寄存器的單片機,如果還像我們以往操作8位機,通過配置寄存器的方式來實現,那會是多么繁雜的一項工作?除此之外,庫的開發方式自頂向下,它是邁向更高端嵌入式Linux開發的一個墊腳石。
庫開發已成主流,這是不爭的事實。STM32固件庫之所以流行并被大家所喜愛,可以歸結為以下兩個原因:
(1)技術潮流
1)于個人:庫開發大大地降低了學習的門檻,提高了學習的效率,使個人初步了解了大的程序設計,是一種自頂向下的學習方法,可以從上層的API層層跟蹤到底層,可以徹徹底底地了解寄存器,了解CPU的內存分布,再到啟動代碼、開發環境的配置等。如果再深究,還會涉及編譯器甚至工具鏈。庫的學習,可不僅僅是簡單地調用API,我們需要去分析這個庫是如何構建的,是如何從內存到寄存器,寄存器到結構體,結構體到更各層的API,再到層層外設的文件關聯。這里面涉及了太多的C語言的知識,如關鍵字、宏、結構體、指針、類型轉換、條件編譯、斷言、內聯函數等。這些知識的學習,又豈能說是“于浮沙筑高臺”。如果你的C語言還停留在基本語法的階段,那么通過對庫的使用和學習,你的C語言將會得到脫胎換骨的提升。學會了庫開發還可以快速地遷移到ST其他系列單片機的學習,如STM32F207、STM32F407,這些MCU的固件庫基本上都是兼容的。反觀如此龐大的固件庫,還要相互兼容,細心的人一定可以從中獲益良多!
2)于公司:在公司產品開發中,產品上市速度是非常重要的成功因素,庫開發可以極大地縮短產品研發周期,以便快速搶占市場。而且庫讓程序的維護成本更低,程序的升級更快捷。用庫來開發,真可謂事半功倍,一箭雙雕。
(2)市場趨勢
有人曾經質疑STM32的固件庫降低了MCU的性能,然而,他卻沒有考慮到STM32的性能和資源已經不是傳統的8/16單片機可比的了。強大的硬件應該與消耗這些資源的軟件相匹配,否則資源就被浪費了。硬件和軟件是相輔相成、共同促進的。所以硬件改善后,工程師對于MCU的關注應該從全局著眼。
本書采用MDK開發環境,全部例程基于3.5.0版本的固件庫講解,不是簡單地調用庫,而是試圖通過對固件庫的使用詳細講解什么是庫、為什么使用庫、怎樣使用庫等一系列問題,進而引導讀者使用高效率的庫開發方法。
本書采用原理分析、代碼講解、實驗運用這三點連線的講解方式,循序漸進,適合在校大學生和科研機構開發人員學習使用。全書分為四個部分,第一部分(第1∼5章)是庫開發初級篇,涉及入門的兩個主題。一個是嵌入式工程師成長之路,屬于方法論的問題,涉及了一個工程師從學生時代開始,在每一個不同的階段應該學習什么、該如何進階等。另一個是通過對庫的了解和GPIO的學習,讓讀者快速掌握STM32的開發方法,這是入門的第一步。第二部分(第6∼16章)是庫開發中級篇,講解了STM32各個外設的使用,是學習的一個進階階段,也是STM32學習的重中之重。第三部分(第17∼25章)是庫開發高級篇,是STM32各個外設的實戰演練,如MP3、液晶、攝像頭、Wi-Fi等,是屬于項目實戰的例子,一般可直接用于工程項目的開發。第四部分(第26∼28章)是庫開發系統篇,這是嵌入式系統開發的必經之路,是區別裸與不裸的分水嶺;這部分講解了μ C/OS最新版本μ C/OS-Ⅲ在STM32中的移植,通過該移植應用實踐,相信可以為以后進階到WinCE、Linux操作系統的學習打下堅實的基礎。
致??謝
首先要感謝本書的策劃編輯張國強先生,是他對STM32的關注促成了這本書的出版,同時在我們撰寫書稿時對本書提出了寶貴的寫作建議,并對書稿進行了仔細審閱。其次要感謝野火工作室的成員廖錦松、曾云清等人提供的部分例程及資料;感謝好友何卓波對書稿內容的校正工作。
由于本書涉及的知識面廣,時間又倉促,限于筆者的水平和經驗,疏漏之處在所難免,懇請專家和讀者批評指正,可以發送郵件到wildfireteam@163.com 與作者進行交流,或者到阿莫論壇野火M3專區 http://www.amobbs.com 進行討論。
劉火良 楊森 |
內容簡介:橫亙在STM32初學者面前最大的一個問題就是選擇用庫的方式開發,還是用寄存器的方式開發。對此,曾在網上引發了一場大討論,大家眾說紛紜,仁者見仁,智者見智。從深層次看,這個問題其實并不是一個對開發方式進行選擇的問題。 在ARM還沒有打算進入MCU領域的時候,大多數單片機工程師的學習是從8位單片機開始的,而且以51單片機居多。由于51單片機的寄存器非常少,很容易記憶,那么使用操作寄存器的方式進行單片機程序開發不但容易,而且高效。隨著ARM Cortex-M內核和STM32的發布,這個局面就被打破了。 在蘋果公司旗艦產品iPhone和iPad的帶領下,以觸控屏應用為代表的人機交互方式席卷了全球,當然,中國也未能幸免。在中國,連最保守的工業領域也開始接受這種先進的人機交互方式。然而,這時候,工業界普遍應用的微控制器仍然是51單片機,它不能滿足工業界對新型人機交互體驗的需求。STM32的出現填補了工業界這個缺憾,從它發布開始,STM32迅速躥紅,成為MCU領域一顆耀眼的新星。原來熟悉了51單片機的工程師不得不開始學習新的基于Cortex-M架構的MCU。然而,他們很快發現一個問題,對32位MCU寄存器的操作是一個極富挑戰的事情,因為寄存器太多了。為了解決這個問題,ST公司組織自己的工程技術人員開發了一個針對STM32的固件庫。通過對寄存器的封裝,開發人員只須簡單地調用固件庫函數,就能夠完成復雜的開發任務。根據ST公司的統計,有大約一半的初學者選擇了庫開發的方式。他們并沒有回過頭去學習復雜的寄存器操作,而是選擇直接從固件庫入手,很快掌握了STM32的開發技術。關于寄存器的開發方式好,還是固件庫的開發方式好的爭議就在這兩個人群中蔓延開了。 那么究竟哪種方式好呢?這個問題很難回答。如果你本身就是一個完全沒有接觸過單片機的“白丁”,那么建議你還是不要冒險體驗寄存器的開發方式了。你可以在嘗試掌握了庫開發的方式之后再去重新體驗一下寄存器的開發方式。如果你已經掌握了某個單片機的開發,那么沿用原來的思路是一個省腦細胞的決定。但是如果你的志向不是僅僅屈居一個單片機碼農,你若有更高的理想和抱負,建議你用批判和分析的目光學習一下固件庫的開發方式。因為當你邁向更高階的ARM Linux嵌入式開發的時候,你會發現這個功課是值得做的,它給了你一把打開嵌入式Linux開發大門的鑰匙——自頂向下的開發方式和思想。 |
目錄:前??言
第一部分?庫開發初級篇
第1章?為什么學習STM32 2
1.1 嵌入式技術知識結構 2
1.2 嵌入式工程師成長之路 3
1.3 為什么學習STM32 4
1.4 如何學習STM32 4
第2章?初識STM32固件庫 5
2.1 STM32神器之庫開發 5
2.1.1 什么是STM32庫 5
2.1.2 為什么采用庫開發 6
2.2 STM32結構及庫層次關系 7
2.2.1 CMSIS標準 7
2.2.2 庫目錄、文件簡介 8
2.2.3 STM32固件庫文件間的關系 14
2.2.4 使用庫幫助文檔 15
第3章?GPIO入門之流水燈 18
3.1 安裝MDK 18
3.2 建立工程模板 19
3.2.1 新建工程 19
3.2.2 配置J-LINK硬件調試 25
3.3 如何編譯和下載程序 27
3.3.1 如何編譯程序 27
3.3.2 如何下載程序 27
第4章?深入分析流水燈例程 30
4.1 STM32的GPIO 30
4.2 STM32的地址映射 33
4.2.1 溫故而知新——stm32f10x.h文件 33
4.2.2 外設基地址 35
4.2.3 總線外設基地址 36
4.2.4 寄存器組基地址 37
4.3 STM32固件庫對寄存器的封裝 38
4.4 STM32的時鐘系統 39
4.4.1 時鐘樹&時鐘源 39
4.4.2 高速外部時鐘 41
4.4.3 HCLK、FCLK、PCLK1、PCLK2 42
4.5 LED具體代碼分析 42
4.5.1 實驗描述及工程文件清單 42
4.5.2 配置工程環境 43
4.5.3 編寫用戶文件 44
4.5.4 初始化結構體——GPIO_InitTypeDef類型 46
4.5.5 初始化庫函數——GPIO_Init() 47
4.5.6 開啟外設時鐘 48
4.5.7 控制I/O輸出高、低電平 52
4.5.8 led.h文件 52
4.5.9 main文件 53
4.6 GPIO_Init()函數的實現 55
4.6.1 規范的位操作方法 55
4.6.2 GPIO_Init()實現代碼分析 55
4.6.3 再論開發方式 60
4.7 開發步驟總結 61
第5章?調試程序 62
5.1 MDK軟件仿真調試 62
5.2 使用J-LINK進行硬件調試 64
5.2.1 硬件調試 64
5.2.2 軟件編譯過程 65
5.3 MDK使用小技巧 66
第二部分?庫開發中級篇
第6章?GPIO再舉例之按鍵實驗 70
6.1 GPIO的8種工作模式 70
6.1.1 4種輸入模式 71
6.1.2 4種輸出模式 71
6.2 按鍵實驗分析 72
6.3 按鍵代碼分析 72
6.3.1 實驗描述及工程文件清單 72
6.3.2 配置工程環境 73
6.3.3 main文件 73
6.3.4 GPIO初始化配置 74
6.3.5 利用固件庫的數據類型 75
6.3.6 實現LED反轉 77
6.3.7 實驗現象 77
第7章?EXTI之按鍵中斷實驗 78
7.1 STM32的中斷和異常 78
7.2 NVIC中斷控制器 81
7.2.1 NVIC結構體成員 81
7.2.2 搶占優先級和響應優先級 82
7.2.3 NVIC的優先級組 83
7.3 EXTI外部中斷 83
7.4 中斷檢測按鍵實驗分析 84
7.4.1 實驗描述及工程文件清單 84
7.4.2 配置工程環境 85
7.4.3 main文件 86
7.4.4 配置外部中斷 86
7.4.5 AFIO時鐘 87
7.4.6 NVIC初始化配置 88
7.4.7 EXTI初始化配置 89
7.4.8 編寫中斷服務函數 89
7.4.9 實驗現象 91
第8章?串口通信(USART) 92
8.1 異步串口通信協議 92
8.2 直通線和交叉線 93
8.3 串口工作過程分析 94
8.3.1 波特率控制 94
8.3.2 收發控制 96
8.3.3 數據存儲轉移 96
8.4 串口通信實驗分析 96
8.4.1 實驗描述及工程文件清單 96
8.4.2 配置工程環境 97
8.4.3 main文件 97
8.4.4 USART初始化配置 98
8.4.5 printf()函數重定向 101
8.4.6 USART1_printf()函數 103
8.4.7 實驗現象 106
第9章?庫函數開發小結 107
9.1 初始化 107
9.2 數據輸入輸出 108
9.3 狀態位、標志位 108
9.3.1 事件 109
9.3.2 標志位的檢查與清除 109
9.4 外設函數分類 110
第10章?DMA——為CPU減負 112
10.1 DMA功能簡介 112
10.2 DMA工作分析 112
10.3 DMA實例之串口通信 113
10.3.1 實驗描述及工程文件清單 113
10.3.2 配置工程環境 114
10.3.3 main文件 114
10.3.4 DMA初始化 115
10.3.5 使用DMA中斷 121
10.3.6 實驗現象 123
第11章?ADC實驗(DMA方式) 124
11.1 ADC簡介 124
11.2 STM32的ADC主要技術指標 124
11.3 ADC工作過程分析 125
11.4 ADC采集數據實例(采用DMA模式) 126
11.4.1 實驗描述及工程文件清單 127
11.4.2 配置工程環境 128
11.4.3 main文件 128
11.4.4 ADC初始化 129
11.4.5 計算電壓值 138
11.4.6 實驗現象 138
第12章?SysTick(系統滴答定時器) 139
12.1 SysTick——操作系統的心跳 139
12.2 SysTick工作分析 140
12.3 使用SysTick精確延時實驗分析 141
12.3.1 實驗描述及工程文件清單 142
12.3.2 配置工程環境 142
12.3.3 main文件 143
12.3.4 配置并啟動SysTick 143
12.3.5 定時時間的計算 147
12.3.6 編寫中斷服務函數 147
12.3.7 使用SysTick測量時間的功能 149
12.3.8 實驗現象 149
第13章?STM32定時器 150
13.1 定時器功能簡介 150
13.2 定時器工作分析 150
13.2.1 基本定時器 150
13.2.2 通用定時器 150
13.2.3 高級定時器 155
13.3 PWM輸出實例分析 157
13.3.1 實驗描述及工程文件清單 157
13.3.2 配置工程環境 157
13.3.3 main文件 158
13.3.4 定時器初始化 159
13.3.5 實驗現象 164
第14章?I2C接口 168
14.1 I2C協議簡介 168
14.1.1 物理層 168
14.1.2 協議層 169
14.2 STM32的I2C特性及架構 170
14.2.1 I2C接口特性 170
14.2.2 I2C架構 170
14.3 I2C接口讀寫EEPROM實驗 171
14.3.1 實驗描述及工程文件清單 171
14.3.2 配置工程環境 171
14.3.3 main文件 172
14.3.4 I2C接口初始化 173
14.3.5 對EEPROM的讀寫操作 177
14.3.6 使用I2C讀寫EEPROM流程總結 186
14.3.7 實驗現象 186
第15章?SPI模塊 188
15.1 SPI協議簡介 188
15.1.1 SPI信號線 188
15.1.2 SPI模式 189
15.2 STM32的SPI特性及架構 190
15.2.1 STM32的SPI特性 190
15.2.2 STM32的SPI架構分析 190
15.3 SPI接口讀取Flash實例分析 191
15.3.1 實驗描述及工程文件清單 192
15.3.2 配置工程環境 193
15.3.3 main文件 193
15.3.4 SPI初始化 195
15.3.5 控制Flash的命令 199
15.3.6 讀取廠商ID 202
15.3.7 擦除Flash內容 203
15.3.8 向Flash寫入數據 207
15.3.9 從Flash讀取數據 210
15.3.10 小結 211
15.3.11 實驗現象 211
第16章?CAN控制器 212
16.1 CAN協議簡介 212
16.1.1 物理層 212
16.1.2 CAN的報文種類及結構 213
16.1.3 同步 215
16.2 STM32的CAN特性及架構 217
16.2.1 CAN特性 217
16.2.2 CAN架構 218
16.3 雙CAN通信實驗分析 219
16.3.1 實驗描述及工程文件清單 219
16.3.2 配置工程環境 220
16.3.3 main文件 221
16.3.4 配置CAN接口 223
16.3.5 打包報文 232
16.3.6 發送報文 234
16.3.7 接收報文、編寫中斷服務函數 234
16.3.8 實驗小結 236
16.3.9 實驗現象 237
第三部分?庫開發高級篇
第17章?SDIO之SD卡驅動 240
17.1 SD協議簡介 240
17.1.1 卡的種類 240
17.1.2 SDIO基本架構 241
17.2 STM32的SDIO接口 241
17.2.1 從SDIO的時鐘說起 242
17.2.2 SDIO的命令格式 242
17.2.3 數據傳輸格式 243
17.3 SD卡讀寫實驗分析 243
17.3.1 實驗描述及工程文件清單 243
17.3.2 配置工程環境 244
17.3.3 main文件 246
17.3.4 SDIO初始化 247
17.3.5 卡的上電識別流程 249
17.3.6 卡的初始化流程 256
17.3.7 對SD卡進行讀寫 259
17.3.8 原版官方驅動例程的bug 263
17.3.9 實驗現象 264
第18章?文件系統之
FATFS_R0.09 265
18.1 什么是文件系統 265
18.2 FATFS文件系統簡介 266
18.2.1 FATFS的目錄結構 266
18.2.2 FATFS幫助文檔 266
18.2.3 FATFS源碼 267
18.3 移植FATFS文件系統實驗 267
18.3.1 實驗描述及工程文件清單 267
18.3.2 配置工程環境 269
18.3.3 為文件系統添加底層驅動 270
18.3.4 添加簡體中文和
長文件名支持 274
18.3.5 main文件 274
18.3.6 實驗現象 277
第19章?MP3播放器 278
19.1 MP3文件探秘 278
19.1.1 文件格式 278
19.1.2 MP3文件的原始數據 278
19.1.3 MP3文件格式 279
19.2 VS1003硬件解碼芯片 279
19.2.1 VS1003芯片簡介 280
19.2.2 TDA1308芯片 280
19.3 MP3播放器實驗 280
19.3.1 實驗描述及工程文件清單 280
19.3.2 配置工程環境 282
19.3.3 main文件 283
19.3.4 控制VS1003進入準備狀態 284
19.3.5 播放MP3文件 286
19.3.6 STM32的堆棧 291
19.3.7 實驗現象 294
第20章?USB大容量存儲器實例 295
20.1 USB協議分析 295
20.1.1 協議版本 295
20.1.2 USB電氣特性 295
20.1.3 USB通信模型 296
20.1.4 USB枚舉 298
20.2 STM32的USB控制器 299
20.3 USB讀取SD卡——模擬U盤實驗 301
20.3.1 實驗描述及工程文件清單 301
20.3.2 配置工程環境 302
20.3.3 USB固件庫說明 303
20.3.4 main文件 305
20.3.5 基本配置 306
20.3.6 USB初始化 308
20.3.7 中斷服務函數 310
20.3.8 BOT和SCSI協議 313
20.3.9 實驗現象 316
第21章?LCD觸摸屏畫板 317
21.1 LCD控制器簡介 317
21.1.1 ILI9341控制器結構 317
21.1.2 像素點的數據格式 317
21.1.3 ILI9341的通信時序 319
21.2 用STM32驅動LCD 320
21.2.1 FSMC簡介 320
21.2.2 用FSMC模擬8080時序 322
21.3 觸摸屏感應原理 322
21.4 TSC2046觸摸屏控制器 323
21.5 LCD觸摸屏畫板實驗 323
21.5.1 實驗描述及工程文件清單 323
21.5.2 配置工程環境 325
21.5.3 main文件 326
21.5.4 初始化FSMC模式 327
21.5.5 FSMC模擬8080讀寫
參數、命令 332
21.5.6 液晶屏畫點函數 334
21.5.7 觸摸屏校正 338
21.5.8 檢測觸點、畫點 341
21.5.9 實驗現象 342
第22章?字庫及BMP圖片顯示 343
22.1 什么是字模 343
22.2 制作字模 344
22.3 BMP圖片格式 347
22.4 顯示中英文及BMP圖片實驗 351
22.4.1 實驗描述及工程文件清單 351
22.4.2 配置工程環境 352
22.4.3 main文件 352
22.4.4 顯示漢字 353
22.4.5 在SD卡上讀取與保存BMP圖像 358
22.4.6 實驗現象 364
第23章?OV7670攝像頭驅動 365
23.1 攝像頭的分類 365
23.1.1 數字攝像頭與模擬攝像頭的區別 365
23.1.2 CCD與CMOS的區別 365
23.2 OV7670介紹 366
23.2.1 OV7670功能框架 366
23.2.2 OV7670管腳封裝 367
23.3 SCCB總線 368
23.3.1 SCCB接口定義 368
23.3.2 SCCB時序描述 370
23.4 攝像頭模塊 372
23.4.1 攝像頭模塊硬件介紹 372
23.4.2 OV7670輸出時序 372
23.4.3 FIFO時序 375
23.4.4 攝像頭的驅動原理 376
23.5 攝像頭驅動實驗 377
23.5.1 實驗描述及工程文件清單 377
23.5.2 配置工程環境 379
23.5.3 main文件 379
23.5.4 SCCB總線的軟件實現 380
23.5.5 初始化OV7670 386
23.5.6 采集并顯示圖像 388
23.5.7 實驗現象 393
第24章?以太網及LwIP協議棧移植 394
24.1 互聯網模型 394
24.2 以太網 395
24.2.1 PHY層 395
24.2.2 MAC子層 396
24.2.3 以太網控制器 397
24.3 MAC之上的網絡層 398
24.3.1 為什么在MAC之上還有分層 398
24.3.2 TCP/IP協議中各層次的功能 398
24.3.3 LwIP協議棧 400
24.4 ENC28J60+LwIP 以太網實驗 401
24.4.1 實驗描述及工程文件清單 401
24.4.2 配置工程環境 402
24.4.3 main文件 403
24.4.4 LwIP對底層數據結構的封裝 404
24.4.5 初始化協議棧 408
24.4.6 LwIP對底層操作的封裝 410
24.4.7 輪詢和計時 415
24.4.8 opt.h文件和debug 416
24.4.9 LwIP應用 420
24.4.10 網頁服務器 421
24.4.11 實驗現象 426
第25章?Wi-Fi模塊EMW3180驅動 430
25.1 資料與工具下載 430
25.2 EMW3180簡介 430
25.3 EMW3180驅動實驗 434
25.3.1 實驗描述及工程文件清單 434
25.3.2 配置工程環境 435
25.3.3 EMSP_API函數 435
25.3.4 API函數一覽 436
25.3.5 main文件 439
25.3.6 em380c_hal.c文件 441
25.3.7 實驗現象 445
第四部分?庫開發系統篇
第26章?μC/OS-Ⅲ及其源代碼介紹 448
26.1 μC/OS簡介 448
26.1.1 操作系統與裸機的區別 448
26.1.2 μC/OS實時操作系統 448
26.2 μC/OS-Ⅲ與μC/OS-Ⅱ的主要區別 450
26.3 μC/OS-Ⅲ源碼 450
26.4 μC/OS-Ⅲ工程架構 452
第27章?移植μC/OS-Ⅲ到STM32 454
27.1 搭建μC/OS工程文件結構 454
27.2 修改μC/OS代碼 459
27.2.1 修改os_cpu.h文件 459
27.2.2 修改os_cpu_c.c 459
27.2.3 修改 os_cpu_a.asm文件 460
27.2.4 修改cpu_a.asm文件 461
27.2.5 修改startup_stm32f10x_hd.s文件 462
27.2.6 修改stm32f10x_it.c文件 463
27.3 編寫用戶文件 464
27.3.1 編寫includes.h文件 464
27.3.2 編寫BSP相關文件 465
27.3.3 創建任務 466
27.4 配置μC/OS-Ⅲ 468
第28章?運行多任務 473
28.1 創建用戶任務 473
28.2?編寫用戶代碼 476
28.3 任務執行流程 479
參考文獻 482 |
序: |