譯者序
前言
第一部分 嵌入式系統(tǒng)概述與玩轉mbed
第1章 嵌入式系統(tǒng)、微控制器與ARM 2
1.1 嵌入式系統(tǒng)簡介 2
1.1.1 什么是嵌入式系統(tǒng) 2
1.1.2 嵌入式系統(tǒng)示例 3
1.2 微處理器與微控制器 4
1.2.1 計算機主要組件 5
1.2.2 微控制器 6
1.3 嵌入式系統(tǒng)的開發(fā)流程 7
1.3.1 程序語言:C/C++有什么特別之處 7
1.3.2 開發(fā)周期 7
1.4 進入ARM世界 8
1.4.1 關于ARM的歷史 8
1.4.2 技術細節(jié):RISC的意義 9
1.4.3 Cortex內核 10
本章回顧 11
習題 11
參考文獻 11
第2章 mbed開發(fā)板 12
2.1 mbed簡介 12
2.1.1 mbed體系結構 14
2.1.2 LPC1768微控制器 15
2.2 mbed入門教程 16
2.2.1 步驟1:連接mbed到PC 17
2.2.2 步驟2:創(chuàng)建mbed賬戶 17
2.2.3 步驟3:運行程序 17
2.2.4 步驟4:編譯程序 18
2.2.5 步驟5:下載程序二進制代碼 19
2.2.6 步驟6:修改程序代碼 19
2.3 開發(fā)環(huán)境 19
2.3.1 mbed編譯器和API 19
2.3.2 C/C++的使用 20
本章回顧 20
習題 20
參考文獻 21
第3章 數字輸入和輸出 22
3.1 開始編寫程序 22
3.1.1 思考第一個程序 22
3.1.2 了解mbed的API函數 25
3.1.3 分析while循環(huán) 25
3.2 用電壓表示邏輯值 27
3.3 mbed數字輸出 27
3.3.1 發(fā)光二極管的使用 28
3.3.2 mbed外部引腳的使用 29
3.4 mbed數字輸入 30
3.4.1 開關與數字系統(tǒng)的連接 30
3.4.2 DigitalIn API 31
3.4.3 用if語句響應開關輸入 31
3.5 簡單的光電設備接口 33
3.5.1 光敏反射和透射傳感器 33
3.5.2 光敏傳感器與mbed開發(fā)板的連接 34
3.5.3 七段數碼管顯示 35
3.5.4 七段數碼管與mbed開發(fā)板的連接 36
3.6 驅動大型直流負載 39
3.6.1 使用晶體管驅動 39
3.6.2 用mbed進行電機驅動控制 40
3.6.3 驅動多個七段數碼管 41
3.7 小項目:字母計數器 42
本章回顧 42
習題 43
參考文獻 44
第4章 模擬輸出 45
4.1 數據轉換簡介 45
4.2 mbed開發(fā)板上的模擬輸出 46
4.2.1 產生恒定的輸出電壓 47
4.2.2 鋸齒波 47
4.2.3 測試DAC分辨率 50
4.2.4 產生正弦波 50
4.3 另一種形式的模擬量輸出:脈沖寬度調制 51
4.4 mbed開發(fā)板上的脈沖寬度調制 52
4.4.1 使用mbed的PWM信號源 52
4.4.2 一些PWM輸出實驗 53
4.4.3 控制小電機的速度 55
4.4.4 用軟件方式產生PWM 55
4.4.5 伺服控制 56
4.4.6 輸出到一個壓電轉換器 57
本章回顧 59
習題 60
參考文獻 60
第5章 模擬輸入 61
5.1 數模轉換 61
5.1.1 模-數轉換器 61
5.1.2 范圍、分辨率和量化 62
5.1.3 采樣頻率 64
5.1.4 mbed開發(fā)板上的模擬輸入 64
5.2 模擬輸入和輸出混合應用 65
5.2.1 用可變電壓控制LED亮度 65
5.2.2 用PWM控制LED亮度 66
5.2.3 PWM頻率控制 67
5.3 模擬輸入數據的處理 68
5.3.1 在計算機屏幕上顯示數值 68
5.3.2 將ADC輸出調整到識別范圍內 69
5.3.3 采用平均值降低噪聲 69
5.4 一些簡單的模擬傳感器 70
5.4.1 光敏電阻 70
5.4.2 集成電路溫度傳感器 71
5.5 分析數據轉換時間 71
5.6 小項目:二維光跟蹤 73
本章回顧 73
習題 74
參考文獻 74
第6章 高級編程技術 75
6.1 思考程序設計和程序結構帶來的好處 75
6.2 函數 75
6.3 程序設計 76
6.3.1 使用流程圖定義代碼結構 76
6.3.2 偽代碼 77
6.4 在mbed開發(fā)板上使用函數 78
6.4.1 實現七段數碼管計數器 79
6.4.2 函數重用 80
6.4.3 一個使用函數且更復雜的程序 81
6.5 在C/C++中使用多個文件 83
6.5.1 C/C++程序編譯過程概述 83
6.5.2 C/C++預處理器和預處理器指令 84
6.5.3 #ifndef偽指令 85
6.5.4 全局地使用mbed對象 86
6.6 模塊化程序示例 86
本章回顧 89
習題 90
第7章 串行通信 91
7.1 同步串行通信簡介 91
7.2 串行外圍接口 92
7.2.1 SPI簡介 93
7.2.2 mbed開發(fā)板上的SPI 94
7.2.3 設置mbed SPI主設備 94
7.2.4 創(chuàng)建SPI數據鏈路 95
7.3 智能儀表和SPI加速器 99
7.3.1 ADXL345加速器簡介 99
7.3.2 簡單ADXL345程序開發(fā) 100
7.4 SPI評估 102
7.5 I2C總線 103
7.5.1 I2C總線簡介 103
7.5.2 mbed開發(fā)板上的I2C總線 105
7.5.3 設置I2C數據鏈路 105
7.6 用I2C總線標準的溫度傳感器通信 108
7.7 SRF08超聲波測距儀的使用 110
7.8 I2C總線評估 112
7.9 異步串行數據通信 112
7.9.1 異步串行通信簡介 113
7.9.2 mbed開發(fā)板上的異步串行通信應用 113
7.9.3 同宿主計算機的同步串行通信應用 116
7.10 小項目:多節(jié)點I2C總線 116
本章回顧 116
習題 116
參考文獻 117
第8章 液晶顯示器 118
8.1 顯示技術 118
8.1.1 液晶技術簡介 118
8.1.2 液晶字符顯示 119
8.2 使用PC1602F LCD 120
8.2.1 PC1602F顯示器簡介 121
8.2.2 連接PC1602F到mbed開發(fā)板 121
8.2.3 LCD接口的模塊化編程 122
8.2.4 初始化顯示 123
8.2.5 向LCD發(fā)送顯示數據 124
8.2.6 完整的LCP.cpp定義 125
8.2.7 使用LCD函數 126
8.2.8 向指定位置添加數據 127
8.3 使用mbed開發(fā)板的TextLCD庫 128
8.4 在LCD上顯示模擬輸入數據 130
8.5 更先進的LCD 131
8.5.1 彩色LCD 131
8.5.2 控制SPI標準的LCD手機顯示屏 132
8.6 小項目:數字水平儀 134
本章回顧 134
習題 135
參考文獻 135
第9章 中斷、定時器和任務 136
9.1?嵌入式系統(tǒng)中的定時和任務 136
9.1.1?定時器和中斷 136
9.1.2?任務 136
9.1.3?事件觸發(fā)任務和時間觸發(fā)任務 137
9.2?響應事件觸發(fā)的事件 137
9.2.1?輪詢 137
9.2.2?中斷簡介 138
9.3?簡單的mbed中斷 139
9.4?深入理解中斷 140
9.4.1?LPC1768中斷 142
9.4.2?測試中斷延遲 142
9.4.3?禁用中斷 143
9.4.4?模擬輸入中斷 144
9.4.5?中斷總結 145
9.5?定時器 145
9.5.1 數字計數器 145
9.5.2?使用計數器作為定時器 146
9.5.3?mbed上的定時器 146
9.6?使用mbed定時器 146
9.6.1?使用多個mbed定時器 147
9.6.2?測試定時器延遲 148
9.7?使用mbed超時 150
9.7.1?超時應用簡單示例 150
9.7.2?超時進階應用 151
9.7.3 用超時測試反應時間 152
9.8?使用mbed斷續(xù)裝置 153
9.8.1?節(jié)拍器中使用斷續(xù)裝置 154
9.8.2?思考多任務節(jié)拍器程序 156
9.9 實時時鐘 157
9.10?開關去除抖動 157
9.11?小項目 159
9.11.1?獨立節(jié)拍器 159
9.11.2?加速度計閾值中斷 159
本章回顧 160
習題 160
第10章 存儲器與數據管理 161
10.1?存儲器綜述 161
10.1.1?存儲器功能類型 161
10.1.2?基本電子存儲器類型 161
10.2?使用mbed的數據文件 163
10.2.1?回顧部分所需的C/C++庫函數 164
10.2.2?定義mbed的本地文件系統(tǒng) 164
10.2.3?打開和關閉文件 164
10.2.4?寫入和讀取文件數據 165
10.3?mbed數據文件存取示例 165
10.3.1?文件存取 165
10.3.2?字符串文件存取 166
10.3.3 使用格式化數據 167
10.4?使用mbed的外部存儲器 168
10.5?指針簡介 170
10.6?小項目:加速度計閾值的記錄 172
本章回顧 173
習題 173
參考文獻 173
第二部分 高級和專家級應用
第11章 數字信號處理 176
11.1 數字信號處理器簡介 176
11.2 數字濾波示例 176
11.3?mbed DSP示例 178
11.3.1 數字數據的輸入和輸出 178
11.3.2 信號重構 180
11.3.3 添加一個數字低通濾波器 182
11.3.4 添加一個激活按鈕 183
11.3.5 數字高通濾波器 184
11.4 延遲/回聲效果 184
11.5 使用wave音頻文件 187
11.5.1?波形信息的頭部 187
11.5.2?用mbed讀取wave文件的頭部 189
11.5.3 讀取、輸出單聲道wave數據 191
11.6?DSP小結 194
11.7 小項目:立體聲播放器 194
11.7.1 基本功能的立體聲播放器 194
11.7.2 擁有PC接口的立體聲播放器 194
11.7.3 擁有手機顯示接口的便攜式立體聲播放器 194
本章回顧 194
習題 195
參考文獻 195
第12章 高級串行通信 196
12.1 高級串行通信協議簡介 196
12.2 藍牙串行通信 196
12.2.1 藍牙簡介 196
12.2.2 藍牙模塊RN-41和RN-42的接口 197
12.2.3?通過藍牙發(fā)送mbed數據 197
12.2.4 從主機終端應用程序接收的藍牙數據 199
12.2.5 兩個mbed之間通過藍牙通信 199
12.3 USB簡介 202
12.3.1 使用mbed模擬USB鼠標 203
12.3.2 從mbed端發(fā)送USB MIDI數據 203
12.4 以太網簡介 206
12.4.1 以太網概述 206
12.4.2?實現簡單的mbed以太網通信 207
12.4.3?mbed之間的以太網通信 209
12.5 用mbed進行本地網絡和Internet通信 211
12.5.1?用mbed作為HTTP客戶端 211
12.5.2 用mbed作為HTTP文件服務器 213
12.5.3?用遠程過程調用修改mbed輸出 214
12.5.4?用遠程JavaScript接口控制mbed 216
本章回顧 218
習題 219
參考文獻 219
第13章 控制系統(tǒng) 220
13.1 控制系統(tǒng)簡介 220
13.1.1 閉環(huán)和開環(huán)控制系統(tǒng) 220
13.1.2 閉環(huán)巡航控制示例 221
13.1.3 比例控制 223
13.1.4 PID控制 224
13.2 閉環(huán)數字羅盤示例 225
13.2.1 HMC6352數字羅盤的使用 225
13.2.2 360°旋轉伺服系統(tǒng)的實現 227
13.2.3 閉環(huán)控制算法的實現 229
13.3 基于控制器局域網控制數據通信 231
13.3.1 控制器局域網 231
13.3.2 mbed上的CAN總線 232
本章回顧 237
習題 237
參考文獻 237
第14章 mbed庫函數入門 238
14.1 簡介 238
14.2 控制寄存器概念 238
14.3 數字輸入/輸出 240
14.3.1 mbed數字輸入/輸出控制寄存器 240
14.3.2 數字輸出的應用 241
14.3.3 添加第二個數字輸出 242
14.3.4 數字輸入 243
14.4 深入了解控制寄存器 244
14.4.1 引腳功能選擇寄存器和引腳模式寄存器 245
14.4.2 功率控制寄存器和時鐘選擇寄存器 246
14.5 使用DAC 248
14.5.1 mbed DAC控制寄存器 248
14.5.2 DAC的應用 249
14.6 使用ADC 250
14.6.1 mbed ADC控制寄存器 250
14.6.2 ADC應用 251
14.6.3 改變ADC轉換速度 253
14.7 控制寄存器使用小結 255
本章回顧 255
習題 256
參考文獻 256
第15章 項目擴展 257
15.1 去往何方 257
15.2 mbed Pololu機器人 257
15.3 高級音頻項目 258
15.4 物聯網 258
15.5 mbed LPC11U24簡介 259
15.6 從mbed到實際生產 260
15.7 結束語 262
參考文獻 263
附錄A 數制系統(tǒng) 264
附錄B C語言基礎 269
附錄C mbed技術資料 286
附錄D 配件清單 290
附錄E Tera Term終端模擬器 292