《從零開始設計你的智能小車》從實戰(zhàn)出發(fā),以STM32F103VET6單片機為對象,以C語言為開發(fā)語言,詳細講解如何在CMSIS固件庫基礎上完成嵌入式應用系統(tǒng)的開發(fā)。通過本書的學習,讀者能夠初步了解嵌入式系統(tǒng)設計中的硬件設計和軟件設計,掌握硬件和軟件調(diào)試技巧,具備設計、規(guī)劃和實現(xiàn)一個簡單嵌入式應用系統(tǒng)的能力。 全書以智能小車設計作為主線,內(nèi)容分為基礎篇、提高篇和實踐篇三個層次;A篇介紹嵌入式開發(fā)的基本常識、系統(tǒng)架構(gòu)等。提高篇以小車功能需求為目標來組織各章節(jié)內(nèi)容,每一章實現(xiàn)智能小車的一個功能。實踐篇從應用系統(tǒng)設計規(guī)劃的角度出發(fā),通過兩個不同的智能小車系統(tǒng)設計實例,從功能設計規(guī)劃開始,經(jīng)過硬件需求分析與選型、硬件設計與供電設計,到軟件設計、系統(tǒng)測試,詳細講解從設計規(guī)劃到開發(fā)實現(xiàn)的完整過程。側(cè)重分析設計思路、設計方法,以及項目的組織架構(gòu),培養(yǎng)作為系統(tǒng)開發(fā)工程師而應該具備的全局觀和從系統(tǒng)層面分析、分解系統(tǒng)功能的能力。 本書可作為高等院校自動化、電氣工程等相關專業(yè)的教材,也可作為嵌入式開發(fā)愛好者的入門書籍。
(1) 體現(xiàn)卓越工程師教育培養(yǎng)計劃的理念,注重培養(yǎng)學生解決復雜工程問題的能力,將嵌入式系統(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)容組織由淺入深,基礎篇、提高篇和實踐篇可適應不同層次學習者的需求。
(5) 最小系統(tǒng)板 硬件模塊方式搭建硬件平臺,設計靈活,可拓展性強。
(6) 從實戰(zhàn)出發(fā),按需學習。針對具體的功能需求,先學習單片機片上硬件模塊的功能、相關寄存器和庫函數(shù),再完成設計實現(xiàn)功能。
(7) 針對各章內(nèi)容,配有豐富的設計實例,分析程序架構(gòu),講解調(diào)試方法。
(8) 提供完整的項目開發(fā)設計實例,分解功能需求,分析硬件設計,講解軟件設計,講述完整的項目開發(fā)全過程。
(9) 配套大量教學視頻,從工具的使用、硬件設計,到分析代碼、調(diào)試問題,提供身臨其境的沉浸式教學體驗,可掃描書中二維碼觀看。
(10) 新形態(tài)教材,配套資源豐富,包括教學大綱、PPT課件、教學視頻、開發(fā)實例、開發(fā)軟件、芯片手冊等,可掃描前言下方二維碼下載。
2014年,教育學部推動卓越工程師教育培養(yǎng)計劃,重慶大學自動化學院建立了卓越計劃實驗班。為了適應卓越計劃加強培養(yǎng)學生工程素養(yǎng)的要求,2017年,我為實驗班開設了全新的嵌入式技術(shù)與應用課程。課程注重實踐,引導學生建立工程師的思維方式,培養(yǎng)設計、規(guī)劃、開發(fā)嵌入式應用系統(tǒng)的能力。課程選擇主流的32位ARM CortexM3內(nèi)核STM32F103VET6單片機為對象,以C語言為開發(fā)語言,詳細講解如何在CMSIS固件庫基礎上完成嵌入式應用系統(tǒng)的開發(fā)。
通過幾屆的教學實踐,課程取得了比較滿意的效果,學生們認為課程培養(yǎng)了他們的動手能力,使他們初步掌握了嵌入式開發(fā)技術(shù),很多同學將課程所學的知識應用在競賽和SRTP、國創(chuàng)項目,取得了較好的成績。以課程內(nèi)容為基礎,結(jié)合教學中發(fā)現(xiàn)的問題以及學生實踐中的反饋,形成了本書的主體內(nèi)容。
本書以智能小車設計作為主線,分為基礎篇、提高篇和實踐篇三個層次;A篇介紹嵌入式系統(tǒng)的基本概念、單片機系統(tǒng)架構(gòu)、CMSIS庫基本結(jié)構(gòu)等,重點講解嵌入式系統(tǒng)開發(fā)的基礎知識、常用的片上硬件模塊,包括GPIO模塊、基本定時器以及嵌套向量中斷控制器NVIC等。提高篇以小車功能需求為主線,每章實現(xiàn)小車的一個功能。內(nèi)容安排由淺入深,按需學習,即針對具體的功能需求,選擇合適的擴展硬件模塊。為了控制拓展的硬件模塊而學習片上硬件的相關功能,了解與該功能相關的寄存器和接口函數(shù),掌握基于庫函數(shù)的嵌入式開發(fā)技術(shù)。每章都有設計實例,詳細分析實例項目的硬件設計和軟件設計。在開發(fā)實例的講解上,突出單片機參考手冊數(shù)據(jù)手冊的作用。從項目開發(fā)的角度,分析項目文件的組織結(jié)構(gòu),接口函數(shù)的設計。實踐篇從應用系統(tǒng)設計規(guī)劃的角度出發(fā),通過兩個不同的智能小車設計,從功能設計規(guī)劃開始,到硬件需求分析與選型、硬件設計與供電設計、軟件設計與測試,詳細講解從設計規(guī)劃到開發(fā)實現(xiàn)的完整過程。重點分析設計思路、設計方法,以及項目的組織架構(gòu),培養(yǎng)作為系統(tǒng)開發(fā)工程師應該具備的全局觀和從系統(tǒng)層面分析、分解系統(tǒng)功能的能力。
本書面向?qū)η度胧较到y(tǒng)開發(fā)有興趣的讀者,只要有C語言的編程經(jīng)驗即可,無需更多的軟硬件開發(fā)經(jīng)驗。本書以單片機最小系統(tǒng)板 相關硬件小模塊的方式搭建硬件平臺,而不是直接購買一塊昂貴的開發(fā)板,書中用到的所有硬件模塊都很容易在網(wǎng)絡平臺上購買到,并且有很多可互相替換的硬件模塊可供選擇。新手做硬件設計難免會出錯,在教學過程中,每一屆都有學生因失誤而燒毀硬件,最小系統(tǒng)板、8段LED、L298N等都損壞過,甚至小車都撞壞過,這很正常。學習游泳怎能不嗆水,但是如果損壞的硬件價格昂貴,這就很痛了。集成了所有外擴硬件的開發(fā)板成本太高,一旦損壞就會給學習者帶來高昂的成本損失,也會對其造成很大的心理壓力,使其在學習和使用的過程中畏首畏尾。本書選擇最小系統(tǒng)板 硬件模塊的方式,每一個硬件模塊的價格都不高,減輕學習者的經(jīng)濟壓力和心理負擔,使其更能勇于嘗試。這種方式能鍛煉學習者動手做硬件設計的能力,硬件設計對嵌入式系統(tǒng)設計來說是非常重要的部分。
本書的配套資料中給出了開發(fā)軟件、單片機手冊、芯片數(shù)據(jù)手冊、硬件模塊資料等,還有教學大綱、教學課件、講解視頻、參考例程等,尤其是每個參考例程都配有視頻講解,說明所需要的硬件如何連接,分析程序結(jié)構(gòu),演示實驗現(xiàn)象。學習了相關章節(jié)內(nèi)容后,按照視頻講解,逐步操作,就能復現(xiàn)實驗現(xiàn)象。在吃透參考例程的基礎上,邊學習邊實踐,最終一定能夠設計并實現(xiàn)自己的智能小車,這時就能真正體會到開發(fā)嵌入式系統(tǒng)的樂趣。
胡青
2022年2月
于重慶大學
教學大綱 教學課件
參考例程
開發(fā)軟件 單片機手冊
硬件模塊資料
胡青,工學博士,現(xiàn)為重慶大學自動化學院副教授。作為主研人員,參與重慶市精品課程計算機硬件技術(shù)基礎系列課程的建設。參與多項市級、校級教改項目,獲得重慶市高等教育教學成果三等獎一項。在《計算機教育》《實驗室研究與探索》等期刊上發(fā)表教改文章10余篇。參編教材4部,其中《單片機原理及應用》為普通高等教育十一五國家級規(guī)劃教材。在嵌入式開發(fā)方面積累了豐富的工程經(jīng)驗以及教學經(jīng)驗。
第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固件庫
基礎篇
第3章嵌入式程序設計中的C語言
3.1整型
3.1.1整型的位寬
3.1.2訪問硬件模塊的寄存器
3.2volatile關鍵字
3.2.1C語言編譯器的優(yōu)化功能
3.2.2用volatile關鍵字避免優(yōu)化
3.3結(jié)構(gòu)體數(shù)據(jù)類型
3.3.1struct關鍵字
3.3.2訪問單片機片上外設寄存器
3.4枚舉數(shù)據(jù)類型
3.5static關鍵字
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定義復位中斷子程序
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應用實例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引腳控制外設
6.5IO引腳的復用功能AFIO
6.5.1IO引腳的復用功能
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寄存器的預裝載功能
7.3基本定時器的編程操作
7.3.1TIM6、TIM7的相關寄存器
7.3.2基本定時器的相關庫函數(shù)
7.4秒表的設計與實現(xiàn)
7.4.1秒表功能分析
7.4.2硬件選型
7.4.3硬件設計
7.4.4軟件設計
第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中斷處理過程及相關接口庫
8.3.1片上硬件中斷處理過程
8.3.2中斷處理庫函數(shù)總結(jié)
8.4應用實例中斷方式實現(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的相關庫函數(shù)
9.1.4EXTI初始化步驟及中斷響應過程
9.2設計實例中斷方式處理秒表按鍵
9.2.1分段計時功能
9.2.2硬件設計
9.2.3軟件設計
提高篇
第10章讓小車跑起來PWM調(diào)速
10.1通用定時器的基本定時功能
10.1.1通用定時器概述
10.1.2通用定時器的時鐘源
10.1.3通用定時器的計數(shù)模式
10.1.4通用定時器的從模式
10.1.5相關寄存器
10.1.6相關庫函數(shù)
10.1.7設計實例檢測信號頻率
10.2通用定時器的PWM輸出模式
10.2.1PWM信號
10.2.2捕獲比較通道
10.2.3PWM輸出模式
10.2.4相關寄存器
10.2.5相關庫函數(shù)
10.3電動機驅(qū)動芯片L298N
10.3.1直流電動機驅(qū)動模塊L298N
10.3.2單片機控制L298N
10.4應用實例小車設計
10.4.1小車的硬件設計
10.4.2小車的軟件設計
實踐篇
第11章避障小車超聲波測距
11.1超聲波測距原理
11.1.1基本原理
11.1.2HCSRF05測距模塊
11.1.3單片機控制超聲波測距模塊
11.2通用定時器的輸入捕獲功能
11.2.1輸入捕獲的基本原理
11.2.2相關寄存器
11.2.3相關庫函數(shù)
11.2.4應用實例捕獲方式實現(xiàn)測距
11.3嘀嗒定時器實現(xiàn)定時測距
11.3.1嘀嗒定時器
11.3.2嘀嗒定時器的寄存器
11.3.3相關庫函數(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相關寄存器
12.3.4相關庫函數(shù)
12.4應用實例
12.4.1單片機與PC之間的串口通信
12.4.2單片機與手機之間的藍牙通信
第13章智能小車設計方案分析
13.1避障小車設計方案
13.1.1小車功能規(guī)劃
13.1.2硬件選型
13.1.3硬件設計分析
13.1.4軟件設計分析
13.2遙控小車設計方案
13.2.1小車功能規(guī)劃
13.2.2硬件需求分析
13.2.3硬件設計分析
13.2.4軟件設計分析
習題
參考文獻