图书简介:
目 录
第1章 ARM Cortex-M3处理器编程环境与嵌入式系统 (1)
1.1 单片机与ARM Cortex-M3处理器 (1)
1.2 基于ARM Cortex-M3的STM32单片机教学开发板 (5)
任务一 获得软件 (7)
任务二 安装软件 (8)
任务三 硬件连接 (9)
1.3 创建工程和执行程序 (11)
任务四 你的第一个工程 (11)
任务五 你的第一个程序 (15)
任务六 下载可执行文件到教学开发板 (18)
任务七 用串口调试软件查看单片机输出信息 (25)
任务八 做完实验关断电源 (29)
工程素质和技能归纳 (29)
第2章 STM32单片机I/O端口与伺服电机控制 (30)
2.1 STM32单片机的输入/输出端口 (30)
任务一 认识封装 (30)
任务二 单灯闪烁控制 (33)
2.2 STM32单片机的时钟配置 (36)
2.3 STM32单片机的I/O端口配置 (45)
任务三 该你了—让另一个LED闪烁 (58)
任务四 流水灯 (59)
2.4 STM32单片机I/O端口的应用 (60)
任务五 机器人伺服电机控制信号 (60)
任务六 计数并控制循环次数 (63)
任务七 用你的计算机来控制机器人运动 (66)
工程素质和技能归纳 (68)
第3章 STM32单片机程序模块化设计与机器人运动控制 (70)
3.1 STM32单片机程序调试方法 (70)
任务一 程序调试 (70)
3.2 STM32单片机程序模块化设计 (78)
任务二 基本巡航动作 (79)
任务三 匀加速/减速运动 (82)
任务四 用函数调用简化运动程序 (84)
任务五 高级主题—用数组建立复杂运动 (88)
工程素质和技能归纳 (92)
第4章 STM32单片机中断编程与机器人触觉导航 (93)
4.1 STM32单片机按键输入检测 (93)
任务一 按键检测 (94)
4.2 STM32单片机输入端口的应用 (95)
任务二 安装并测试机器人的触觉—胡须 (95)
任务三 基于胡须的机器人触觉导航 (100)
任务四 机器人进入死区后的人工智能决策 (103)
4.3 STM32单片机中断编程 (107)
任务五 按键中断 (112)
任务六 中断方式测试机器人触觉 (128)
工程素质和技能归纳 (130)
第5章 STM32单片机输入/输出端口综合应用与红外导航 (132)
任务一 搭建电路并测试红外发射器和接收器 (133)
任务二 探测和避开障碍物 (137)
任务三 高性能的红外导航 (140)
任务四 俯视的探测器 (143)
工程素质和技能归纳 (146)
第6章 STM32单片机定时器编程与机器人的距离检测 (147)
6.1 STM32单片机通用定时器 (147)
任务一 通用定时器控制LED闪烁 (155)
6.2 STM32单片机通用定时器的应用 (158)
任务二 距离探测 (158)
任务三 尾随小车 (162)
任务四 跟踪条纹带 (168)
6.3 STM32单片机高级控制定时器 (170)
任务五 高级控制定时器控制LED闪烁 (172)
任务六 使用高级控制定时器实现PWM控制 (174)
工程素质和技能归纳 (182)
第7章 STM32单片机串口编程及其应用 (183)
7.1 STM32单片机串行通信接口 (183)
任务一 编写串口通信程序 (188)
7.2 串行RS-232电平与TTL电平转换 (190)
任务二 串口Echo回应程序 (194)
工程素质和技能归纳 (198)
第8章 STM32单片机LCD显示接口编程及其应用 (199)
8.1 LCD介绍 (199)
任务一 认识LCD模块 (201)
8.2 STM32单片机LCD接口编程 (201)
任务二 编写LCD模块驱动程序 (206)
任务三 用LCD显示机器人运动状态 (209)
工程素质和技能归纳 (213)
第9章 STM32单片机模数转换编程及其应用 (214)
9.1 A/D模数转换介绍 (214)
任务一 认识传感器 (216)
9.2 STM32单片机A/D转换编程 (217)
任务二 编写A/D程序 (224)
任务三 环境温度测量 (226)
工程素质和技能归纳 (231)
第10章 STM32单片机DMA编程及其应用 (232)
10.1 DMA介绍 (232)
10.2 STM32单片机DMA编程 (234)
任务一 利用DMA方式进行A/D数据采集 (238)
任务二 DMA与USART、ADC、定时器综合编程 (242)
工程素质和技能归纳 (246)
第11 章 STM32单片机实时时钟编程及其应用 (247)
11.1 RTC实时时钟介绍 (247)
任务一 进一步认识晶振 (249)
11.2 STM32单片机RTC的结构和寄存器 (251)
11.3 STM32单片机的备份寄存器和电源控制寄存器 (255)
任务二 编写RTC程序 (258)
任务三 RTC时间设置编程 (263)
任务四 闹钟提醒机器人编程 (271)
11.4 STM32单片机的侵入检测 (275)
任务五 侵入检测编程 (275)
11.5 STM32单片机的电源控制 (278)
任务六 电源控制编程 (281)
工程素质和技能归纳 (284)
第12 章 STM32单片机看门狗编程及其应用 (285)
12.1 看门狗介绍 (285)
12.2 STM32单片机独立看门狗编程 (287)
任务一 独立看门狗编程 (289)
任务二 认识系统节拍定时器 (294)
12.3 STM32单片机窗口看门狗编程 (295)
任务三 窗口看门狗编程 (298)
工程素质和技能归纳 (304)
第13 章 STM32单片机数模转换编程及其应用 (305)
13.1 D/A数模转换介绍 (305)
13.2 STM32单片机D/A结构和编程方法 (307)
13.3 STM32单片机D/A转换编程 (316)
任务一 三角波生成 (316)
任务二 噪声生成 (321)
任务三 自定义波形生成 (322)
工程素质和技能归纳 (324)
附录A 本书所用STM32教学开发板主要电路图 (325)
附录B 基于ARM Cortex-M3的STM32微控制器原理归纳 (333)
B.1 基于ARM Cortex-M3内核的STM32F10x微控制器结构 (333)
B.2 存储映像地址 (337)
B.3 芯片编号和引脚说明 (344)
附录C STM32固件库说明 (351)
附录D 本书所使用的器材清单 (365)
参考文献 (367)
展开
第2版前言
“工作导向创新实践教材”系列丛书距今已出版十年,得到了许多高等本科院校和职业技术学院的关心与厚爱,在此感谢所有使用过此系列丛书的读者。
工作导向的概念,不只是一个简单的概念游戏,而是包含了深刻的哲理。学习的目的,特别是对于未来想从事工程师职业的学生而言,不仅仅是学习某一个知识体系,如单片机的知识体系或者C语言的知识体系,而是应该更进一步,是要获得如何利用这些知识去解决实际工程问题的能力,也就是动手实践能力。《论工程教育的科学主导与工程回归》(秦志强著,高等工程教育研究,2005年5期)一文中指出:抽象的“道”(知识)必须与实际的系统结合,才能发挥其作用。本书编著者经与多位企业经理探讨,总结出图1所示的“嵌入式与电子工程师能力与素质培养体系架构图”。
图1 嵌入式与电子工程师能力与素质培养体系架构图
传统的嵌入式系统教材,基本上都是为了给学生建立知识体系,教学的结果却是不仅知识体系建立不起来,动手能力就更不用提了。工程师是为了解决问题,这种解决问题的能力只有从实践中才能获得。同时,单纯的实践也无法获得真正的能力,关键是如何从实践的经验和体会中,归纳出共性的知识,建立起知识体系,然后再将这些知识重新应用到新的实践中去。这也是当今的大学生要在未来的实际工作(无论是在企业研发还是在高校做研究)中所必须采取的学习和工作方法。因此,如何在大学三年或者四年中,掌握这种自我学习和提高的方法,是高等教育和工程教育改革的根本目的。而相应教材的编写,就是应该按照这种在未来的实际工作中学习和工作的方法来编写。做到了这一点,才是真正实践了工作导向的哲学理念:实践、归纳、总结和再实践。
因此,在使用“工作导向创新实践教材”系列丛书时,可以围绕典型的“工程对象或产品”,采用“基于工作过程”的教学法,按照“任务驱动-实践-归纳-总结-再实践”的教学模式进行教学,打破“讲课+实验”的传统教学模式,使学生在“学中做、做中学”,这样才能归纳、理解、总结出共性的知识,并建立起某个领域的知识体系。
单片机和C语言是目前嵌入式技术、计算机技术、电子信息、自动控制、工业电气、机电一体化等工程教育中最为基本,也是最为核心的课程。要学会利用单片机和C语言去解决实际问题,掌握核心知识和技能,单单靠一两本好的教材是无法实现的。学习基于ARM Cortex-M3内核的32位STM32单片机,对于单片机和C语言基础较弱的同学或者个人而言,也许会感觉比较困难。这时建议你先学习和实践本系列教材的《C51单片机应用与C语言程序设计》或《单片机嵌入式系统编程与接口设计实践》。掌握好编程的基本思路和方法,并了解单片机的输入和输出接口特性,然后再使用本教材学习。同时,本系列教材还有《AVR单片机与小型机器人制作》。对于同样的项目和课题,采用了不同的微控制器或微处理器去实现,让你能够从中掌握和理解分析问题和解决问题的根本方法,让教师和同学可以根据教学安排和自己的需要选择硬件平台。
只有学习完单片机和C语言并已经很好地掌握其中的知识点,才有可能进一步学习ARM、Linux等高级嵌入式课程。为此,在这套“工作导向创新实践教材”系列丛书中,形成从电子技术和C语言基础入门,到8位AVR或者51单片机,再到传感器应用,最后到32位ARM单片机等高端嵌入式系统的系列化教材,让同学们可以从一个没有任何基础的学生循序渐进成长为可以进行复杂嵌入式系统设计和开发的工程师。
本教材可作为具有单片机和C语言基础的大学三年级以上学生学习用书,还可以供其他希望学习嵌入式系统设计的工程师和爱好者使用。因为是工作导向,我们以两轮小型移动机器人的构思(Conceive)、设计(Design)、实施(Implement)、运行(Operate)为典型项目,所以每套教材最好配套相应的硬件设备方能达到最佳的教学和学习效果。一些拓展项目需要用到电子元器件和传感器,详细的清单可参考本书最后的附录D。
从我接触ARM开始,就非常喜欢这个嵌入式处理器,从ARM7,到ARM9和ARM11,以及后来的ARM Cortex,并切身参与和体会到ARM技术在我们身边的应用:消费电子、手机、工业测控、机器人控制、无人机、智能硬件、可穿戴设备、新能源、汽车电子、智能家居、物联网、无线传感器网络、医疗电子和航空航天系统。2008年暑期,在华中科技大学召开的嵌入式技术研讨会上,时任ARM中国总裁谭军博士与笔者交流了ARM Cortex内核在MCU方面的应用情况,笔者感觉到这个内核的广阔前景,因为越来越多的MCU应用对信号采集、人机界面、通信接口提出了更高的要求。这些年越来越多地发现:大多数学习ARM处理器的学生或者个人上手较困难。个人感觉其中一个原因可能是ARM嵌入式处理器将内部总线分为不同速度总线:AHB和APB,即高速的系统总线和慢速的外设总线,其实这相当于PC主板中的北桥芯片所外接的高速系统总线和南桥芯片所接的外设总线。基于ARM Cortex内核的MCU内部结构与普通的8/16位单片机在系统结构上最大的区别就在这里。一般的单片机只有1个系统时钟频率,而基于ARM Cortex的MCU可以给内核和不同外设模块提供不同的时钟频率,加上片内各种外设众多(集成度高),于是多了很多在普通的8/16位单片机领域中没有的内容(如DMA等),造成了难学的局面。笔者建议读者可以先尝试简单了解一下ARM7或ARM9的体系结构,毕竟Cortex内核是基于ARMv7的,而ARM7嵌入式处理器使用的是ARMv4,ARM9嵌入式处理器使用的是ARMv4或者ARMv5体系结构,ARM10嵌入式处理器使用的是ARMv5,ARM11嵌入式处理器使用的是ARMv6体系结构,因此,ARM Cortex内核要先进和复杂些。
为了降低学习难度,本书各章节在讲述具体内容时,以任务为驱动,通过“学中做、做中学”,即DIY(Do It Yourself)和LBD(Learning By Doing)的方式,介绍和讲解所需要用到的新知识、新技能,按照认识论的规律学习和掌握基于ARM Cortex-M3内核的STM32单片机技术及其应用编程。有别于数据手册式的教材,本书将ARM Cortex-M3内核介绍、STM32单片机的内部结构等原理性的内容列出在附录B中,各个章节也没有繁冗的寄存器说明(参见ST公司网页上的数据手册或本书配套资料),旨在突出重点。每章都有一些读者可能在学习过程中涉及的相关知识的讲解,希望读者能掌握一些背景知识,并且最后都有工程素质和技能归纳,启发学生进行知识的归纳和系统化。同时,附录B中也对STM32单片机原理性的内容做了进一步的解释和归纳,其内容很重要,务必引起注意。
无论是大学本科还是高职院校,都可以采用本教材,具体的教学安排完全可以根据学校原有的教学计划,只是上课的方式要进行调整,不必再单独开设理论和实验课程,项目拓展课程可以根据每个学校的情况灵活设置,没有必要统一。老师可在教学过程中增加一系列竞赛环节,使整个教学和学习过程充满挑战和乐趣,提高学习效果,并培养每个学生的理论联系实际、科学主导工程的系统世界观和方法论。
另外,书中各章有关内容有意将中文和英文进行对照,同时部分表格采用英文(参考芯片英文数据手册),一是为了让读者准确知道其含义,并掌握一定的嵌入式系统专业术语;二是希望读者在编程时不要用“汉语拼音”来定义变量和函数名,养成良好的编码风格,毕竟程序是用英文写的。本书例程文件名及代码也是如此。在帮助读者循序渐进地掌握STM32单片机原理与应用的同时,笔者也希望通过这种“任务驱动”的方式,引导读者了解如何去探索并学习新的技术,可能是你在学校里没有学到的,因为在这个技术发展迅速的世界,今后你自己可能会接触到各种最新的技术,资料是中文或英文的。这样做也是作为老师的一份责任:不仅仅授人以鱼,更要授人以“渔”。
本书的内容主要包括STM32单片机的时钟、IO、中断、定时器、串口、显示接口、ADC、DMA、RTC、电源控制、看门狗、DAC等,但没有涉及CAN、USB、uCOS移植等方面的内容(包含在高级实践教材中)。读者从本书中掌握了STM32单片机的基本原理后,加上良好的编程基础和学习方法,可以进一步学习这些内容。本书提供了基于V1.0版和V2.0版STM32固件库(FWLib)的参考例程,书中各章例程基于V1.0版固件库,但由于STM32固件库的优秀架构,使得用户应用程序的代码无须修改或少量修改,就可以在这两个版本固件库下运行。目前(2016年9月)STM32单片机最新版本的固件库为V4.0版,相比V1.0版和V2.0版,从V3.0版开始,固件库改动较大。若要升级到目前常用的V3.5版或V4.0版固件库,可参考ST公司的在线资料(www.stmcu.com.cn和www.st.com),以及关注微信号:STM32单片机。
同时,本书大量参考和引用了ARM公司(www.arm.com)的技术参考手册和ST公司的芯片数据手册,这些已经得到了ARM公司和ST公司的授权。所附配套资源包含开发工具、教学开发板硬件资料、基于V1.0版和V2.0版FWLib的各章例程源码、原版中英文数据手册、本书涉及的部分STM32微控制器寄存器说明,以及第三方软件和工具等,读者可以从华信教育资源网(http://www.hxedu.com.cn)或www.szopen.cn或www.embedhr.org网站免费下载。
本书由彭刚、秦志强和姚昱编著,华中科技大学自动化学院的研究生王中南、程小科、杜兵,武汉原创嵌入式工作室(www.embedhr.org)及深圳市中科鸥鹏智能科技有限公司(www.szopen.cn)的多位工程师参加了本书所用STM32单片机教学开发板的代码验证、电路绘制与测试等工作。还要特别感谢ST意法半导体公司的梁平经理、ARM公司的赵慧波经理和电子工业出版社的编辑们,给予本书的支持。
感谢华中科技大学的黄心汉教授,也是我读博士时的导师,是他引导我进入机器人这门学科。机器人是一个很好的教学与科研平台,非常适合以它为工程对象,来学习和掌握软件编程、嵌入式技术、控制技术、传感器技术、无线数据通信、机电一体化、图像处理与模式识别及人工智能等专业知识。机器人已广泛地应用于工业、医学、农业、建筑业及军事等领域,本书采用机器人作为项目实践内容,寓教于乐,兴趣为先,非常容易引起学生的兴趣和学习热情,也希望读者能对机器人技术产生浓厚的兴趣,正如电影《I, Robot》中的那样,让机器人成为人类的伙伴,实现人和机器人和谐相处的社会。
限于写作时间和作者水平,以及ST技术文档本身也在不断修订,书中难免有错误和不妥之处,敬请批评指正。作者联系邮箱:eepenggang@hotmail.com。
登楼高望,滚滚长江,时间如水,奔流不息。白驹过隙,岁月无痕,逝者如斯,不舍昼夜。伴随着微控制器技术的快速发展,生活在这个技术发展迅速的世界,科学、正确、高效、主动地学习才是积累知识和财富的法宝。
谨以此书献给我的家人!
编 者
2016年9月19日
展开