一、嵌入式系统概述:
1.1 嵌入式系统的定义和特点:
1.1.1 嵌入式系统的定义
在实际生活中,凡是与产品结合在一起的具有嵌入式特点的控制系统几乎都可以叫做嵌入式系统
-
从广义的角度:嵌入式系统是一切非PC和大型机的计算机系统
-
从应用的角度:嵌入式是控制、监视或辅助设备、机器和车间运行的装置
-
从系统的角度:嵌入式系统是设计完成复杂功能的硬件和和软件,并使其紧密耦合在一起的计算机系统,是更大系统的一个完整的子系统
-
从技术的角度:嵌入式系统是一个以应用为中心,以计算机技术为基础,并融合微电子技术、通信技术和自动控制技术,而且软硬件
可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗和应用环境有特殊要求的专用计算机系统。 这是目前国内普遍认同
的对 嵌入式系统的定义。
1.1.2 嵌入式系统和通用计算机比较
1.嵌入式系统和计算机系统的共同点:
嵌入式系统 和 通用计算机 都属于 计算机系统, 从系统组成上讲,它们都是由硬件和软件构成的。
2…嵌入式系统和计算机系统的不同点:
- 形态(通用计算机具有基本相同的外形而独立存在,而嵌入式系统通常隐藏在具体某个产品或设备中)
- 功能(通用计算机具有通用而复杂的功能,而嵌入式系统的功能由宿主对象决定,具有专用性)
- 功耗(通用计算机功耗一般为几十瓦,低功耗一直是嵌入式系统追求的目标)
- 资源(通用计算机具有大而全的资源,而嵌入式系统受限于嵌入的宿主对象)
- 价值(通用计算机价值体现在“计算”和“存储”上,而嵌入式系统往往嵌入在某个设备和产品中,其价值一般不取决于其内嵌的处理器的性能,而体现在它所嵌入和控制的设备)
1.1.3 嵌入式系统特点
嵌入式系统特点:
-
专用性
-
可裁剪型
-
可靠性
-
具有较长的生命周期
-
不易被垄断
1.2 嵌入式系统硬件
嵌入式系统的硬件是嵌入式系统运行的基础,提供嵌入式软件运行的物理平台和通信接口。
嵌入式系统 硬件:
嵌入式处理器、嵌入式存储器、嵌入式I/O接口、嵌入式I/O设备。
处理器为核心, 存储器作为程序和数据的存储介质,借助总线相互连接,通过I/O接口
和I/O设备与外部世界联系。
1.2.1 嵌入式处理器
-
嵌入式处理器的主要分类:
嵌入式处理器可以分为:
- 嵌入式微处理器(MPU)
- 嵌入式微控制器(单片机)(MCU)
- 嵌入式数字信 处理器(DSP)
- 嵌入式片上系统。(SoC)
**嵌入式微控制器又被称为单片机,**顾名思义,是将整个计算机集成在一块芯片上。嵌入式微控制器通常以某种处理器内核为核心(本书主
要讲述的是基于Cortex-M3内核的STM32F103微控制器),内部集成了ROM、RAM、数字I/O、定时器/计数器以及其他必要的功能外设
和接口。与嵌入式微处理器相比,嵌入式微控制器的资源更丰富,功能更强大,它最大的特点是单片化,它将CPU、存储器、外设和接口
集成在一块芯片上,从而使体积大大减小,功耗和成本显著下降,但同时可靠性得以提高。
1.2.2 嵌入式处理器的技术指标
- 字长
- 主频
- 运算速度
- 指令集
- 流水线
- 体系架构
- 寻址能力
- 功耗
- 工作温度
1.2.3 主流的嵌入式处理器
- ARM
- MIPS
- PowerPC
1.2.4 嵌入式存储器
嵌入式存储器作为嵌入式系统硬件的基本组成部分,用来存放运行在嵌入式系统上的程序和数据。
1.层次结构:
嵌入式存储器:
嵌入式存储器的层次结构,由内到外,可以分为片内存储器、片外存储器(系统中)
和外部存储器(系统外部)
2.主要类型:
易失性存储器 指的是当电源供应中断后,存储器所存储的数据便会消失的存储器。其主要
类型使随机存取存储器(RAM)。
非 易失性存储器 指的是即使电源供应中断,存储器所存储的数据也不会消失,重新供电
后,就能够读取内存数据的存储器。其主要是只读存储器(ROM)。
1.2.5 嵌入式IO设备
嵌入式I/O设备:
-
用于人机交互的设备:摇杆、触摸屏、发光二极管、按键等…
-
用于机机交互的设备:传感器、伺服执行机构。
1.2.6 嵌入式IO接口
嵌入式I/O接口:
由于嵌入式设备的多样性、复杂性和速度差异性,因此一般不能将嵌入式I/O设备与嵌入式处理器直接相连,需要借助嵌入式I/O接
口。 作为嵌入式处理器和嵌入式I/O设备的桥梁,嵌入式I/O接口连接和控制嵌入式I/O设备,负责完成嵌入式处理器和嵌入式I/O设备之间
的信 转换、数据传送和速度匹配。
-
.嵌入式I/O接口功能: 作为嵌入式处理器和嵌入式I/O设备的桥梁,嵌入式I/O接口连接和控制嵌入式I/O设备,负责完成嵌入式处理器
和嵌入式I/O设备之间的信 转换、数据传送和速度匹配。
-
.嵌入式I/O接口分类:
- 按数据传输方式划分:分为串行I/O接口和并行I/O接口
- 按数据传输速率划分:高速I/O接口和低速I/O接口
- 按是否需要物理连接 划分:有线I/O接口和无线I/O接口
3.嵌入式I/O接口组成:嵌入式I/O接口由 寄存器、I/O控制逻辑部件和外设接口逻辑3部分组成。 **寄存器是嵌入式I/O接口的核心 ** **根据存放信息的不同,分为数据寄存器、控制寄存器和状态寄存器。
**寄存器是嵌入式I/O接口的核心 **根据存放信息的不同,分为数据寄存器、控制寄存器和状态寄存器:
- 数据寄存器(用来存放需要传输的数据)
- 控制寄存器(存放嵌入式处理器 向 嵌入式I/O设备发送的控制命令)
- 状态寄存器(存储嵌入式I/O设备当前工作状态的信息)
1.2.7 嵌入式I/O端口及其编址方式
嵌入式I/O接口中,并非所有的寄存器都能被嵌入式处理器直接访问,能够 被嵌入式处理器直接访问的寄存器称为I/O端口,数据输入/输出寄存器、控制寄存器、状态寄存器都是I/O端口。
- 统一编址(在存储器空间中划出一部分空间留给I/O端口)
- 独立编址(指I/O端口地址空间与存储器地址空间完全不重叠,特点是不占用存储空间)
1.2.8 嵌入式I/O端口编程
嵌入式系统中,对嵌入式I/O设备的各种操作是通过使用C语言或者汇编语言对嵌入式 I/O 端口进行编程来实现的,其实质是读写嵌入式 I/O 接口中的寄存器
1.3 嵌入式系统的软件
嵌入式系统的软件:一般固化于嵌入式存储器中,是嵌入式系统的控制核心,控制着嵌入式系统的运行,实现嵌入式系统的功能,由此可见,嵌入式软件在很大程度上决定整个嵌入式系统的价值
从软件结构上划分,嵌入式软件分为 无操作系统 和 带操作系统 两种。
1.无操作系统的嵌入式软件仅仅由引导程序(一般由汇编语言编写)和应用程序(一般由C语言编写)两部分组成 具体实现上,无操作系统的嵌入式软件主要有两种方式:循环轮询系统 和 前后台系统。
2.带操作系统的嵌入式软件
体系结构:自下而上包括
- 设备驱动层(引导加载程序 设备驱动程序)
- 操作系统层(嵌入式操作系统内核 嵌入式 络协议 嵌入式文件系统 嵌入式图形用户接口)
- 应用软件层(主要由基于操作系统层的多个相对独立的任务组成)
1.4 嵌入式系统的分类
嵌入式系统的分类:
按硬件(嵌入式处理器)划分
根据嵌入式处理器的字长,可分为4、8、16、32位和64位嵌入式系统等。
按软件复杂度划分
无操作系统控制、小型操作系统控制、大型操作系统控制。
按实时性划分
非实时嵌入式系统、硬实时嵌入式系统、软实时嵌入式系统。
按使用对象划分
军用、工业用、民用。
/p>
二、嵌入式系统开发
2.1 嵌入式系统的开发环境、开发工具和调试方式
对于通用计算机应用系统开发而言,系统的开发机器既是系统的运行机器,系统的开发环境既是系统的运行环境。而对于嵌入式系统开发而言,系统的开发机器不是系统的运行机器,系统的开发环境不是系统的运行环境。这就需要专门的开发环境、开发工具和调试方法。
2.1.1 嵌入式系统的开发环境
与通用计算机不同,嵌入式系统的开发平台一般并不是最终的运行平台。构建嵌入式系统的开发环境是进行嵌入式系统开发的前提和基础。嵌入式系统的开发环境称为交叉开发环境,主要由宿主机、目标机以及它们之间的连接构成。
-
宿主机(用于嵌入式系统开发的计算机,是嵌入式开发工具的运行环境)
-
目标机(是所开发的嵌入式系统,是嵌入式软件的实际运行环境,以某种处理器内核为核心)
-
宿主机和目标机之间的连接:
**物理连接:**指宿主机与目标机上的一定物理端口通过物理线路连接在一起,它是逻辑连接的基础。物理连接方式主要有三种:
串口、以太 接口 、 JTAG(Joint Test Action Group)接口,其中,用得最多得是JTAG接口。(使硬件线路连接正确)
**逻辑连接:**指宿主机与目标机间按某种通信协议建立起来得通信连接,目前已逐步形成了一些通信协议的标准(正确配置宿主机
和目标机的物理端口的参数,并且与实际的物理连接一致)
2.1.2 嵌入式系统的开发工具
嵌入式系统开发采用交叉开发环境,需要专门的开发工具。嵌入式系统开发是基于软硬件的综合开发。不仅需要软件开发工具,也需要硬件开发工具。
1.嵌入式硬件开发工具:
嵌入式硬件开发工具用来设计和仿真嵌入式硬件。常用的嵌入式硬件开发工具主要有PCB(印刷电路板)设计软件 和PLD(可编程逻辑器件)开发软件等。
- PCB设计软件 :又称印刷电路板,用于固定电子元器件并为它们提供电气连接。
- PLD开发软件:又称可编程逻辑器件,它作为一种通用集成电路生产,但不同与通用集成电路,它的逻辑功能按照用户对器件编程来决定。
2.嵌入式软件开发工具:
嵌入式软件开发工具的构成
- 调试和下载工具(可执行的映像文件生成后,宿主机上的调试器和下载工具将该文件下载到目标机的 RAM 或 ROM 中运行,并在运行过程中使用各种调试方法对编写的源程序进行查错和排错)
常见的嵌入式软件集成开发工具
面向ARM内核的两款主流嵌入式软件集成开发工具 KEIL MDK 和 IAR EWARM。
KEIL MDK(用来开发基于 ARM 内核的嵌入式应用的集成开发工具,基于 Windows操作系统)(优秀的 ARM 集成开发工具)
2.1.3 嵌入式系统的调试方式
在嵌入式系统的调试中,调试器和被调试程序通常运行在不同的机器上,这种调试称为交叉调试。
特点:
- 调试器和被调试程序位于不同的机器
- 宿主机上的调试器通过某种通信方式与目标机上的内调试程序建立物理连接,如 串口、以太 接口、JTAG等
- 在目标机上一般有宿主机调试器的某种代理。
1.软件模拟器(运行在宿主机上的纯软件工具,通过模拟目标机的指令系统或目标机操作系统的系统调用来达到在宿主机上运行和调试嵌入式应用程序的目的)
2.ROM监控器(在ROM监控器方式下,嵌入式系统的调试环境由宿主机端的调试器、目标机端的监控器(ROM Monitor)以及两者间的连接构成)
3.ROM仿真器(可以认为是一种用于代替目标机上的ROM芯片的设备)
4.在线仿真器(是一种用于替代目标机上的CPU来模拟目标机上的CPU行为的设备)
5.片上调试(OCD)(价格低廉,不占用目标机的资源,调试环境与程序最终运行环境基本一致):
常用 OCD实现:
1.后台调式模式(BDM)
2.片上仿真器(OnCE)
3.联合测试工作组(JTAG)(主流的OCD方式):
是一种关于测试访问端口和边界扫描结构的国际标准,由JTAG提出。
JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试及对程序进行调试、下载。现在多数的高级器件都支持JTAG协议,JTAG 仿真器也称为JTAG适配器,是通过 ARM 芯片的 JTAG 边界扫描口进行调试的设备。
JTAG接口的引脚定义:
TCK:时钟信 线:同步JTAG接口逻辑操作的时钟输入(10-100MHZ)
TDI:数据输入信 线:数据在TCK上升沿被采样通过TDI输入JTAG接口
TDO:数据输出信 线:数据在TCK下降沿被采样通过TDO从JTAG接口输出
TMS:模式选择信 线:数据在TCK上升沿被采样设置测试访问端口 TAP 的工作状态
nTRST:低电平有效的复位信 线(可选),用来使TAP控制器复位(TMS也可以做到)
三、ARM Cortex-M3处理器
嵌入式处理器类似于人的“大脑中枢”,是嵌入式系统的控制核心,对整个嵌入式系统起着决定性的作用。
3.1 ARM Cortex-M3组成结构
ARM Cortex-M3 是一款采用 ARMv7 体系架构的 32 位 RISC 处理器,主要由Cortex-M3内核和调试系统两大部分组成。
Cortex-M3内核:
CM3Core(中央处理器核心):采用哈佛结构,拥有独立的指令总线和数据总线,在加载/存储数据的同时能够执行指令取指,效率显著提高。主要由 ALU (算数逻辑单元)、寄存器组、指令解码器、取指单元 等部分组成。
NVIC(嵌套向量中断控制器):内建在Cortex-M3 处理器的中断控制器
SYSTICK(系统定时器):是一个由Cortex-M3内核提供、内置于 NVIC 中的24位倒计时计数器,每隔一定时间间隔可以产生一个中断。
MPU(存储保护单元):一个选配的单元,它可以把存储器分成一些 Regions 并分别予以保护。
Bus Matrix(总线矩阵):是Cortex-M3 处理器内部总线系统的核心。它是一个32位的 AHB 总线互连 络。总线矩阵分别与下列外部总线相连:
- I-Code 总线:用于从代码存储区取指令和向量
- D-Code 总线:用于对代码存储区进行数据访问,例如,进行查表等操作
- 系统总线:用于访问内存和外设。
- 私有外设总线(PPB):用于访问私有外设,主要是访问调试组件。
调试系统:
- SW-DP/SWJ-DP(串行线调试端口/串行线JTAG调试端口)
- AHB-AP(AHB访问端口)
- ETM(嵌入式跟踪鸿单元)
- DWT(数据观察点及跟踪单元)
- ITM(仪器化跟踪单元)
- TPIU(跟踪端口接口单元)
- FPB(Flash重载及断点单元)
- ROM表。这些组件都用于调试,通常不会在应用程序中使用它们。
3.2 ARM Cortex-M3 总线接口
Cortex-M3总线接口类型:
-
I-Code总线(基于AHB-Lite总线协议的32位总线,主要用于在此地址空间内执行取指操作)
-
D-Code总线(基于AHB-Lite总线协议的32位总线,主要用于在此地址空间内执行数据访问操作)
-
系统总线(基于AHB-Lite总线协议的32位总线,主要用于访问片上SRAM、片上外设、片上RAM、片外扩展设备等)
-
外部私有外设总线(基于APB总线协议的32位总线,用于访问私有外设,主要是调试器件)
-
调试访问端口总线(基于“增强型APB规格”的32位总线,专用于挂接调试接口,例如SWJ-DP和SW-DP)
3.3 ARM Cortex-M3 编程模型
3.3.1 工作状态
Cortex-M3 处理器有两种工作状态:
Thumb状态:处理器执行16位和32位半字对齐的Thumb-2指令的状态。
调试状态:处理器停止执行并进行调试时进入该状态
3.3.2 数据类型
Cortex-M3 处理器支持以下数据类型:字(32b)、半字(16b)、字节(B)(8b)。
半字必须以2B对齐的方式存取
字必须以4B对其方式存取
3.3.3 寄存器
Cortex-M3处理器字长为32位,他的寄存器也是32位的。
1.通用寄存器 R0-R12(未分组)
通用寄存器R0-R12:(在结构上没有定义特殊的用途,在实际编程中通常用来进行数据操作)又分成两类:
低寄存器 R0-R7 可以被所有指令访问,需要注意的是,复位后它们的初始值是不可预料的。
高寄存器R8-R12 只能被32位的指令访问 ,需要注意的是,复位后它们的初始值是不可预料的。
2.堆栈指针寄存器 R13(分组)
(R13又可写作SP (Stack Pointer,堆栈指针))被用作堆栈指针,几乎每个处理器中都有类似的寄存器,用于访问堆栈。堆栈是一块特殊的存储区域,它由一块连续的内存和一个堆栈指针组成。
堆栈操作就是对内存的读写操作,但堆栈是一块具有特殊性质的内存区域,其访问地址只能由堆栈指针即堆栈指针寄存器SP给出。堆栈指针是堆栈中数据唯一的出口和入口。
Cortex-M3有两个SP:
主堆栈指针(MSP)或写作SP_main,是复位后默认的堆栈指针。
进程堆栈指针(PSP)或写作 SP_process,主要由常规的用户应用程序使用。
3.链接寄存器R14(未分组)
R14又可写作LR,是子程序的链接寄存器,通常用于在调用子程序时保存返回地址。
4.程序计数器R15(未分组)
R15又可写作PC(Program Counter),用于存放下一条执行的指令的地址。
5.特殊功能寄存器(未分组)
程序状态寄存器组、中断屏蔽寄存器组、控制寄存器。
3.3.4 指令系统
指令系统是一个CPU所能执行的所有指令的集合。指令系统可以分为 CISC 和 RISC 两大类,Cortex-M3是一款RISC处理器。
1.指令格式:指令格式是用二进制表示指令的结构形式(由两部分组成,操作码字段和操作数字段)。
2.Thumb-2指令集:是一个16/32位混合指令集。
3.Cortex-M3支持的 Thumb-2 指令(16位指令、32位指令)
3.3.5操作模式和特权分级
1.特权分级:
特权分级提供了一种存储器关键区域访问的保护机制和一种安全模式,是的普通的用户程序代码不能意外甚至恶意地执行涉及要害的操作。
Cortex-M3处理器支持两个特权等级:
**特权级:**可以执行任何指令,可以访问所有范围的存储器。
**用户级:**部分指令被禁止在Cortex-M3上执行,同时也不能对系统控制空间(SCS)中的寄存器进行操作。
2.操作模式:
操作模式提供了一种用户程序和系统程序相分离的执行方式。
**线程模式:**当复位或异常返回时, Cortex-M3进入该模式。通常情况下,线程模式是用户应用程序的运行模式。在该模式下,可以执行特权级和用户级代码。
**处理者模式:**当发生异常时, Cortex-M3进入该模式。通常情况下,Handler模式时异常或中断服务程序或操作系统内核代码的运行模式。在该模式下,所有代码都是特权访问的。
3.3.6 异常和中断
1.Cortex-M3异常类型:
4.Cortex-M3 异常处理过程
1.异常响应:
- 入栈
- 取向量
- 更新寄存器
2.执行异常服务程序:
3.异常返回
5.Cortex-M3 中断 和 NVIC
Cortex-M3内核的中断机制主要由NVIC来实现。NVIC集成在 Cortex-M3内核的内部,与中央处理器核心(即CPU)CM3Core紧密耦合,负责处理不可屏蔽中断和外部中断。
3.4 ARM Cortex-M3 存储器系统
与以前的ARM架构相比,基于 ARMv7 架构的 ARM Cortex-M3 存储器系统具有以下新特点:
- Cortex-M3 的存储器映射是预定义的,并且还规定了哪个位置使用哪条总线
- Cortex-M3 的存储器系统在一些特殊的存储器区域中支持位带操作,实现了对单一比特的原子操作
- Cortex-M3 的存储器系统支持非对齐访问和互斥访问
- Cortex-M3 的存储器系统支持小端和大端格式的设置
3.4.1 存储器映射
Cortex-M3 存储器从最低地址0x00000000 到最高地址 0xffffffff,其寻址空间总共4GB。(指令总线和数据总线共享同一个存储器空间)
Cortex-M3 的存储器映射从低地址到高地址依次可以划分为:
- 代码区:代码区有512MB ,位于最低地址,该区域可以执行指令,是嵌入式应用程序最理想的存储场所
- 片上 SRAM 区:片上 SRAM 区有 512MB ,该区域可以执行指令,常用于固件升级等维护工作
- 片上外设区:片上外设区有512MB ,该区域不允许执行指令,对应于片上外设的寄存器
- 片外 RAM 区:片外 RAM 区有 1GB, 该区域可以执行指令,对应于由于片内 RAM 不够而外接的片外 RAM
- 片外外设区:片外外设区有 1GB,该区域不允许执行指令,对应于片外外设
- 系统区:系统区有 512MB ,位于最高地址,该区域不允许执行指令,对应于 Cortex-M3 的特色外设
小结:ARM Cortex-M3处理器是ARM公司最新设计的一款采用ARMv7体系架构、基于三级流水线技术的32位RISC处理器。
它由Cortex-M3内核和SW-DP/SWJ-DP等调试组件构成。
其中,Cortex-M3内核是一个完整的处理器核心,包括Cortex-M3 CPU和一系列系统设备(如NVIC、MPU等),为用户提供了嵌入式系
统完整的“大脑”。Cortex-M3内核的“心脏地带”被一款典型的32位Cortex-M3 CPU——CM3Core 所占据,其内部的数据路径是32位,寄存
器是32位的存储器接口也是32位的。
四、基于 ARM Cortex-M3 的 STM32 微控制器
4.1 基于 ARM Cortex-M3 的 STM32 系列微控制器概述
4.1.1 产品线
STM32 系列微控制器的产品线包括高性能、主流和超低功耗三大类,分别面向不同的应用。
1.STM32F1系列 (主流类型)
基于Cortex-M3 的 STM32 系列微控制器:STM32F103,增强型,72MHz CPU,具有16KB~1MB 的 Flash、电机控制、USB 和 CAN。
例如本书后续部分主要介绍的微控制器 STM32F103RCT6
4.1.2 命名规则
命名规则:比如 STM32F103RCT6, STM32 代表意法半导体公司基于 ARM Cortex-M 系列内核的 32位 MCU,F 代表通用闪存型,103代表基于 ARM Cortex-M3 内核的增强型子系列,R代表64个引脚,C代表
大容量 256KB Flash, T 代表LQFP封装方式, 6 代表 -40~85摄氏度的工业级温度范围。
4.1.3 生态系统
生态系统总体上可分为硬件、软件和文档三大部分:
1.硬件:仿真器(ST-LINK、J-LINK、ULINK)、开发板(专业评估板、低成本评估板、开源评估板)。
2.软件:软件开发工具(KEIL MDK)、软件资源(自下而上包括 底层驱动、固件协议、应用模块)。
3.文档:STM32 的选型手册、数据手册、参考手册、用户手册和应用笔记等。
开发方法:
1.寄存器开发:一般在用户应用程序中使用汇编语言或C语言直接读写单片机的寄存器来控制其工作,如中断、定时器等。
2.库函数开发:STM32的库函数是位于寄存器与用户层之间的预定义代码,它向下实现与寄存器直接相关的的操作,向上为用户程序提供
配置寄存器的标准接口。
3.中间件开发:STM32CubeMX图形式配置器和初始化C代码生成器硬件抽象层、应用层示例、中间件组件、硬件抽象层。
4.2 STM32F103 微控制器基础
4.2.1 概述
1.小容量产品:指的是以 STM32F103x4 和 STM32F103x6 命名开头的微控制器,一般具有较小的闪存存储器、RAM空间和较少的定时器和外设。
2.中容量产品:指的是以 STM32F103x8 和 STM32F103xB命名开头的微控制器。
3.大容量产品:指的是以 STM32F103xC 、 STM32F103xE和 STM32F103xD 命名开头的微控制器,通常具有较大的闪存存储器、RAM 空间和更多的片上外设。
4.2.2 主系统结构
- I-Code 总线
- D-Code 总线
- 系统总线
- DMA总线
- 总线矩阵
- AHB-APB 桥
4.2.3 功能模块
- 系统模块
- 通信模块
- 模拟模块
- 控制模块
4.3 STM32F103 微控制器的最小系统
一个微控制器的最小系统是指能使微控制器正常工作所需要的最少元件,通常由微控制器芯片、电源电路、时钟电路、复位电路、调试和下载电路等部分组成。
4.3.1 电源电路
任何一个电子产品要正常工作,电源必不可少。STM32F103微控制器也不例外。
1.供电需求:

