嵌入式期末复习
2023-02-28 11:42:41 8 举报
AI智能生成
嵌入式期末复习
作者其他创作
大纲/内容
特点
系统内核小:系统资源相对有限
专用性强:个性化强,软件和硬件的结合非常紧密
系统精简:一般没有系统软件和应用软件的明显区分
实时性要求高:软件质量要求高,要求固化存储,以提高速度
使用多任务操作系统
区别
与PC机的区别
专用性强:面向特定应用,完成特定功能
系统内核小:采用专用中央处理器,系统配置够用即可
实时性要求高:或不用操作系统,或选配实时操作系统
运行环境苛刻:对体积、功耗、可靠性、运行环境有严格要求
程序固化:运行程序固化在存储器芯片中
专用开发工具:自身不具备自主开发能力,需专用开发工具支持
与单片机的区别
一般以32位嵌入式微处理器为核心的硬件设计;而单片机系统多为4位、8位、16位机,不适合运行操作系统,难以完成复杂的运算及处理功能;
嵌入式系统强调基于平台的设计、软硬件协同设计;单片机大多采用软硬件流水设计;
分类
按嵌入式软件的结构分类
循环轮询系统
前后台系统
多任务系统
按表现形式分类(硬件范畴)
芯片级嵌入(含程序或算法的处理器)
模块级嵌入(系统中的某个核心模块)
系统级嵌入(软件和硬件的结合体)
按实时性要求分(软件范畴)
实时系统:如果逻辑和时序出现偏差将会引起严重后果的系统(响应时间在ms或s级)
软实时系统:系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须在多长时间内完成(响应时间为数十秒)
硬实时系统:各任务不仅要执行无误而且要做到准时(响应时间在ms或us级)
组成
体系结构
应用层——OS层——驱动层——硬件层(软件和硬件)
硬件系统组成
以嵌入式微处理器为核心
结构
主要依靠:中央处理器CPU:由运算器、控制器、寄存器组和内部总线构成
CPU的体系结构
冯·诺依曼结构
特点
数据与指令都存储在同一存储空间中
统一编址,指令和数据通过同一总线访问
缺点
取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行;高速运行时,形成传输瓶颈。
哈佛体系结构
特点
程序与数据在不同存储空间;每个存储器独立编址、独立访问
使用程序和数据总线,使数据吞吐率提高一倍
适合于数字信号处理
优点
由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样,也就克服了数据流传输的瓶颈,提高了运算速度
两种指令集
CISC:复杂指令集(Complex Instruction Set Computer):具有大量的指令和寻址方式,80%的程序只使用20%的指令,大多数程序只使用少量的指令就能够运行
RISC:精简指令集(Reduced Instruction Set Computer):在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,使CPU硬件结构设计变得更为简单
对比
影响CPU性能的因素
流水线:几个指令可以并行执行,提高了CPU的运行效率
CPU中的流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠执行,从而实现几条指令并行处理,以加速程序运行过程的技术。
掌握流水线的周期运算方法!
掌握流水线的周期运算方法!
超标量执行:配置多个执行部件和指令译码电路,能同时执行多条指令,并且每条电路都采用流水线执行
高速缓存cache
概念
把被频繁访问的信息,成批地从主存中读到一个能高速存取的小容量存储器中存放起来,提高效率
存在的问题
cache和主存可能不会同步更新,导致读脏数据
解决方案
刷新与回写:在CPU访问异步事件控制的数据前一定要强行刷新cache中的内容;反之,从内存到外部设备搬移数据前一定要回写内存。
与Buffer的区别
存取buffer不需要CPU干预
采用SoC设计(SoC是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上的设计(部件包括CPU在内))
特点
体积小、重量轻、成本低、可靠性高
功耗低
工作温度、抗电磁干扰、可靠性等方面增强
存储器
存储结构
存储管理单元:MMU
使各个任务作为各自独立的程序在其自己的私有存储空间中运行,运行的任务无须知道其他与之无关的任务的存储需求情况
虚拟存储空间到物理存储空间的映射
存储器访问权限的控制
设置虚拟存储空间的缓冲特性
种类
RAM:随机存取存储器
SRAM:静态随机存储器
DRAM:动态随机存储器
ROM:只读存储器(Read Only Memory)
FLASH:闪存
NOR:芯片其内部结构是采用并行方式工作的,内部的地址线和数据线是分开的。其特点可以按字节随机读取任意单元的内容。
NAND:基本工作方式是按顺序串行读取,一个区块写入或读出结束再进行下一个操作,采用的是串行方式工作。
总线
概念
总线是CPU与存储器和设备通信的机制,是计算机各部件之间传送数据、地址和控制信息的公共通道。
一个微处理器系统可能含有多条总线,不同速度的总线间用桥连接
计算
总线带宽(单位:MB/s) =(总线宽度32bit/8)× 总线频率(Hz)1/250ns
I/O单元电路
通信模块
外部设备
软件系统
体系结构
BSP
BSP(板级支持包,也叫硬件抽象层)是介于底层硬件和操作系统之间的软件层,它完成系统上电后最初的硬件和软件初始化,完成硬件相关的设备驱动,并对底层硬件进行封装,使得操作系统不再面对具体的操作。
操作系统
特点
可固化存储
可配置、可剪裁
独立的板级支持包,可修改
不同的CPU有不同的版本
应用的开发需要有集成的交叉开发工具
层次
内核层
只提供基本功能,如建立和管理进程、提供文件系统、管理设备等,这些功能以系统调用方式提供给用户
应用层
如,网络功能、文件系统、GUI系统等均工作,以系统进程或函数调用的方式工作
实时操作系统
非抢占式
低优先的任务正在执行时,有高优先的要等在运行完成后再执行
抢占式
低优先的任务正在执行时,有高优先的会立刻打断并开始执行
任务的调度方式
不可抢占式调度
一个任务一旦获得CPU就独占其运行,除非由于某种原因使它决定放弃CPU的使用权
可抢占式调度
基于任务优先级的,当前正在运行的任务可以随时让位给优先级更高的处于就绪态的其他任务
时间片轮转调度
当两个或两个以上任务有同样的优先级时,不同任务轮转使用CPU,直到系统分配的CPU时间片用完
函数
可重入函数
主要用于多任务环境中,可以被中断的函数,
在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误
在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误
不可重入函数
由于使用了一些系统资源(全局变量区,中断向量表等)
它如果被中断的话,可能会出现问题,不能运行在多任务环境下
它如果被中断的话,可能会出现问题,不能运行在多任务环境下
嵌入式C语言编程基础
特点
开发环境与工具链
中断与驱动
硬件资源限制
位运算
预处理伪指令
文件包含
头文件
宏定义#define
特点
提高代码运行效率
预处理参数宏时使用两遍宏展开,第一遍展开宏体,第二遍对展开的宏体用实参替换形参
参数宏的形式参数表中没有类型说明符
概念
在程序开头声明,接下来遇到#define中的标识符时,将其中的内容在当前位置中进行替换或插入(宏展开)
条件编译
使用条件编译避免头文件重复
#ifndef __COMPLEX__
#define __COMPLEX__
//头文件主体
#endif
#define __COMPLEX__
//头文件主体
#endif
参数类型及修饰符
extern:外部存储类型,表明该变量是外部变量(全局变量)
其作用域为从变量的定义开始到本程序文件的末尾。
编译时外部变量被分配在静态存储区。
其能否被存取,由该外部变量定义性说明与使用它的函数之间的位置关系决定。
其作用域为从变量的定义开始到本程序文件的末尾。
编译时外部变量被分配在静态存储区。
其能否被存取,由该外部变量定义性说明与使用它的函数之间的位置关系决定。
const修饰符:常量修饰符(只读)
内存中单独开辟有一个常量区用于存放const变量
变量被const修饰后就不再变了。
内存中单独开辟有一个常量区用于存放const变量
变量被const修饰后就不再变了。
volatile修饰符:易失性修饰符
说明所定义的变量或指针可以被多种原因修改
编译器在用到该变量时,必须每次都小心地重新读取其值,而不能使用保存在寄存器里的备份。
说明所定义的变量或指针可以被多种原因修改
编译器在用到该变量时,必须每次都小心地重新读取其值,而不能使用保存在寄存器里的备份。
static:在本文件定义前和非被函数定义文件中,该函数不能被调用
interrupt:将函数修饰为中断函数,返回类型和参数均必须为void
开发与调试
交叉开发
交叉开发是指在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行调试的开发方式
构成这种开发方式的环境称为交叉开发环境。
构成这种开发方式的环境称为交叉开发环境。
四种调试方法
模拟调试
概念
调试工具和待调试的嵌入式软件都在主机上运行,由主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。
优点
简单方便,不需要目标板,成本低
缺点
功能非常有限,无法实时调试
软件调试
BDM/JTAG调试
全仿真调试
典型芯片讲解
ARM系列微处理器
特点
低功耗、低成本、高性能
采用RISC体系结构
大量使用寄存器(31个通用寄存器、6个状态寄存器)
高效的指令系统
ARM指令集
指令编码
32位,典型的RISC体系结构:简洁、高效、便于实现
条件执行
当处理器工作在ARM状态时,几乎所有的指令均可以包含一个可选的条件码
只有CPSR中的条件标志满足指定条件时,指令才被执行
不符合条件的代码依然占用一个时钟周期
只有CPSR中的条件标志满足指定条件时,指令才被执行
不符合条件的代码依然占用一个时钟周期
特点
向后兼容:新版本增加指令,并保持指令向后兼容
Load-store 结构
在通用寄存器中操作(指令集仅能处理寄存器中的数据)
load/store – 从存储器中读某个值,在寄存器中操作完后再将其放回存储器中
指令分类
数据处理指令 – 使用和改变寄存器的值
数据传送指令 – 把存储器的值拷贝到寄存器中 (load) 或者把寄存器中的值拷贝到存储器中(store)
控制流指令
分支
分支和链接, 保存返回的地址,以恢复最先的次序
陷入系统代码
寻址方式
立即寻址
操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数
寄存器寻址
利用寄存器中的数值作为操作数:ADD R0,R1,R2
寄存器间接寻址
以寄存器中的值作为操作数的地址:LDR R0,[R1]
基址变址寻址
将寄存器的内容与指令中给出的地址偏移量相加,得到操作数的有效地址
并且在加到基址寄存器前还可以经过移位操作:LDR r0,[r1,r2]
并且在加到基址寄存器前还可以经过移位操作:LDR r0,[r1,r2]
堆栈寻址
使用一个称作堆栈指针的专用寄存器指示当前的操作位置
块拷贝寻址
多寄存器传送指令LDM/STM的寻址方式
相对寻址
以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址
指令类别
数据处理指令
完成常用的算术与逻辑运算
不但将运算结果保存在目的寄存器中,还可以更新CPSR 中的相应条件标志位
不但将运算结果保存在目的寄存器中,还可以更新CPSR 中的相应条件标志位
Load/Store指令(存储器访问)
存储器数据的操作是通过将数据从存储器加载到片内寄存器中进行处理
结果经寄存器存回到存储器,以加快对片外存储器数据处理的执行速度
结果经寄存器存回到存储器,以加快对片外存储器数据处理的执行速度
程序状态寄存器读、写指令
用于在状态寄存器和通用寄存器之间传送数据
(MRS)读
(MSR)写
跳转(分支)指令
B 跳转指令
BX 带状态切换的跳转指令
BL 带链接的跳转指
BLX 带链接和状态切换的跳转指令
异常中断(产生)指令
软件中断指令SWI用于产生SWI异常中断,用来实现在用户模式下对操作系统中特权模式的程序调用
断点中断指令BKPT主要用于产生软件断点,供调试程序用
协处理器指令
用于系统控制、存储管理单元控制、浮点运算和系统性能监测等
Thumb指令集
概述
是ARM指令集的扩展,节省存储空间,具备32位代码的所有优点
产生原因
以更低的成本取得更好的性能和代码密度
特点
代码少,性能高,解码逻辑简单
实例:ARM7TDMI
Thumb架构扩展
3级流水线
冯诺依曼体系
64位结果
工作状态
两种
ARM状态,处理器执行32位的字对齐的ARM指令
Thumb状态,处理器执行16位的、半字对齐的Thumb指令。
程序计数器PC使用位1选择另一个半字
程序计数器PC使用位1选择另一个半字
特点
ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容
ARM指令集和Thumb指令集都有相应的状态切换命令
ARM处理器在开始执行代码时,只能处于ARM状态
转换方式
通过BX指令(分支和交换指令)在ARM状态和Thumb状态之间切换
实例:将跳转地址放入寄存器R0;为切换状态修改最低位
(1表示切换为Thumb,0表示切换到ARM)
实例:将跳转地址放入寄存器R0;为切换状态修改最低位
(1表示切换为Thumb,0表示切换到ARM)
工作模式
分类
非特权模式
User模式
程序不能访问有些受保护的资源
只能通过异常的形式来改变CPU的当前运行模式
只能通过异常的形式来改变CPU的当前运行模式
特权模式(可以存取系统中的任何资源)
System模式
与User模式的运行环境一样
但是它可以不受任何限制的访问任何资源
该模式主要用于运行系统中的一些特权任务
但是它可以不受任何限制的访问任何资源
该模式主要用于运行系统中的一些特权任务
FIQ模式:处理快速中断,支持高速数据传送或通道处理
IRQ模式:处理普通中断
Supervisor模式:操作系统保护模式处理软件中断(SWI)、reset
Abort模式:处理存储器故障、实现虚拟存储器和存储器保护
Undefined模式:处理未定义的指令陷阱,支持硬件协处理器的软件仿真
模式切换
方法
软件控制(系统调用)
异常(CPU内部)
外部中断(中断控制器)
异常(CPU内部)
外部中断(中断控制器)
注:
用户和系统模式并不通过异常进入
内核级的中断使能也要考虑在用户模式进行。过早地打开中断可能会造成系统死机
寄存器
31个通用寄存器
在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器
是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。
是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。
R0~R7为未分组的寄存器,对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。
R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式
几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。
几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。
寄存器R13、R14分别有6个分组的物理寄存器
一个用于用户和系统模式,其余5个分别用于5种异常模式
一个用于用户和系统模式,其余5个分别用于5种异常模式
寄存器R13常作为堆栈指针(SP)
R14为链接寄存器(LR)
在每种模式下,模式自身的R14版本用于保存子程序返回地址
发生异常时,将R14对应的异常模式版本设置为异常返回地址
寄存器R15被用作程序计数器,也称为PC
读取的值是处理器正在取指的地址
值的改变将引起程序执行顺序的变化,这有可能引起程序执行中出现一些不可预料的结果
值的改变将引起程序执行顺序的变化,这有可能引起程序执行中出现一些不可预料的结果
6个状态寄存器
程序状态寄存器(CPSR/SPSR)
CPSR(当前程序状态寄存器),CPSR可在处理器任何模式下被访问
它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位
每一种异常模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器)
异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR
它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位
每一种异常模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器)
异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR
Thumb状态下的寄存器组织
Thumb状态下的寄存器集是ARM状态下寄存器集的子集
程序员可以直接访问8个通用的寄存器(R0~R7),程序计数器PC、堆栈指针SP、链接寄存器LR和当前状态寄存器CPSP
在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分
但可使用汇编语言程序受限制地访问这些寄存器,将其用作快速的暂存器
但可使用汇编语言程序受限制地访问这些寄存器,将其用作快速的暂存器
ARM的异常
概念
当正常的程序执行流程发生暂时的停止时,称之为异常(例如处理一个外部的中断请求或发生存储器故障)
原则
在处理异常之前,当前处理器的状态必须保留,以便当异常处理完成之后,当前程序可以继续执行
原因
软件中断
未定义指令陷阱(它不是真正的“意外”事件)
系统复位(它在逻辑上发生在程序执行前而不是在程序执行中,尽管处理器在运行中可能再次复位)
外部事件
未定义指令陷阱(它不是真正的“意外”事件)
系统复位(它在逻辑上发生在程序执行前而不是在程序执行中,尽管处理器在运行中可能再次复位)
外部事件
机制
当异常发生时,系统执行完当前指令后,将跳转到相应的异常处理程序处执行异常处理,异常处理完成后,程序返回
分类
按同异步
同步异常是由内部事件(如处理器指令运行产生的事件)引起的异常
异步异常是由外部事件(如处理器指令执行不相关的事件)引起的异常,一般这些外部事件与硬件信号相关,又称中断
按原理
中断
来自I/O设备的信号
异步
总是返回到下一条指令
陷井
有意的异常
同步
总是返回到下一条指令
故障
潜在可恢复的错误
同步
可能返回到当前指令
终止
不可恢复的错误
同步
不会返回
过程
将CPSR的内容保存到将要执行的异常对应的SPSR中
设置当前状态寄存器CPSR中的相应位
设置CPSR模式控制位CPSR[4:0],使处理器进入相应的执行模式
CPSR[5] = 0,保障在ARM状态下执行
设置中断标志位(CPSR[7]=1),禁止IRQ中断
当进入Reset或FIQ模式时,还要设置快速中断标志位(CPSR[6]=1),禁止FIQ中断
将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14中
给程序计数器(PC)强制赋值,使程序从相应的矢量地址开始执行中断处理程序
返回
说明
复位异常处理程序执行完后不需要返回,因为系统复位后将开始整个用户程序的执行
其他异常一旦处理完毕,必须恢复用户任务的正常执行,要求异常处理程序能精确恢复异常发生时的用户状态
步骤
所有修改过的用户寄存器必须从处理程序的保护堆栈中恢复(即出栈)
将SPSR_mode寄存器内容复制到CPSR中,使得CPSR从相应的SPSR中恢复,即恢复被中断程序的工作状态
根据异常类型将PC变回到用户指令流中相应指令处
异常向量表
异常向量表中指定了各异常向量与其处理程序的对应关系
每个异常对应的向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令
通过这两种指令,程序将跳转到相应的异常处理程序处执行
存储器的前8个字中除了地址0x00000014之外,全部被用作异常矢量地址
7种异常类型、优先级、对应工作状态
FIQ比IRQ快的原因
FIQ 模式有5个额外的私有寄存器(r8-r12)中断处理必须保护其使用的非私有寄存器
可以有多个FIQ中断源,但是考虑到系统性能应避免嵌套
FIQ向量位于中断向量表的最末,可以使中断处理程序可从中断向量处连续执行
存储器映射I/O
面临的问题
地址空间、存储器格式、存储器访问对准、存储器映射I/O
数据类型
字:32位,需4字节对齐
半字:16位,需2字节对齐
字节:8位,可以任意地址对齐
存储模式
大端模式:字数据的高位字节存储在低地址中,低位字节存放在高地址中
小端模式:字数据的低位字节存储在低地址中,高位字节存放在高地址中
片上总线
AHB(Advanced High-performance Bus):用于连接高性能系统模块
支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿
支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿
ASB(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式
APB(Advance Peripheral Bus):是一个简单接口,支持低性能的外围接口
STM32处理器芯片
概述
基于ARM Cortex-M3的内核开发的芯片,主要面向低成本低功耗的领域
组成
内核CPU,系统时钟发生器,复位电路,程序存储器,数据存储器
总线
中断控制
中断程序的优先级、使能设置
中断基本概念
名词
中断源
能引发中断的事件
中断标志位
每个中断源都有与之对应的中断标志位
一旦中断发生,标志位被置位。
若标志位被清除,对应中断便不会再被响应
因此,中断服务程序最后要将对应的中断标志位清零
一旦中断发生,标志位被置位。
若标志位被清除,对应中断便不会再被响应
因此,中断服务程序最后要将对应的中断标志位清零
中断屏蔽
设置相应的中断屏蔽位,禁止CPU响应某个中断
中断优先级
有多个中断时判断谁先响应
中断嵌套
在执行中断程序时,插入的新的中断
处理过程
保护现场
找到该中断对应的中断服务器程序的地址(中断向量表)
执行对应中断响应程序
还原现场
找到该中断对应的中断服务器程序的地址(中断向量表)
执行对应中断响应程序
还原现场
优点
更好更快地利用有限的系统资源解决系统响应速度和运行效率的一种控制技术
应用程序不必关心中断的发生与处理
中断服务程序不必关心应用程序执行状态
缺点
增加程序执行的不确定性和时间长度
抢占正在使用的资源
中断嵌套会增加栈空间
STM32的中断系统
嵌套向量中断控制器NVIC
概述
NVIC集成在ARM Cortex-M3内核中
与中央处理器核心CM3Core紧密耦合
从而实现低延迟的中断处理和高效地处理晚到的较高优先级的中断。
与中央处理器核心CM3Core紧密耦合
从而实现低延迟的中断处理和高效地处理晚到的较高优先级的中断。
优点
快;标准化
所有IO口都可作为外部中断使用
STM32中断向量表
STM32F103各个中断对应的中断服务程序的入口地址统一存放在STM32F103的中断向量表中
STM32F103的中断向量表,一般位于其存储器的0地址处。
STM32F103的中断向量表,一般位于其存储器的0地址处。
STM32中断服务函数
STM32所有的中断服务函数,在该微控制器所属产品系列的启动代码文件中都有预先定义
STM32外部中断/事件控制器EXTI
概述
在通用I/O引脚上产生中断∕事件请求(外部中断)
特点
每个外部中断∕事件输入线都可以独立地配置它的触发事件(上升沿、下降沿或双边沿)
并能够单独地被屏蔽
并能够单独地被屏蔽
每个外部中断都有专用的标志位(请求挂起寄存器),保持着它的中断请求
可以将多达112个通用I/O引脚映射到16个外部中断∕事件输入线上
调试接口
上位机调试与烧写程序的接口
外设(功能部件)
通用输入输出口:GPIO
概念
通用输入输出端口,可以理解为软件可控制的引脚
工作模式
输入
浮空输入
上拉输入
下拉输入
模拟输入
上拉输入
下拉输入
模拟输入
输出
开漏输出
推挽输出
复用推挽输出
复用开漏输出
推挽输出
复用推挽输出
复用开漏输出
寄存器
功能
端口复用功能:一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚,最大限度的利用端口资源
端口重映射功能:可以把某些功能引脚映射到其他引脚
GPIO端口操作方式
对芯片底层的寄存器进行直接操作
直接操作ODR寄存器(置1或清0)
操作BSRR和BRR寄存器(写1完成)
使用官方提供的标准函数库
位带操作(位绑定)
把每个比特膨胀为一个32位的字,这样就可以映射到一个地址上,方便控制,简化跳转的判断
串行通信接口
通信基本概念
串并行
并行通信,是指使用多条数据线传输数据。
并行通信时,各个位(bit)同时在不同的数据线上传送,数据可以字或字节为单位并行进行传输。
并行通信时,各个位(bit)同时在不同的数据线上传送,数据可以字或字节为单位并行进行传输。
传输原理:数据各个位同时传输
优点:速度快
缺点:占用引脚资源多
串行通信,是指使用一条数据线,将数据一位一位地在这条数据线上依次传输。
传输原理:数据按位顺序传输。
优点:占用引脚资源少
缺点:速度相对较慢
单半双
单工通信,是最简单的一种通信方式。数据只能单向传送
半双工通信,指在同一条通路上数据可以双向传输,但在同一时刻这条通路上只能有一个方向的数据在传输
全双工通信,是指使用不同通路实现数据两个方向的传输,从而使数据在两个方向上可以同时进行传送。
它要求发送设备和接收设备都有独立的接收和发送能力。
它要求发送设备和接收设备都有独立的接收和发送能力。
同异步
同步通信,通过在发送端和接收端之间使用共同的时钟从而使得它们保持“协调”。虽多占了一根IO线,数据传输速度快,适于需要高速通信的场合
异步通信,是指在发送端和接收端之间不存在共同的时钟。虽然传输速率远低于同步通信,但在发送端和接收端无需额外的时钟线。
串口通信协议
物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分。
UART采用TTL/CMOS的逻辑电平标准表示数据,用高电平表示逻辑1,用低电平表示0。
协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。
数据传输方式:UART数据是按照一定格式打包成帧,以帧为单位在物理链路上进行传输
数据传输速率:用比特率或者波特率来表示
UART以115.2Kbps的速率使用8个数据位、奇校验、1个停止位的数据格式传输一个大小为1K字节的文件
所需时间为: (1024*(8+1+1+1))/(115.2*1000) = 97.8ms
所需时间为: (1024*(8+1+1+1))/(115.2*1000) = 97.8ms
UART
概述
UART(通用异步收发器)是最常见、最方便、使用最频繁的、
与外围设备(如LCD、传感器等)或其他微控制器进行交换数据的通信接口
与外围设备(如LCD、传感器等)或其他微控制器进行交换数据的通信接口
USART
概述
在具备UART异步全双工串行通信传输基本功能的同时,还具有同步单向通信的功能
特性
USART1位于高速APB2总线上,其他的USART和UART位于APB1总线上
全功能可编程串行接口特性:数据位(8或9位);校验位(奇、偶或无);停止位(1或2位);支持硬件流控制(CTS和RTS)
自带可编程波特率发生器(整数部分12位、小数部分4位),最高传输速率可达4.5Mbps
两个独立带中断的标志位:发送标志位TXE(发送数据寄存器空)和接收标志位RXNE(接收数据寄存器非空);
支持DMA传输(直接内存访问,不经过CPU处理)
编程
串口通信中使用printf和scanf
用printf函数将数据格式化为一个字符串,将其发到串口,使用串口输出函数(fput)将字符写入串口缓冲区
时钟
0 条评论
下一页