开发者书库:ARMCortex-M3体系结构与编程pdf下载pdf下载

开发者书库:ARMCortex-M3体系结构与编程百度网盘pdf下载

作者:
简介:本篇主要提供开发者书库:ARMCortex-M3体系结构与编程pdf下载
出版社:清华大学出版社
出版时间:2017-08
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

本书系统论述了嵌入式微处理器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M3核介绍
1.1CortexM3主要特性
1.2典型M3核处理器特性
1.2.1命名规则
1.2.2产品功能和外设配置
习题
第2章开发环境搭建
2.1MDK安装
2.2新建工程
2.3采用STLink调试仿真代码
习题
第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M3处理器有很大帮助。在第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文件中配置的文件才会被编译。
④ 在CMSIS里添加以下文件。注意,这些组里添加的都是汇编文件和C文件,头文件是不需要添加。
⑤ 在DOC文件夹添加readme.txt文档对程序重要信息进行说明,如果使用的I/O端口,配置后的工程如图311所示。
图311配置后的工程
至此,“流水灯”工程已经基本建好,但是还有一些工作需要完成。下面来配置MDK的选项。
3.2MDK工程配置
(1) 单击工具栏中的魔术棒按钮,弹出配置菜单,可以看到配置菜单关于Device、Target、Output、Listing、User、C/C++、Asm、Linker、Debug和Utilities选项的设置。
(2) Device在新建工程时已经选定了器件,单击Target选项卡,勾选微库,这样是为了后面的串口例程可以使用printf函数,如图312所示。
图312Target选项卡
(3) 单击Output选项卡,再单击Select Folder for Objects…按钮,设置编译后输出文件保存的位置。同时把Debug Information、Create HEX File和Browse information复选框都勾选上,如图313所示。
图313Output选项卡
(4) 在Listing选项卡中,单击Select Folder Listings…按钮,定位到模板中的Listing文件夹,如图314所示。
图314Listing选项卡
(5) 在C/C++选项卡上需要设置的比较多。
① 在Define里输入添加STM32F10X_HD,USE_STDPERIPH_DRIVER两个宏。添加USE_STDPERIPH_DRIVER是为了屏蔽编译器的默认搜索路径,转而使用添加到工程中的ST的库,添加STM32F10X_HD是因为用的芯片是大容量的,添加了STM32F10X_HD宏之后,库文件为大容量定义的寄存器就可以用了。芯片是小或中容量时,宏要换成STM32F10X_LD或者STM32F10X_MD。
② 在Include Paths栏添加库文件的搜索路径,就可以屏蔽掉默认的搜索路径。
③ 当编译器在指定的路径下搜索不到,还是会回到标准目录去搜索,就像有些ANSIC C的库文件,例如stdin.h、stdio.h。
库文件路径修改成功之后,如图315所示。
图315C/C++选项卡
(6) 单击Debug选项卡,选择Use Simulator,软件仿真设置完成,如图316所示。
图316Debug选项卡
(7) 单击菜单栏中的编译按钮,对该工程进行编译,弹出编译信息,编译成功。
linking...
Program Size: Code=1000 RO-data=252 RW-data=0 ZI-data=1024
FromELF: creating hex file...
"..\Output\liushuideng.axf" - 0 Errors, 0 Warning(s).
3.3寄存器法操作代码分析
在main.c文件里输入以下代码,实现流水灯的闪烁,其中led接到STM32的GPIOB口的8~15号引脚,如图317所示。
有过单片机编程经历的人很容易看懂这段代码,主要涉及几个寄存器,RCC→APB2ENR,GPIOB→CRH和GPIOB→ODR。STM32普通I/O端口的使用过程大致步骤如下:
① 先开启对应I/O端口时钟(RCC→APB2ENR);
② 配置I/O端口(GPIOB→CRH);
③ 给I/O端口赋值(GPIOB→ODR)。
这3步完成一个I/O端口的最基本操作,代码如图318所示。
……

前言/序言

本书的名称为《ARM Cortex-M3体系结构与编程》,更多讲解的是编程及应用开发,结构方面涉及较少。作为CortexM3重要的一员,STM32是现在应用较多的一款芯片,从应用的角度出发,这本书实际是在讲STM32的应用,这个先和读者交代一下。
从51单片机的简单应用,演变到嵌入式、物联网、元计算、框计算等,越来越多的“概念”呈现在我们眼前,电子技术的日新月异,推动着相关行业的发展,改变着我们的生活。现在已经习惯把单片机相关的开发,统称为嵌入式开发。高校的授课主要以51单片机为主,有个别专业开始开设M3的选修课,STM32作为其重要家族成员,正慢慢地被越来越多的学生学习。
2012年,开始研发井下小型的通信基站,想选一款合适的芯片,后来选中了一款基于STM32的工业核心开发板作为主控制器,该项目已经实际运行使用,读者可以作为蓝本,在此基础上进一步开发、学习。该项目作为一个案例,出现在本书的最后一章。当真正开始着手写本书时,发现无从下手,一拖再拖,因为STM32的内容真的很多,资料短时间内整理起来又很困难,从一本书的角度很难说得透彻、清晰,所以有些概念的理解还是希望读者有一点51单片机和C语言的基础。本书所列出的章节都是学生日常参加电子设计大赛、毕业设计用的一些内容,STM32本身很多重要的应用并未列入其中。同时,互联网上有很多优秀的电子资源,比较适合作为初学者学习的素材,例如“野火”“战舰”“原子”等,本书很多想法和内容也来自它们。很多学生大二开始学习STM32,从流水灯开始,做普通的巡线小车、小平衡车到最后做出能载100多公斤并自由行进的大平衡车,整个学习过程不到一年,但他们收获了很多知识。STM32入门相对51单片机复杂一些,但是STM32的使用要比51单片机更容易和便捷,书中的很多例子来源于笔者指导的毕业设计和电子设计大赛,后面章节特别涉及最小系统设计、电源设计、电机驱动设计,从全书看是有一些重复的,但是作为独立的设计,这种重复还是必要的,希望读者理解。书中涉及最小系统、数码管显示电路、键盘模块、巡线模块、各种驱动电源模块,都已经做成了标准的PCB,在实际教学实验中使用,读者可以方便修改制作。这本书完成匆忙,很多东西加工得不是很细致,留个QQ群号185156135,方便读者交流学习。
本书的很多素材资料来源于其他老师和学生,在此一并感谢!参与本书编写的还有范红刚老师、宋一兵、管殿柱、王献红、李文秋、赵景波、张忠林、曹立文、张凯、李民杰、张成照、梁亮、宋熠林和张学飞等。
感谢我的家人,假期陪我一起工作!
冯新宇2016年1月