2.供电方案:
1.主电源(必需):STM32F103微控制器采用稳定的单电源供电,其电压范围必须为2.0~3.6V,同时通过其内部的一个电压调压器给Cortex-M3内核、内存以及数字外设提供1.8V的工作电压。这个调压器能根据STM32的功耗模式,灵活调整供电方式和供电范围,直至停止供电。
2.实时时钟和一部分备份寄存器的电源 V BAT(可选)
3.ADC模块所需的参考电压V REF+ 和 V REF-(可选)
4.3.2时钟电路
对于时序电路来说,除了电源外,还需要由稳定的时钟信 才能正常工作。
内部RC振荡器相比外部晶振来说不够准确也不够稳定,因此在条件允许的情况下,尽量使用 外部主时钟源。外部主时钟源主
要作为Cortex-M3内核和STM32外设的驱动时钟,一般称为高速外部时钟信 (HSE)。
高速外部时钟信 可以由以下两只时钟源产生:
- 外部晶体/陶瓷谐振器
- 用户提供的外部时钟信
4.3.3 复位电路
4.3.4 调试和下载电路:
1.STM32F103的调试端口 SWJ-DP。
2.STM32F103微控制器与标准20针JTAG插座的连接
4.3.5其他:
还需要新增启动存储器选择电路。STM32F103 微控制器有两个启动引脚 BOOT0 和BOOT1 .通过设置这两个引脚电平的高低,可以将STM32F103 微控制器存储空间的起始地址 0x00000000
映射到不同存储区域的起始地址。这样,就可以选择在用户 Flash、系统Flash 和片内 SRAM 上运行代码。
4.4 STM32F103微控制器的时钟系统
4.4.1输入时钟:
总之,STM32F103 微控制器有以下四种时钟源:
高速外部时钟(HSE)(外部晶振作为时钟源,晶振频率 4-16MHZ)
高速内部时钟(HSI)(由片内RC振荡器产生 频率8MHZ)
低速外部时钟(LSE)(外部晶振作为时钟源 32.768KHZ)
低速内部时钟(LSI)(片内RC振荡器产生 频率40kHZ)
系统时钟:
系统时钟 SYSCLK 由多路选择器 SW 根据用户设置选择 PLLCLK、HSE 或 HSI 中的一路输出而得。
系统时钟SYSCLK经过AHB预分频器输出到STM32F103的各个部件:
HCLK:高速总线AHB的时钟,由系统时钟SYSCLK经过AHB预分频器后直接得到。
…
ADCCLK:
4.5 STM32F103 微控制器的低功耗模式
4.5.1 睡眠模式:STM32F103的内核停止工作,但外设还在继续工作。
1.进入和推出
2.电流消耗
4.5.2停机模式:在Cortex-M3 深度睡眠模式的基础上结合了外设的时钟控制机制。
1.进入和推出
2.电流消耗
4.5.3待机模式:可以达到最低的电能消耗。
1.进入和推出
2.电流消耗
4.6 STM32F103 微控制器的安全特性
看门狗:是嵌入式系统中常用的安全保障机制。
STM32F103有两个看门狗模块:独立看门狗 IWDG 和 窗口看门狗 WWDG。独立看门狗相对于STM32主系统来说是完全独立的,它使用
LSI时钟驱动。而窗口看门狗作为STM32主系统的一部分,其时钟源自APB1 总线。这两个看门狗可各自独立工作,也可同时工作。
调试STM32F103 工程:
具备STM32F103 目标板和仿真器的条件下,可以借助仿真器,在嵌入式开发工具中设置目标硬件调试方式调试STM32F103工程。
五、GPIO(通用目标输入输出)
GPIO是微控制器数字输入输出的基本模块,可以实现微控制器与外部环境的数字交换。
无论对于新手还是程序员,GPIO 都是她们了解、学习或者开发嵌入式应用的第一步。
根据具体型 不同,GPIO可以提供最多112个多功能双向I/O引脚。这些I/O引脚分布在GPIOA、GPIOB~GPIOG 等端口中。其中端口
通常以大写字母命名,从A开始,以此类推。每个端口有16个 I/O 引脚,通常以数字命名,从0 开始,直到15为止。 PA0~PA15。
内部结构:
输出驱动器:主要由多路选择器、输出控制和一对互补的MOS管组成。
输入驱动器:主要由TTL肖特基触发器、带开关的上拉电阻电路和带开关的下拉电阻电路组成。。
工作模式:STM32F103 的I/O 引脚有 8 种工作模式 包括4种输出和4种输入模式。
- 普通推挽输出
- 普通开漏输出
- 复用推挽输出
- 复用开漏输出
- 上拉输入
- 下拉输入
- 浮空输入
- 模拟输入
输出速度:如果STM32F103 的 I/O 引脚工作在某个输入模式下,通常还需设置其输出速度。这个输出速度指的是 I/O 口驱动电路的响应速度,而不是输出信 的速度。输出信 的速度取决于软件程序。
复用功能重映射:在基于STM32 微控制器的应用开发中,用户根据实际需要可以把某些外设的复用功能从默认引脚转移到备用引脚上,这就是外设复用功能的I/O 引脚重映射。
六、定时器
微控制器另一个基本片上外设—-定时器,与GPIO一样,都是微控制器必备的片上外设,微控制器中的定时器实际上是一个计数器,可以对内部脉冲/外部输入进行计数,不仅具有基本的计数/延时功能,还具有捕获、输出比较和 PWM 输出等高级功能,可以连接颜色传感器、步进电机(PWM输出)等多种外设。
在嵌入式开发中,充分利用定时器的强大功能,可显著提高外设驱动的编程效率和CPU利用率,增强系统的实时性。
6.1 定时器概述
延时在嵌入式应用中是常用操作,例如在GPIO开发实例——-LED灯闪烁中就用到了延时
6.1.1 延时的实现
- 纯硬件电路
- 纯软件编程
6.1.2 可编程定时/计数器概述
可编程定时/计数器(简称定时器)是当代微控制器标配的片上外设和功能模块
6.2 STM32F103 的定时器概述
STM32F103 的定时器专为工业控制应用度身量做,具有延时、信 的频率测量、信 的 PWM 测量、PWM 输出、三相六步电机控制及编码接口等功能。
6.3 STM32F103 的基本定时器 TIM6 和 TIM7
STM32F103 的基本定时器TIM6 和 TIM7指具有最基本的功能,即累计时钟脉冲数超过预定值时,产生定时器溢出事件。如果使能了中断或者 DMA 操作,即将产生中断或者 DMA 操作。
6.3.1 内部结构
由触发控制器、一个16位预分频器、一个带自动重装载寄存器的16位计数器构成,其中,由可编程的16位预分频器驱动的具有自动重装载功能的16位计数器 TIMx_CNT 是STM32F103基本定时器的核心
6.3.2 时钟源
基本定时器TIM6和TIM7只有一种时钟源——-内部时钟 CK_INT。对于STM32F103的所有的定时器,内部时钟 CK_INT 都来自 RCC 的
6.3.3 计数模式
延时时间=(TIMx_ARR+1)*(TIMx_PSC+1)/ TIMxCLK(通常为72MHZ)
6.4 STM32F103 的通用定时器 TIM2 ~ TIM5
与基本定时器TIM6和TIM7相比,通用定时器的功能就复杂多了。
6.4.1 内部结构
- 计数器 TIMx_CNT
- 捕获/比较寄存器 TIMx_CCR
6.4.2 时钟源
- 内部时钟 CK_INT
- 内部触发输入 ITRx
- 外部输入捕获引脚 TIx(外部时钟模式1)
- 外部触发输入引脚 ETR(外部时钟模式2)
6.4.3 计数模式
- 向上计数
- 向下计数
- 双向计数
6.5 STM32F103 的高级定时器 TIM1 和 TIM8
STM32F103 的高级定时器 TIM1 和 TIM8除了通用定时器的所有功能,还具有三相六步电机的接口、刹车功能以及用于 PWM 驱动电路的死区时间控制等,使其非常适于控制电机。
** stm32f103系统时钟初始化(寄存器)**
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!