描述
开 本: 32开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302473329丛书名: 清华开发者书库
本书系统论述了嵌入式微处理器ARM Cortex-M3(STM32)的原理、架构、编程与项目开发。全书从*基本的I/O端口配置讲起,依次介绍了中断、串口通信、A/D转换、定时器、CAN总线等基本功能,然后详尽介绍了几类典型的实际嵌入式系统项目的开发。全书给出了作者近年设计的5个实际项目:? 倒立摆设计;? 能车设计;? 平衡车设计;? 电子秤设计;? 井下通信分站设计。这些项目都提供了全部源代码,可直接拿来二次开发,用于课程设计或科研项目。本书配套提供了全部设计源代码、设计图纸及演示视频,方便读者学习使用。本书配有基础的项目开发板;并提供学习交流QQ群,欢迎读者参与进来,和广大的STM32爱好者共同学习,及时解决设计中遇到的问题。
本书从CortexM3处理器入手,详细阐述了STM32微控制器的用法。本书从编程软件的使用、STM32的IO口配置讲起,深入浅出地介绍了该处理器的重要内容,主要包括基本IO接口、中断、ADC、定时器等。*后几章给出了多个案例,有的来源于学生的电子设计大赛作品,有的来源于科研课题,如平衡车设计、井下通信分站设计、四旋翼飞行器设计等,都较好地诠释了STM32的典型应用,可以帮助读者快速地入门并且上手操作。*后一章给出几个设计案例思路,读者在综合前面的学习后,可以自行设计作品,达到活学活用的目的。 本书配套全部设计电路图、源代码和PPT素材以及在线答疑等,方便读者学习。本书可作为电子、通信及控制等相关专业的参考书,也可以作为相关技术人员的技术参考书。
目录
第2版前言Ⅰ
第1版前言Ⅲ
学习说明Ⅴ
第1章ARM CortexM3核介绍
1.1CortexM3主要特性
1.2典型M3核处理器特性
1.2.1命名规则
1.2.2产品功能和外设配置
习题
第2章开发环境搭建
2.1MDK安装
2.2新建工程
2.3采用STLink调试仿真代码
习题
第3章基本I/O端口控制
3.1MDK新建工程
3.2MDK工程配置
3.3寄存器法操作代码分析
3.4时钟配置
3.4.1时钟树
3.4.2时钟源
3.4.3APB2外设时钟使能寄存器(RCC_APB2ENR)
3.5I/O端口配置
3.5.1I/O基本情况
3.5.2GPIO配置寄存器描述
3.5.3端口输出数据寄存器
3.6用库函数操作流水灯
3.6.1GPIO_Init函数
3.6.2RCC_APB2PeriphClockCmd
3.6.3控制I/O输出电平
3.6.4LED.h文件
3.6.5软件调试易现问题
3.7使用库函数法控制数码管
3.7.1数码管基础知识
3.7.2硬件电路设计
3.7.3软件说明
3.8简单按键输入
习题
第4章中断
4.1STM32中断和异常
4.2STM32中断相关的基本概念
4.2.1优先级
4.2.2中断控制器NVIC
4.2.3NVIC的优先级组
4.3外部中断
4.3.1外部中断基本情况
4.3.2使用外部中断的基本步骤
习题
第5章串口通信
5.1串口通信基础
5.1.1基本概念
5.1.2常用的串行通信接口
5.1.3应用串行通信的数据采集结构
5.2STM32串口操作
5.2.1寄存器方式操作串口
5.2.2库函数方式操作串口
习题
第6章直接寄存器访问
6.1DMA基础知识
6.2STM32的DMA操作
6.2.1寄存器方式操作DMA
6.2.2库函数方式操作DMA
6.2.3DMA操作实例
习题
第7章模拟/数字转换器
7.1ADC基础知识
7.1.1ADC主要特性
7.1.2ADC框图及引脚分布
7.1.3通道选择
7.1.4ADC的转换模式
7.1.5ADC寄存器和固件库函数列表
7.2STM32ADC操作
7.2.1寄存器方式操作ADC
7.2.2库函数方式操作ADC
7.2.3ADC操作实例
习题
第8章定时器
8.1定时器基础知识
8.1.1高级定时器
8.1.2基本定时器
8.1.3通用定时器
8.2STM32定时器操作
8.2.1寄存器方式操作定时器
8.2.2库函数方式操作定时器
8.2.3定时器操作实例
习题
第9章CAN总线设计
9.1CAN总线基本工作原理
9.2CAN协议的特点
9.3CAN协议通信过程
9.4CAN的报文格式
9.4.1数据帧
9.4.2遥控帧
9.4.3错误帧
9.4.4过载帧
9.4.5帧间隔
9.4.6优先级的决定
9.5CAN总线错误处理机制
9.5.1错误状态
9.5.2错误检测
9.6同步
9.6.1同步类型
9.6.2同步原则
9.7CAN总线拓扑结构
9.7.1STM32的CAN通信模块
9.7.2CAN控制器MCP2515介绍
9.8CAN通信的软件设计
9.8.1系统程序流程
9.8.2系统接收发送中断处理
9.8.3CAN总线初始化配置
9.8.4报文的发送
9.8.5报文的接收
9.9CAN通信示例
习题
第10章倒立摆设计
10.1设计内容与实现指标
10.1.1倒立摆的选择
10.1.2系统设计指标
10.2系统方案确定
10.2.1系统结构组成
10.2.2系统模型分析
10.2.3系统控制方案确定
10.3系统硬件设计
10.4电机的选择及驱动电路的设计
10.4.1电机的选择
10.4.2电机驱动电路的设计
10.5测量电路设计
10.5.1摆杆角度测量电路的设计
10.5.2旋臂位置测量电路的设计
10.6通信电路的设计
10.6.1上位机通信电路的设计
10.6.2无线传输电路的设计
10.7辅助电路设计
10.7.1语音提示电路的设计
10.7.2电源电路的设计
10.8系统软件设计
10.8.1系统控制程序设计
10.8.2起摆程序设计
10.8.3PID控制程序设计
10.8.4电机驱动程序设计
10.8.5上位机通信程序设计
10.8.6无线通信程序设计
10.9作品的制作与调试
10.9.1倒立摆机械结构的制作问题
10.9.2PCB设计应注意的问题
10.9.3电路板的制作问题
10.10PID参数的整定
10.10.1比例参数整定
10.10.2积分参数整定
10.10.3微分参数整定
习题
第11章智能小车设计
11.1硬件电路设计
11.1.1硬件系统方案设计
11.1.2小系统电路设计
11.1.3电源电路设计
11.1.4电机驱动电路设计
11.1.5环境检测传感器电路设计
11.2人机交互电路设计
11.2.1OLED显示电路设计
11.2.2红外遥控电路设计
11.2.3蜂鸣器提示电路设计
11.3总体软件设计
11.3.1道路基准采集模式软件
11.3.2PID寻迹模式软件
11.3.3迷宫模式软件
11.3.4OLED显示软件设计
11.4PID控制软件设计
11.4.1PID介绍
11.4.2比例(P)控制器
11.4.3比例积分(PI)控制器
11.4.4比例微分(PD)控制器
11.4.5比例积分微分(PID)控制器
11.4.6PID寻迹
11.5迷宫算法设计
11.5.1左手法
11.5.2迷宫搜索
11.5.3迷宫短路径算法
11.6设计测量方法与数据处理
11.6.1传感器分布
11.6.2五路模拟传感器数据测量
11.7传感器软件滤波
11.7.1软件滤波处理介绍
11.7.2软件滤波的方法
11.8调试方法
11.8.1PID参数调试
11.8.2迷宫模式调试
习题
第12章平衡车设计
12.1硬件电路设计
12.1.1硬件系统方案设计
12.1.2环境检测传感器电路设计
12.2人机交互电路设计
12.3MPU6050使用方法
12.3.1引脚说明
12.3.2SMPRT_DIV寄存器
12.3.3CONFIG寄存器
12.3.4GYRO_CONFIG寄存器
12.3.5ACCEL_CONFIG寄存器
12.3.6加速度计测量寄存器
12.3.7TEMP_OUT_H和TEMP_OUT_L寄存器
12.3.8陀螺仪测量寄存器
12.3.9PWR_MGMT_1寄存器
12.3.10WHO_AM_I寄存器
12.4总体软件设计
12.4.1车身状态采集模式软件
12.4.2PID车身保持模式软件
12.4.3人机交互模式软件设计
12.4.4卡尔曼滤波算法
习题
第13章电子秤设计
13.1设计指标
13.2设计方案
13.3硬件电路设计说明
13.3.1主控制器相关电路
13.3.2TFT液晶屏相关电路设计
13.3.3AD芯片HX711相关电路设计
13.3.4WT588D语音模块相关电路设计
13.3.5称重传感器相关电路设计
13.4软件设计思路及代码分析
13.4.1TFT触控液晶模块部分
13.4.2WT588D语音模块部分
13.4.3HX711芯片部分
13.4.4DS18B20芯片部分
13.4.5数据计算部分
习题
第14章井下通信分站设计
14.1硬件电路设计
14.1.1监控分站主要设计目标及参数
14.1.2硬件电路设计方案
14.2软件方案设计
14.2.1软件总体程序的思路
14.2.2RS485接口的使用及程序流程
14.2.3CAN数据传输
14.2.4OLED显示
14.2.5键盘输入
习题
第15章无线电能功率传输系统的设计
15.1设计内容与实现指标
15.1.1设计内容
15.1.2系统设计指标
15.2无线电能传输的基本原理分析
15.2.1无线电能传输的耦合方式
15.2.2磁谐振耦合式无线电能传输的基本原理
15.2.3磁场谐振式无线电能传输系统的组成
15.2.4实现传输的关键装置
15.3无线电能传输的特性
15.3.1频率特性对无线电能传输系统的影响
15.3.2能量发射线圈设计对无线电能传输系统的影响
15.3.3电容补偿对无线能量传输系统性能的影响
15.4系统方案确定及电路设计
15.4.1系统结构组成
15.4.2主要拓扑电路的选择与设计
15.4.3MOS管驱动设计
15.4.4线圈和电容的设计
15.4.5接收端高频整流的设计
15.4.6控制电路的设计
15.4.7程序的设计
15.5调试与验证
15.5.1系统的调试
15.5.2测量结果与结论分析
习题
第16章四旋翼飞行器设计
16.1四旋翼飞行器的结构
16.2四旋翼飞行器的运动控制方法
16.3四旋翼飞行器各部分的工作原理
16.3.1飞行姿态与升力关系
16.3.2飞行姿态的测量
16.3.3加速度传感器工作原理及角度测量
16.3.4陀螺仪传感器工作原理及角度测量
16.3.5磁力计传感器工作原理及测量方法
16.4硬件设计
16.4.1总体设计
16.4.2飞行器主控电路小系统设计
16.4.3姿态传感器模块
16.4.4无线通信模块
16.4.5定高模块
16.4.6电机及驱动模块
16.4.7遥控器模块
16.4.8电源模块选择
16.4.9四轴飞行器的组装
16.5软件设计
16.5.1软件预备知识
16.5.2主控程序初始化设置及说明
16.5.3姿态传感器软件设计
16.5.4气压计软件设计
16.5.5遥控器软件设计
16.6调试、问题解析及改进方向随想
习题
第17章案例设计
17.1STM32的无线传输系统
17.1.1设计任务
17.1.2系统结构组成
17.1.3主要设计思路
17.2风力摆控制系统设计
17.2.1设计任务
17.2.2系统结构组成
17.2.3主要设计思路
习题
参考文献
第2版前言
《ARM CortexM3体系结构与编程》一书在2016年出版以来,收到很多高校授课教师和广大读者的意见反馈,在此首先感谢这些读者给本书提出的宝贵意见,针对书中出现的问题和不足,在第2版中进行了修订和完善。主要修订内容如下:第1版书稿中有多处文字错误,有些原理表述不清,对此进行了修订; 完善每章课后习题内容,使之更适合教学和强化训练。第2版增加了3章内容,涉及两个综合案例(第15章和第16章)和一章设计内容(第17章)。两个综合案例为无线电能功率传输系统的设计和四旋翼飞行器设计,论述较为详细,是两个完整的设计案例。为了保证设计的完整性,部分设计内容和第10章以及第14章有少量重复,读者在进行案例内容学习时,可以根据自身需要,不按章节顺序学习。第17章给出了几个设计思路,读者可以根据设计要求自行设计,所有设计经过实际验证,软件代码会通过网络发布。本书涉及的小系统、显示电路、键盘模块、巡线模块、各种驱动电源模块,都已经做成了标准的PCB。所有工程案例的源代码、书稿PPT等内容读者均可获取,这些案例在实际教学中都得到了验证,方便读者修改制作。第1版的QQ群号继续使用,方便读者交流学习: 185156135。本书第2版得到了教育部高等教育司2016年第二批产学合作协同育人项目ARM公司的支持,感谢陈炜先生!感谢我的同事范红刚老师,我们一起合作多年,感谢他的无私帮助!我的学生张凯、李民杰、张成照、梁亮、宋熠林、张学飞、秦云辉等完成了所有代码的编写验证工作,感谢他们的辛苦工作。
作者2017年5月
前言本书的名称为《ARM CortexM3体系结构与编程》,更多讲解的是编程及应用开发,结构方面涉及较少。作为CortexM3重要的一员,STM32是现在应用较多的一款芯片,从应用的角度出发,这本书实际是在讲STM32的应用,这个先和读者交代一下。 从51单片机的简单应用,演变到嵌入式、物联网、元计算、框计算等,越来越多的“概念”呈现在我们眼前,电子技术的日新月异,推动着相关行业的发展,改变着我们的生活。现在已经习惯把单片机相关的开发,统称为嵌入式开发。高校的授课主要以51单片机为主,有个别专业开始开设M3的选修课,STM32作为其重要家族成员,正慢慢地被越来越多的学生学习。2012年,开始研发井下小型的通信基站,想选一款合适的芯片,后来选中了一款基于STM32的工业核心开发板作为主控制器,该项目已经实际运行使用,读者可以作为蓝本,在此基础上进一步开发、学习。该项目作为一个案例,出现在本书的后一章。当真正开始着手写本书时,发现无从下手,一拖再拖,因为STM32的内容真的很多,资料短时间内整理起来又很困难,从一本书的角度很难说得透彻、清晰,所以有些概念的理解还是希望读者有一点51单片机和C语言的基础。本书所列出的章节都是学生日常参加电子设计大赛、毕业设计用的一些内容,STM32本身很多重要的应用并未列入其中。同时,互联网上有很多优秀的电子资源,比较适合作为初学者学习的素材,例如“野火”“战舰”“原子”等,本书很多想法和内容也来自它们。很多学生大二开始学习STM32,从流水灯开始,做普通的巡线小车、小平衡车到后做出能载100多公斤并自由行进的大平衡车,整个学习过程不到一年,但他们收获了很多知识。STM32入门相对51单片机复杂一些,但是STM32的使用要比51单片机更容易和便捷,书中的很多例子来源于笔者指导的毕业设计和电子设计大赛,后面章节特别涉及小系统设计、电源设计、电机驱动设计,从全书看是有一些重复的,但是作为独立的设计,这种重复还是必要的,希望读者理解。书中涉及小系统、数码管显示电路、键盘模块、巡线模块、各种驱动电源模块,都已经做成了标准的PCB,在实际教学实验中使用,读者可以方便修改制作。这本书完成匆忙,很多东西加工得不是很细致,留个QQ群号185156135,方便读者交流学习。
本书的很多素材资料来源于其他老师和学生,在此一并感谢!参与本书编写的还有范红刚老师、宋一兵、管殿柱、王献红、李文秋、赵景波、张忠林、曹立文、张凯、李民杰、张成照、梁亮、宋熠林和张学飞等。感谢我的家人,假期陪我一起工作!
冯新宇2016年1月
评论
第3章
基本I/O端口控制
学习STM32之前,建议有8位单片机的学习基础,例如51单片机、AMEG8等,这对于学习新的CortexM3处理器有很大帮助。在第2章已经安装好了MDK软件,版本为V4.72,STM32设计操作包括直接寄存器操作和库函数操作,直接寄存器操作与51单片机控制很接近,库函数操作与学过8位控制器的读者来说有很大的不同,开始阅读本章的读者可能会比较困惑,不要着急,稍后会详细介绍库的含义和使用方法。接下来通过一个简单的寄存器操作对STM32有个初步地介绍,就从流水灯开始STM32的学习之旅吧。3.1MDK新建工程(1) 单击桌面UVision4图标,启动软件。如果是次使用会打开一个自带的工程文件,可以通过工具栏Project→Close Project选项关掉。 (2) 新建的工程文件保存在一个文件夹里面。首先创建一个名为“流水灯”的文件夹,在“流水灯”文件夹里建几个文件夹: Doc、Libraries、 Listing、 Output 、Project、 User(为了使读者先有个感性认识,可以参考书中附带的例子,从例子中添加这些代码,后续会陆续解释其含义),工程“流水灯”文件夹的子文件夹如图31所示。
图31流水灯工程的子文件夹
① Doc用来存放一些说明文档,一般文件格式为XXX.TXT。② Libraries用来存放ST库核心的文件,包含FWlib和CMSIS两个文件夹。FWlib用来存放STM32库里的inc和src两个文件,这两个文件包含了芯片上的所有驱动。inc和src两个文件夹也是直接从ST的库里复制过来的。 inc里是ST片上资源的驱动头文件,如果用到某个资源,则必须把相应的头文件包含进来。 src里是ST片上资源的驱动文件,这些驱动涉及了大量的C语言知识,是学习库的重点。CMSIS用来存放库自带的启动文件和一些M3系列通用的文件。CMSIS存放的文件适合任何M3内核的单片机。CMSIS为Cortex Microcontroller Software Interface Standard的缩写,是ARM Cortex微控制器软件接口标准,是ARM公司为芯片厂商提供的一套通用且独立于芯片厂商的处理器软件接口。③ Listing用来保存编译后生成的链接文件。④ Output用来保存软件编译后输出的文件。⑤ Project建立工程文件的路径。⑥ User用来存放用户编写的驱动文件。 (3) 在工具栏Project→New μVision Project,新建工程文件,如图32所示。
图32Project新建工程
(4) 在Project文件夹里创建一个工程,名字为liushuideng,如图33所示。
图33Project中新建liushuideng
(5) 选择芯片的型号,本书使用的芯片是ST公司的STM32F103RC。选择窗口如图34所示。
图34器件选择窗口
(6) 接下来询问是否需要复制STM32的启动代码到工程文件中,这个启动代码在M3系列中都是适用的,一般情况下单击“是”按钮,这里用的是ST库,库文件也自带了一份启动代码,为了保持库的完整性,就不需要开发环境自带的启动代码了,稍后手动添加启动代码,这里单击“否”按钮,如图35所示。
图35STM32启动代码是否复制到工程文件中的询问对话框
(7) 此时工程新建成功,打开如图36所示的界面。工程中还没有任何文件,接下来在工程中添加所需文件。
图36新建工程成功后的界面
(8) 把Target1的名称改为“流水灯”,其实不改也可以,改了只是为了见名知义,如图37所示线条圈出部分。
图37Target1改为“流水灯”
(9) 往工程里面添加5个组文件夹,并命名为STARTUP、CMSIS、FWLIB、USER、DOC。选择Add Group,如图38、图39所示。
评论
还没有评论。