《從零開始設(shè)計你的智能小車》從實戰(zhàn)出發(fā),以STM32F103VET6單片機為對象,以C語言為開發(fā)語言,詳細講解如何在CMSIS固件庫基礎(chǔ)上完成嵌入式應(yīng)用系統(tǒng)的開發(fā)。通過本書的學(xué)習(xí),讀者能夠初步了解嵌入式系統(tǒng)設(shè)計中的硬件設(shè)計和軟件設(shè)計,掌握硬件和軟件調(diào)試技巧,具備設(shè)計、規(guī)劃和實現(xiàn)一個簡單嵌入式應(yīng)用系統(tǒng)的能力。 全書以智能小車設(shè)計作為主線,內(nèi)容分為基礎(chǔ)篇、提高篇和實踐篇三個層次;A(chǔ)篇介紹嵌入式開發(fā)的基本常識、系統(tǒng)架構(gòu)等。提高篇以小車功能需求為目標來組織各章節(jié)內(nèi)容,每一章實現(xiàn)智能小車的一個功能。實踐篇從應(yīng)用系統(tǒng)設(shè)計規(guī)劃的角度出發(fā),通過兩個不同的智能小車系統(tǒng)設(shè)計實例,從功能設(shè)計規(guī)劃開始,經(jīng)過硬件需求分析與選型、硬件設(shè)計與供電設(shè)計,到軟件設(shè)計、系統(tǒng)測試,詳細講解從設(shè)計規(guī)劃到開發(fā)實現(xiàn)的完整過程。側(cè)重分析設(shè)計思路、設(shè)計方法,以及項目的組織架構(gòu),培養(yǎng)作為系統(tǒng)開發(fā)工程師而應(yīng)該具備的全局觀和從系統(tǒng)層面分析、分解系統(tǒng)功能的能力。 本書可作為高等院校自動化、電氣工程等相關(guān)專業(yè)的教材,也可作為嵌入式開發(fā)愛好者的入門書籍。
(1) 體現(xiàn)卓越工程師教育培養(yǎng)計劃的理念,注重培養(yǎng)學(xué)生解決復(fù)雜工程問題的能力,將嵌入式系統(tǒng)開發(fā)能力的培養(yǎng)常態(tài)化、課程化。
(2) 選用Coretex-M3內(nèi)核的STM32F103VET6單片機,深入分析CMSIS固件庫,詳細講解基于固件庫的嵌入式系統(tǒng)開發(fā)。
(3) 專門講解C語言在嵌入式系統(tǒng)開發(fā)中的獨到之處,以及固件庫C語言程序的特性。
(4) 內(nèi)容組織由淺入深,基礎(chǔ)篇、提高篇和實踐篇可適應(yīng)不同層次學(xué)習(xí)者的需求。
(5) 最小系統(tǒng)板 硬件模塊方式搭建硬件平臺,設(shè)計靈活,可拓展性強。
(6) 從實戰(zhàn)出發(fā),按需學(xué)習(xí)。針對具體的功能需求,先學(xué)習(xí)單片機片上硬件模塊的功能、相關(guān)寄存器和庫函數(shù),再完成設(shè)計實現(xiàn)功能。
(7) 針對各章內(nèi)容,配有豐富的設(shè)計實例,分析程序架構(gòu),講解調(diào)試方法。
(8) 提供完整的項目開發(fā)設(shè)計實例,分解功能需求,分析硬件設(shè)計,講解軟件設(shè)計,講述完整的項目開發(fā)全過程。
(9) 配套大量教學(xué)視頻,從工具的使用、硬件設(shè)計,到分析代碼、調(diào)試問題,提供身臨其境的沉浸式教學(xué)體驗,可掃描書中二維碼觀看。
(10) 新形態(tài)教材,配套資源豐富,包括教學(xué)大綱、PPT課件、教學(xué)視頻、開發(fā)實例、開發(fā)軟件、芯片手冊等,可掃描前言下方二維碼下載。
2014年,教育學(xué)部推動卓越工程師教育培養(yǎng)計劃,重慶大學(xué)自動化學(xué)院建立了卓越計劃實驗班。為了適應(yīng)卓越計劃加強培養(yǎng)學(xué)生工程素養(yǎng)的要求,2017年,我為實驗班開設(shè)了全新的嵌入式技術(shù)與應(yīng)用課程。課程注重實踐,引導(dǎo)學(xué)生建立工程師的思維方式,培養(yǎng)設(shè)計、規(guī)劃、開發(fā)嵌入式應(yīng)用系統(tǒng)的能力。課程選擇主流的32位ARM CortexM3內(nèi)核STM32F103VET6單片機為對象,以C語言為開發(fā)語言,詳細講解如何在CMSIS固件庫基礎(chǔ)上完成嵌入式應(yīng)用系統(tǒng)的開發(fā)。
通過幾屆的教學(xué)實踐,課程取得了比較滿意的效果,學(xué)生們認為課程培養(yǎng)了他們的動手能力,使他們初步掌握了嵌入式開發(fā)技術(shù),很多同學(xué)將課程所學(xué)的知識應(yīng)用在競賽和SRTP、國創(chuàng)項目,取得了較好的成績。以課程內(nèi)容為基礎(chǔ),結(jié)合教學(xué)中發(fā)現(xiàn)的問題以及學(xué)生實踐中的反饋,形成了本書的主體內(nèi)容。
本書以智能小車設(shè)計作為主線,分為基礎(chǔ)篇、提高篇和實踐篇三個層次;A(chǔ)篇介紹嵌入式系統(tǒng)的基本概念、單片機系統(tǒng)架構(gòu)、CMSIS庫基本結(jié)構(gòu)等,重點講解嵌入式系統(tǒng)開發(fā)的基礎(chǔ)知識、常用的片上硬件模塊,包括GPIO模塊、基本定時器以及嵌套向量中斷控制器NVIC等。提高篇以小車功能需求為主線,每章實現(xiàn)小車的一個功能。內(nèi)容安排由淺入深,按需學(xué)習(xí),即針對具體的功能需求,選擇合適的擴展硬件模塊。為了控制拓展的硬件模塊而學(xué)習(xí)片上硬件的相關(guān)功能,了解與該功能相關(guān)的寄存器和接口函數(shù),掌握基于庫函數(shù)的嵌入式開發(fā)技術(shù)。每章都有設(shè)計實例,詳細分析實例項目的硬件設(shè)計和軟件設(shè)計。在開發(fā)實例的講解上,突出單片機參考手冊數(shù)據(jù)手冊的作用。從項目開發(fā)的角度,分析項目文件的組織結(jié)構(gòu),接口函數(shù)的設(shè)計。實踐篇從應(yīng)用系統(tǒng)設(shè)計規(guī)劃的角度出發(fā),通過兩個不同的智能小車設(shè)計,從功能設(shè)計規(guī)劃開始,到硬件需求分析與選型、硬件設(shè)計與供電設(shè)計、軟件設(shè)計與測試,詳細講解從設(shè)計規(guī)劃到開發(fā)實現(xiàn)的完整過程。重點分析設(shè)計思路、設(shè)計方法,以及項目的組織架構(gòu),培養(yǎng)作為系統(tǒng)開發(fā)工程師應(yīng)該具備的全局觀和從系統(tǒng)層面分析、分解系統(tǒng)功能的能力。
本書面向?qū)η度胧较到y(tǒng)開發(fā)有興趣的讀者,只要有C語言的編程經(jīng)驗即可,無需更多的軟硬件開發(fā)經(jīng)驗。本書以單片機最小系統(tǒng)板 相關(guān)硬件小模塊的方式搭建硬件平臺,而不是直接購買一塊昂貴的開發(fā)板,書中用到的所有硬件模塊都很容易在網(wǎng)絡(luò)平臺上購買到,并且有很多可互相替換的硬件模塊可供選擇。新手做硬件設(shè)計難免會出錯,在教學(xué)過程中,每一屆都有學(xué)生因失誤而燒毀硬件,最小系統(tǒng)板、8段LED、L298N等都損壞過,甚至小車都撞壞過,這很正常。學(xué)習(xí)游泳怎能不嗆水,但是如果損壞的硬件價格昂貴,這就很痛了。集成了所有外擴硬件的開發(fā)板成本太高,一旦損壞就會給學(xué)習(xí)者帶來高昂的成本損失,也會對其造成很大的心理壓力,使其在學(xué)習(xí)和使用的過程中畏首畏尾。本書選擇最小系統(tǒng)板 硬件模塊的方式,每一個硬件模塊的價格都不高,減輕學(xué)習(xí)者的經(jīng)濟壓力和心理負擔,使其更能勇于嘗試。這種方式能鍛煉學(xué)習(xí)者動手做硬件設(shè)計的能力,硬件設(shè)計對嵌入式系統(tǒng)設(shè)計來說是非常重要的部分。
本書的配套資料中給出了開發(fā)軟件、單片機手冊、芯片數(shù)據(jù)手冊、硬件模塊資料等,還有教學(xué)大綱、教學(xué)課件、講解視頻、參考例程等,尤其是每個參考例程都配有視頻講解,說明所需要的硬件如何連接,分析程序結(jié)構(gòu),演示實驗現(xiàn)象。學(xué)習(xí)了相關(guān)章節(jié)內(nèi)容后,按照視頻講解,逐步操作,就能復(fù)現(xiàn)實驗現(xiàn)象。在吃透參考例程的基礎(chǔ)上,邊學(xué)習(xí)邊實踐,最終一定能夠設(shè)計并實現(xiàn)自己的智能小車,這時就能真正體會到開發(fā)嵌入式系統(tǒng)的樂趣。
胡青
2022年2月
于重慶大學(xué)
教學(xué)大綱 教學(xué)課件
參考例程
開發(fā)軟件 單片機手冊
硬件模塊資料
第1章嵌入式系統(tǒng)概述
1.1單片機概述
1.1.1單片機的定義
1.1.2單片機與PC的對比
1.2嵌入式系統(tǒng)
1.3ARM是什么
1.3.1ARM公司簡介
1.3.2ARM架構(gòu)、ARM內(nèi)核與ARM單片機
1.3.3ARM CortexM3內(nèi)核概述
第2章STM32F103單片機概述
2.1單片機的手冊
2.2STM32F103單片機體系結(jié)構(gòu)概述
2.2.1ARM CortexM3內(nèi)核
2.2.2STM32F103單片機系統(tǒng)架構(gòu)
2.3什么是CMSIS
2.4STM32固件庫
基礎(chǔ)篇
第3章嵌入式程序設(shè)計中的C語言
3.1整型
3.1.1整型的位寬
3.1.2訪問硬件模塊的寄存器
3.2volatile關(guān)鍵字
3.2.1C語言編譯器的優(yōu)化功能
3.2.2用volatile關(guān)鍵字避免優(yōu)化
3.3結(jié)構(gòu)體數(shù)據(jù)類型
3.3.1struct關(guān)鍵字
3.3.2訪問單片機片上外設(shè)寄存器
3.4枚舉數(shù)據(jù)類型
3.5static關(guān)鍵字
3.5.1靜態(tài)全局變量
3.5.2靜態(tài)局部變量
3.5.3靜態(tài)函數(shù)
3.6宏定義
3.7條件編譯與頭文件
3.7.1條件編譯指令
3.7.2頭文件
3.8變量在哪里
3.8.1堆、棧和靜態(tài)區(qū)
3.8.2單片機中變量的存儲空間分配
第4章第一個STM32 項目
4.1開發(fā)環(huán)境與所需硬件
4.1.1搭建開發(fā)環(huán)境
4.1.2所需硬件
4.1.3所需工具
4.2創(chuàng)建第一個項目
4.3下載與調(diào)試程序
4.3.1安裝仿真器驅(qū)動
4.3.2在Keil軟件中配置仿真器
4.3.3編譯下載程序
4.3.4Debug調(diào)試程序
第5章深入了解項目模板
5.1啟動文件的作用
5.1.1定義棧和堆
5.1.2定義中斷向量表
5.1.3定義復(fù)位中斷子程序
5.2單片機的時鐘初始化
5.3stm32f10x.h頭文件的作用
5.4項目中的文件管理
5.4.1CMSIS固件庫文件
5.4.2項目中的系統(tǒng)文件
5.4.3項目中的用戶文件
第6章按鍵與小燈的控制GPIO模塊
6.1GPIO的輸入/輸出模式
6.1.1小燈與GPIO輸出模式
6.1.2按鍵與GPIO輸入模式
6.2GPIO的編程操作
6.2.1GPIO寄存器
6.2.2GPIO庫函數(shù)
6.2.3GPIO的按位操作位帶別名區(qū)
6.3應(yīng)用實例8段LED顯示控制
6.3.1一位8段LED顯示控制
6.3.2多位8段LED顯示控制
6.4IO引腳的電氣特性
6.4.1TTL電平
6.4.2CMOS電平
6.4.3IO引腳的電氣特性
6.4.4IO引腳控制外設(shè)
6.5IO引腳的復(fù)用功能AFIO
6.5.1IO引腳的復(fù)用功能
6.5.2AFIO重映射功能的編程操作
6.5.3調(diào)試端口的重映射功能
第7章秒表的實現(xiàn)基本定時器
7.1定時器原理概述
7.2基本定時器的工作原理
7.2.1基本定時器的結(jié)構(gòu)
7.2.2基本定時器的時鐘源
7.2.3基本定時器的計數(shù)模式
7.2.4定時時間的計算
7.2.5ARR寄存器的預(yù)裝載功能
7.3基本定時器的編程操作
7.3.1TIM6、TIM7的相關(guān)寄存器
7.3.2基本定時器的相關(guān)庫函數(shù)
7.4秒表的設(shè)計與實現(xiàn)
7.4.1秒表功能分析
7.4.2硬件選型
7.4.3硬件設(shè)計
7.4.4軟件設(shè)計
第8章中斷及中斷管理器NVIC
8.1中斷基本概念
8.1.1中斷的定義
8.1.2中斷向量表
8.1.3中斷優(yōu)先級與中斷嵌套
8.2STM32單片機的中斷管理
8.2.1中斷源與中斷向量表
8.2.2內(nèi)核中開放/禁止中斷
8.2.3中斷控制器NVIC
8.3中斷處理過程及相關(guān)接口庫
8.3.1片上硬件中斷處理過程
8.3.2中斷處理庫函數(shù)總結(jié)
8.4應(yīng)用實例中斷方式實現(xiàn)秒表計時
8.4.1定時器的更新中斷
8.4.2中斷機制實現(xiàn)計時
第9章按鍵觸發(fā)中斷EXTI模塊
9.1外部中斷/事件模塊EXTI
9.1.1EXTI功能
9.1.2EXTI寄存器
9.1.3EXTI的相關(guān)庫函數(shù)
9.1.4EXTI初始化步驟及中斷響應(yīng)過程
9.2設(shè)計實例中斷方式處理秒表按鍵
9.2.1分段計時功能
9.2.2硬件設(shè)計
9.2.3軟件設(shè)計
提高篇
第10章讓小車跑起來PWM調(diào)速
10.1通用定時器的基本定時功能
10.1.1通用定時器概述
10.1.2通用定時器的時鐘源
10.1.3通用定時器的計數(shù)模式
10.1.4通用定時器的從模式
10.1.5相關(guān)寄存器
10.1.6相關(guān)庫函數(shù)
10.1.7設(shè)計實例檢測信號頻率
10.2通用定時器的PWM輸出模式
10.2.1PWM信號
10.2.2捕獲比較通道
10.2.3PWM輸出模式
10.2.4相關(guān)寄存器
10.2.5相關(guān)庫函數(shù)
10.3電動機驅(qū)動芯片L298N
10.3.1直流電動機驅(qū)動模塊L298N
10.3.2單片機控制L298N
10.4應(yīng)用實例小車設(shè)計
10.4.1小車的硬件設(shè)計
10.4.2小車的軟件設(shè)計
實踐篇
第11章避障小車超聲波測距
11.1超聲波測距原理
11.1.1基本原理
11.1.2HCSRF05測距模塊
11.1.3單片機控制超聲波測距模塊
11.2通用定時器的輸入捕獲功能
11.2.1輸入捕獲的基本原理
11.2.2相關(guān)寄存器
11.2.3相關(guān)庫函數(shù)
11.2.4應(yīng)用實例捕獲方式實現(xiàn)測距
11.3嘀嗒定時器實現(xiàn)定時測距
11.3.1嘀嗒定時器
11.3.2嘀嗒定時器的寄存器
11.3.3相關(guān)庫函數(shù)
11.3.4嘀嗒定時器實現(xiàn)定時測距
第12章遙控小車藍牙遙控
12.1藍牙技術(shù)
12.1.1發(fā)展歷史
12.1.2基本特性
12.2HC05藍牙模塊
12.2.1功能概述
12.2.2工作原理
12.2.3AT命令
12.2.4PC串口配置藍牙模塊
12.3UART串口通信
12.3.1串口通信基本概念
12.3.2UART模塊概述
12.3.3相關(guān)寄存器
12.3.4相關(guān)庫函數(shù)
12.4應(yīng)用實例
12.4.1單片機與PC之間的串口通信
12.4.2單片機與手機之間的藍牙通信
第13章智能小車設(shè)計方案分析
13.1避障小車設(shè)計方案
13.1.1小車功能規(guī)劃
13.1.2硬件選型
13.1.3硬件設(shè)計分析
13.1.4軟件設(shè)計分析
13.2遙控小車設(shè)計方案
13.2.1小車功能規(guī)劃
13.2.2硬件需求分析
13.2.3硬件設(shè)計分析
13.2.4軟件設(shè)計分析
習(xí)題
參考文獻