微型计算机从诞生以来一直采用总线结构,总线结构使整个系统的结构非常清晰,简化了系统结构和硬件设计,便于采用模块化结构设计方法。在同一个总线标准下,系统的扩充性好,同时便于故障诊断和维修。
采用总线结构的缺点是利用总线传送具有分时性。当有多个主机同时申请总线的使用时必须进行总线的仲裁,以确定谁具有总线的使用权。
简述微型计算机的工作过程。
微型计算机必须在硬件和软件的密切配合下才能工作。在工作之前,必须将程序代码存放在主存储器内,每一条指令都有唯一的操作码,它代表操作的性质。绝大多数指令还有操作数,它是操作对象,有的操作数位于CPU内部,有的操作数位于CPU内部,有的操作数位于存储单元中,甚至还有操作数位于外部设备中。计算机的工作过程就是按照程序安排指令顺序和逻辑一条一条地执行,具体步骤如下:
(1) 程序地起始地址存放在程序指针PC中,将PC中的地址信息发到地址总线上,经过地址译码器找到相应地存储单元,将指令代码取出,并将取出地指令代码送到指令寄存器。
(2) 将指令代码送到指令译码器ID进行指令译码,得到各种控制信号,指挥CPU各部协调工作。
(3) 算术逻辑单元ALU对操作数进行运算,并存放运算结果,更新标志寄存器FR内容。
(4) 程序指针PC的值自动加1,指向下一个存储单元,开始取新的指令代码。
综上所述,微型计算机地工作过程就是取指令、译码指令、执行指令几个步骤不断重复地过程。
CPU内部主要包括哪些功能部件?
中央处理器(CPU),它是采用大规模集成电路技术制成的半导体芯片,内部集成了计算机的主要部件——控制器、运算器和寄存器,还有一些增强的功能部件,如MPU,Cache等。
什么是标志寄存器,它包含哪些位?这些位地含义是什么?
标志寄存器(FR);也称程序状态字(PSW)寄存器,用来保存最近一次ALU操作结果的特征标志,后续指令通过测试这些特征标志,判断程序是否转移。这些特征标志被称为标志位,各标志位的意义与具体的CPU有关。通常有以下几种标志位:
(1) 符号标志位(SF),表示运算结果是否为负数。
(2) 零标志位ZF,表示运算结果是否为零。
(3) 辅助进位标志位AF,也称为半进位标志位,表示运算时第三位与第四位之间是否有进位或借位
(4) 奇偶标志位PF,表示运算结果中1的数量是奇数还是偶数。
(5) 进/借位标志位CF,表示运算是否产生了进位或借位。
(6) 溢出标志位OF,表示有符号运算结果是否超出范围,产生溢出。
当两个无符号数比较大小时,如何利用标志位判断大于、等于、小于等于和大于等于关系?
A-B然后看进/借位标志位CF标志,有借位(CF=1)则B大,再看零标志位ZF标志,如果ZF=1则说明结果为0,说明A=B。
当两个有符号数比较大小时,如何利用标志位判断大于、等于、小于等于和大于等于关系?
A-B看符号标志位SF,如果SF=1说明结果为负数,那么说明B大,再看零标志位ZF,如果ZF=1说明结果为0,说明A=B。
CM3内核中有哪些总线相关部件,它们有什么作用?
ICode总线:该总线将CM3内核指令总线和闪存指令接口相连,完成指令的预取。
DCode总线:该总线将CM3内核的DCode总线与闪存存储器的数据接口相接,完成常量加载和调试访问。
系统总线:该总线连接CM3内核的系统总线到总线矩阵,总线矩阵协调内核和DMA间访问。
连接寄存器R14是如何实现程序地跳转和返回地?
R14是连接寄存器(LR)。当调用一个子程序时,由R14存储返回地址。与大多数其他处理器不同的是,ARM为了减少访问内存的次数(访问内存的操作往往需要3个代码以上指令周期),把返回地址直接存储在寄存器中。这样足以使很多只有1级子程序调用的代码,在返回时无需访问堆栈内存,从而提高了子程序调用的效率。如果多余1级,则需要把前一级的R14值压入堆栈。在ARM上编程时,应尽量只使用寄存器保存中间结果,迫不得已时才访问内存。
当调用一个子程序指令执行时,返回地址被自动装入LR;子程序返回时,借助LR,即可返回到主程序中调用指令的下一条指令。
STM32主系统由哪些单元构成?
STM32主系统由四个驱动单元和四个被动单元构成。四个驱动单元是:内核DCode总线、系统总线、通用DMA1、通用DMA2。四个被动单元是:AHB到APB的桥,连接所有的APB设备,内部Flash闪存,内部SRAM(静态随机存取存储器),FSMC(可变静态存储控制器)。
什么是堆栈?有什么作用?CM3采用了哪些形式地堆栈?
堆栈是一种存储器的使用模型,它由一块连续的内存和一个栈顶指针SP组成,用于实现LIFO的缓冲区。其最典型的应用,就是在数据处理前先保存寄存器的值,再在处理任务完成后从中恢复先前保存的这些值。它有压栈和出栈两种操作。
R13是堆栈指针寄存器SP,CM3支持内存中设置2个堆栈,分别称为主堆栈和进程堆栈,相应地CM3核中R13包含2个堆栈指针寄存器,分别为主堆栈指针MSP和进程堆栈指针PSP。
在没有OS环境下,用户程序一般使用主堆栈。在带有OS的环境中,OS使用主堆栈,用户程序使用进程堆栈。
微处理器与外设传送数据时为什么需要I/O接口?
I/O接口是指CPU与外部设备之间的连接通道及其相关的控制电路。I/O接口是连接CPU与外设的桥梁和纽带,他在CPU与外部设备交换信息中起着非常重要的作用。
I/O接口电路的作用:
(1) 为数据提供锁存和缓冲功能:在计算机系统中,CPU的运行速度很高,而外设的速度往往很低,即使是快速的外部设备,其工作速度也远远不及CPU的工作速度,一般而言,CPU的工作速度是外设的几十倍乃至几千倍。计算机是通过数据总线输入或输出信息的,不允许任何外设长时间占用总线,I/O接口为数据提供输出锁存和输入缓冲功能,在CPU不操作外设时,I/O接口电路实现CPU与外设的隔离,解决速度匹配问题。
(2) 实现信号变换功能:计算机内部的信号都是并行的、数字的,采用TTL电平标准,而外设有串行的、模拟的,信号电平也千差万别,要实现这种不同信号的连接,必须通过I/O接口电路进行转换。实现并行信号与串行信号之间的转换需要移位寄存器,通信接口电路具有这种功能。实现模/数和数/模信号输入/输出需要A/D和D/A转换接口电路。实现各种电平的开关量信号的输入/输出需要进行电平转换,如TTL电平不能直接去驱动24V的直流继电器。
(3) 提供外设控制、监制和管理功能:I/O接口电路接受来自CPU的控制信号,实现对外设的控制和管理。外设的工作状态也可以通过I/O接口送回CPU,确保操作同步。为实现CPU与外设并行工作,专用的I/O接口可以挂历来自外设的中断请求,以中断方式进行输入/输出,大大提高CPU的利用率。
CPU同外设交换的信息有哪些类型?什么是接口和端口?他们之间的关系如何?
CPU同外设交换的信息有数据信息、状态信息和控制信息三种。
I/O接口通常是指连接CPU与外设的集成芯片,不同的外设需要不同的I/O接口。一个I/O接口芯片往往有若干个I/O端口,根据CPU与外设之间传输信息类型不同可以分为数据、状态、控制三种I/O端口,需要说明的是,不是每个I/O接口都具有三种类型的端口,也不是同一种类型端口的数量只有一个,要根据实际需要确定。
I/O端口编址方式有哪两种?各有什么优缺点?
CPU与外设之间传送数据有哪几种方式?各有什么特点?
CPU与外设之间的数据传送方式一般分为4种:无条件传送、查询传送方式、中断传送方式和DMA传送方式。可将无条件传送和查询传送方式合称为程序控制传送方式。
简述查询输入传送方式的实现过程。
通常情况下输入接口和输出接口在硬件上需要什么逻辑电路?
在外部扩展并行I/O接口电路时,通常用缓冲器扩展输入接口电路,用锁存器扩展输出接口电路。上拉/下拉电阻输入;OC/OD输出电路;推挽输出电路
什么是上拉电阻和下拉电阻?在什么情况下需要上拉电阻和下拉电阻?
推挽输出有什么特点,使用的时候需要注意什么?
STM32的GPIO有哪几种工作方式,分别用于什么场合?
输入浮空模式:适用负载驱动能力强(允许大灌电流、大拉电流)的外部输入设备。例如,两态输出的按键设备。
输入上拉模式:适用于(1)拉电流承受能力弱的外部输入设备(2)仅能产生低电平信号的按键(闭合输出低电平,断开输出高阻)
输入下拉模式:适用于:(1)承受灌电流能力弱的外部设备.(2)仅能产生高电平信号的按键(闭合输出高电平,断开输出高阻)
模拟模式:适用于模拟信号输入(作为片内ADC接口的信号输入)。例如:模拟温度传感器、模拟压力传感器、模拟风速传感器、话筒、模拟摄像头等
开漏输出模式:适用于:
(1)外部输出设备需要大于接口电源电压的情况
例如芯片接口电源VCC=3.3V(输出高电平3.3v),而外部设备电机设备电压12V,为此采用开楼输出,通过外接上拉电阻连接到12V外设电源,即可提供12V输出驱动电机。
(2)需要将不同的输出信号相与,在此模式下,多个IO输出信号直接连到一起(外接上拉电阻),实现“线与”功能。省下专用的与门。
开漏复用输出模式:
适用于:复用功能情况下的开漏输出
例如,定时器接口、DAC接口、USART接口,它们无专用外设信号线,需要借助于GPIO接口输出信号,此时应该将GPIO接口设置为复用模式。如果需要线与,或加大输出电压,则设复用置开漏模式
推挽输出模式:
适用于:输出设备功率较大(额定输出功率3.3V20mA,实际可以达到3.3V 50mA),信号变化块的场合
推挽复用输出模式:
适用于:复用功能情况下的推挽输出
例如,定时器接口、DAC接口、USART接口,它们无专用外设信号线,需要借助于GPIO接口输出信号,此时应该将GPIO接口设置为复用模式。如果需要驱动功率大、速度快,则设复用置推挽模式
STM32的GPIO相关寄存器有哪些?各有什么作用?
- GPIOx_CRL :端口配置低寄存器
- GPIOx_CRH:端口配置高寄存器
- GPIOx_IDR:端口输入寄存器
- GPIOx_ODR:端口输出寄存器
- GPIOx_BSRR:端口位设置/清除寄存器
- GPIOx_BRR :端口位清除寄存器
- GPIOx_LCKR:端口配置锁存寄存器
什么是中断?中断有什么作用?
中断的工作机制是什么?中断请求与中断服务的关系是什么?中断系统在其中起到什么作用?
中断系统对众多的中断源进行管理:
1)决定中断源是否有权请求以及有效的请求方式。
2)多个中断源随机产生中断请求,有可能先后产生,也有可能同时产生,而CPU在同一时间只能响应其中一个。这就需要中断系统的优先级管理来协调这种竞争关系。
3)为每个请求找到其相应的服务程序地址。
什么是外部中断?什么是内部异常?二者有何不同?为什么许多时候又不区分它们?
一个外部中断请求会在哪些地方被挂起记录?中断挂起寄存器中的有效位是如何被清除的?
中断请求:中断源通过专用的中断请求信号线(外部中断源)或内部异常请求信号线(内部异常源)向CPU中的中断控制器(如CM3中的NVIC)发出规定的有效信号(如,约定高电平代表有效),表示“中断请求”
中断挂起:如果一个异常源或中断源发出请求后不能立即得到CPU的响应(CPU当前正在响应更高优先级的异常或相关屏蔽寄存器被设置,它将暂时得不到响应),这个状态称为“挂起”(悬而未决)。
EXTI1_PR、EXTI1_SWIER
如何表示优先级的高低?为什么STM32中的一些中断的优先级位负数?在这里插入图片描述
3种系统内部异常(复位,NMI和硬FAULT)拥有固定不变的负数优先级(高于其它所有的异常)。
中断优先级的作用是什么?为何要划分抢占优先级和子优先级?
选用NVIC_PriorityGroup_0优先级分组有什么用途?选用NVIC_PriorityGroup_4呢?
NVIC_PriorityGroup_0选择第0组,抢占优先级0位,子优先级4位,说明抢占优先级只能为0,一直拥有最高的抢占优先级
NVIC_PriorityGroup_4选择第4组,抢占优先级4位,子优先级0位,说明子优先级只能为0,一直拥有最高的子优先级。(可能是这样)
什么是中断服务程序?它与普通的子程序有什么区别?
什么是中断向量?什么是中断向量表?有哪两种类型的中断向量表?
编写中断服务程序需要注意些什么?
编写位置、不宜过长等
中断处理过程中为什么需要保护断点和保护现场?STM32再这方面有何特别?
定(延)时有哪些基本方法?各有什么用途?
1.软件延时:CPU执行一段“空”程序实现延时
优点:不需要添加额外的硬件设备,简单易实现
缺点:占用CPU时间,精度受中断及CPU主频时钟影响
2.硬件延时电路:采用附加的数字电路(如555单稳态芯片)产生特定的延时。
优点:不占用CPU时间
缺点:改变延时时间需要调整电路参数(电阻、电容值),通用性灵活性差,时间精度受电路参数影响,稳定性差。
3.可编程定时器(计数器):
以专用芯片(如Intel8253)或MCU中集成的定时器接口设备(如STM32中的TIM1~8 )来进行定时。
优点:定时器初始化后就独立于CPU工作,不占用CPU时间,时间长短不限,使用灵活精度高。
缺点:增加硬件成本
什么是影子寄存器?它有何作用?查阅STM32参考手册,说明通用定时器有哪些影子寄存器?哪些库函数可以使能或关闭预加载控制?
预分频器PSC、自动重加载寄存器ARR、捕获/比较寄存器1234
举例说明: TIMx_CR1中ARPE位(自动加载使能位)
ARPE =0时:每次软件写入自动更新寄存器ARR新计数初值时,硬件自动将ARR的预加载寄存器的值传送到其影子寄存器(无缓冲直通);
ARPE=1时:只有在下一次更新事件发生时,硬件才将ARR的预加载寄存器的值传送到其影子寄存器。
STM32的通用定时器由哪三部分组成?它们各自有什么功能?
什么是更新事件?STM32通用定时器有哪些更新事件?各有什么用途?
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新