编辑推荐
本书系统论述了嵌入式微处理器ARM Cortex-M3(STM32)的原理、架构、编程与项目开发。全书从最基本的I/O端口配置讲起,依次介绍了中断、串口通信、A/D转换、定时器、CAN总线等基本功能,然后详尽介绍了几类典型的实际嵌入式系统项目的开发。全书给出了作者近年设计的5个实际项目:
? 倒立摆设计;
? 能车设计;
? 平衡车设计;
? 电子秤设计;
? 井下通信分站设计。
这些项目都提供了全部源代码,可直接拿来二次开发,用于课程设计或科研项目。本书配套提供了全部设计源代码、设计图纸及演示视频,方便读者学习使用。本书配有基础的项目开发板;并提供学习交流QQ群,欢迎读者参与进来,和广大的STM32爱好者共同学习,及时解决设计中遇到的问题。
内容简介
《清华开发者书库:ARM Cortex-M3体系结构与编程(第2版)》从Cortex-M3处理器入手,详细阐述了STM32微控制器的用法。
《清华开发者书库:ARM Cortex-M3体系结构与编程(第2版)》从编程软件的使用、STM32的IO口配置讲起,深入浅出地介绍了该处理器的重要内容,主要包括基本IO接口、中断、ADC、定时器等。最后几章给出了多个案例,有的来源于学生的电子设计大赛作品,有的来源于科研课题,如平衡车设计、井下通信分站设计、四旋翼飞行器设计等,都较好地诠释了STM32的典型应用,可以帮助读者快速地入门并且上手操作。最后一章给出几个设计案例思路,读者在综合前面的学习后,可以自行设计作品,达到活学活用的目的。
《清华开发者书库:ARM Cortex-M3体系结构与编程(第2版)》配套全部设计电路图、源代码和PPT素材以及在线答疑等,方便读者学习。
《清华开发者书库:ARM Cortex-M3体系结构与编程(第2版)》可作为电子、通信及控制等相关专业的参考书,也可以作为相关技术人员的技术参考书。
作者简介
冯新宇, 1978—,黑龙江科技大学副教授,长期从事嵌入式系统项目开发和相关教学工作。曾主持或参与嵌入式相关课题与项目开发20余项;近10年来一直作为指导教师参与全国电子设计大赛、飞思卡尔电子设计大赛、黑龙江省电子设计大赛等工作,所指导的学生多次获得各种赛事重大奖励。个人代表性著作有《ADS2009射频电路设计与仿真》《ARM 9嵌入式开发基础与实例进阶》与《四旋翼无人飞行器设计》)。
内页插图
目录
第2版前言Ⅰ
第1版前言Ⅲ
学习说明Ⅴ
第1章ARM Cortex�睲3核介绍
1.1Cortex�睲3主要特性
1.2典型M3核处理器特性
1.2.1命名规则
1.2.2产品功能和外设配置
习题
第2章开发环境搭建
2.1MDK安装
2.2新建工程
2.3采用ST�睱ink调试仿真代码
习题
第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.3MPU��6050使用方法
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主要设计思路
习题
参考文献
精彩书摘
第3章
基本I/O端口控制
学习STM32之前,建议有8位单片机的学习基础,例如51单片机、AMEG8等,这对于学习新的Cortex�睲3处理器有很大帮助。在第2章已经安装好了MDK软件,版本为V4.72,STM32设计操作包括直接寄存器操作和库函数操作,直接寄存器操作与51单片机控制很接近,库函数操作与学过8位控制器的读者来说有很大的不同,开始阅读本章的读者可能会比较困惑,不要着急,稍后会详细介绍库的含义和使用方法。接下来通过一个简单的寄存器操作对STM32有个初步地介绍,就从流水灯开始STM32的学习之旅吧。
3.1MDK新建工程
(1) 单击桌面UVision4图标,启动软件。如果是第一次使用会打开一个自带的工程文件,可以通过工具栏Project→Close Project选项关掉。
(2) 新建的工程文件保存在一个文件夹里面。首先创建一个名为“流水灯”的文件夹,在“流水灯”文件夹里建几个文件夹: Doc、Libraries、 Listing、 Output 、Project、 User(为了使读者先有个感性认识,可以参考书中附带的例子,从例子中添加这些代码,后续会陆续解释其含义),工程“流水灯”文件夹的子文件夹如图3��1所示。
图3��1流水灯工程的子文件夹
① 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,新建工程文件,如图3��2所示。
图3��2Project新建工程
(4) 在Project文件夹里创建一个工程,名字为liushuideng,如图3��3所示。
图3��3Project中新建liushuideng
(5) 选择芯片的型号,本书使用的芯片是ST公司的STM32F103RC。选择窗口如图3��4所示。
图3��4器件选择窗口
(6) 接下来询问是否需要复制STM32的启动代码到工程文件中,这个启动代码在M3系列中都是适用的,一般情况下单击“是”按钮,这里用的是ST库,库文件也自带了一份启动代码,为了保持库的完整性,就不需要开发环境自带的启动代码了,稍后手动添加启动代码,这里单击“否”按钮,如图3��5所示。
图3��5STM32启动代码是否复制到工程文件中的询问对话框
(7) 此时工程新建成功,打开如图3��6所示的界面。工程中还没有任何文件,接下来在工程中添加所需文件。
图3��6新建工程成功后的界面
(8) 把Target1的名称改为“流水灯”,其实不改也可以,改了只是为了见名知义,如图3��7所示线条圈出部分。
图3��7Target1改为“流水灯”
(9) 往工程里面添加5个组文件夹,并命名为STARTUP、CMSIS、FWLIB、USER、DOC。选择Add Group,如图3��8、图3��9所示。
图3��8Add Group界面
图3��9添加文件夹界面
从名字就可以看得出是用它来存放启动代码,USER用来存放用户自定义的应用程序,FWLIB用来存放库文件,CMSIS用来存放M3系列单片机通用的文件。
(10) 接下来往这些新建的组中添加文件,双击哪个组就可以往哪个组里添加文件,如果该组已经有文件,双击则把组里的文件都显示出来,然后再双击该组,可以继续添加文件。
在对话框的文件类型里选择ALL files(*.*),否则有些文件会显示不出来,如图3��10所示。
图3��10新建组中添加文件
① 在STARTCOKE里添加startup_stm32f10x_hd.s。
② 在USER组里添加main.c、stm32f10x_it.c两个文件。
其中,stm32f10x_conf.h、stm32f10x_it.h两个头文件不需要添加,即使添加也添加不进来,因为.h文件不是通过这种方式进入到工程里面的。头文件都包含在.c文件中,当编译工程时,.h文件就自然包含进来了。
③ 在FWLIB组里添加src里的全部驱动文件,当然,src的驱动文件也可以需要哪个就添加哪个。这里将它们全部添加进去是为了后续开发
方便,况且可以通过配置stm32f10x_conf.h头文件来选择性添加,只有在stm32f10x_conf.h文件中配置的文件才会被编译。
清华开发者书库:ARM Cortex-M3体系结构与编程(第2版) 电子书 下载 mobi epub pdf txt