ARM与STM32常见面试题【备战春招秋招】

avatar
作者
筋斗云
阅读量:0

前言

        该文章只针对面试时面试官提问如何回答的更全更好,看此文章没有讲解太多太细节的知识点。如果知识点本身不会,背诵此文章可能能让你找到一份工作,但不能让你持续的干下去。还是需要自身精通对应知识点。

        该文章适合有学习过ARM框架STM32单片机的朋友阅读,主要是针对本科应届生。收录了二十道近几年非常经典的ARM与STM32面试题。

        配合阅读 C语言常见笔试题 与 C语言常见面试题 更容易帮您找到一份单片机相关开发工作

基础知识常识部分

        该部分涉及一些知识要点,主要是面试官考察应聘者是否了解底层开发,是否了解相关基础知识概念

一、ARM内核分为哪几类?他们之间有什么区别?

        ARM内核主要分为三类,Cortex-A,Cortex-R,Cortex-M三种,A代表Applications,向用户提供全方位解决方案,主要用于复制的应用场合,比如智能手机、移动计算平台,数字电视、机顶盒、打印机或服务器等。R代表Real-Time Embedded,主要用于实时应用的系统,面向深层嵌入式实时应用,对低功耗、良好的中断行为、卓越性能以及与现有平台的高兼容性这些需求进行了平衡考虑,比如摄像机、智慧汽车等。M代表MCU & FPGA,面向具有确定性的微控制器应用的成本敏感型解决方案,主要是针对微控制器领域开发的,在该领域中,既需进行快速且具有高确定性的中断管理,又需将门数和可能功耗控制在最低,例如玩具,电子手表、音响、游戏手柄等设备。

二、ARM的工作模式有哪些?特权模式有哪些?异常模式有哪些?

User----用户模式
System----系统模式
Abort----数据访问中止异常
Undef----未定义指令异常
FIQ----快速中断
IRQ----外部中断
Supervisor----特权模式
Monitor----监控模式 安全模式(A系列独有)

除了用户模式都属于特权模式,其中安全模式级别更高一些

除了用户、系统、安全模式都属于异常模式

三、简述ARM的寄存器(r11-r15 cpsr、spsr)的作用

R0~R12、R15、CPSR为通用寄存器,在任意一个模式下内核都可以存取,R13、R14与SPSR为私有寄存器,每个模式都有自己独有的。

R0~R10主要用于存放临时数据

R11(fp)frame pointer        用来记录一个栈空间开始的地址(栈底寄存器

R12(ip)The Intra- Procedure-call scratch register        用来临时存放sp

R13(sp)        通常用作栈指针。指向当前栈的顶部(栈顶寄存器

R14(lr)          通常用作连接(或返回地址)寄存器。存储子程序返回地址 (链路寄存器

R15(pc)        通常用作程序计数器,存储下一条要执行的指令的地址。当执行指令时,CPU自动地修改PC 的内容,即每执行一条指令PC增加一个量,使 PC总是指向正在取指的指令地址

CPSR(Current Program Status Register)状态寄存器,记录当前的算数/逻辑操作结果、记录中断禁止标志位、记录当前的状态(ARM / Thumb)、记录当前的操作模式等

SPSR(Saved Program Status Register)临时保存CPSR,当一个异常发生时保存当前的CPSR 值。结合连接寄存器可使处理器返回先前的状态。

四、什么是合法的立即数?怎么判断?

该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到该数,该数为合法立即数

判断方法:

首先将这个数转换为32bit的16进制形式。0除外仅有一位数为合法立即数,仅有两位数并且相邻(包括首位相邻)的为合法立即数,仅有三位且相邻(包括首位相邻),且高位必须是1、2、3,低位为4、8、C的组合为合法立即数。

五、什么是嵌入式系统?

嵌入式系统是以应用为中心,以现代计算机技术为基础,能根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统

六、单片机最小的系统是什么,有哪些部分组成?

单片机最小的系统通常包括以下几个部分组成:

1. 单片机芯片:单片机的核心部分,包含CPU、内存、IO端口等功能模块。

2. 时钟源:提供单片机运行时钟的源头,用于控制单片机的时序和节拍。

3. 复位电路:用于在上电或复位时将单片机初始化到一个已知状态。

4. 电源管理电路:提供单片机所需的电源,包括稳压电路和滤波电路。

5. 外部晶振:用于提供单片机运行时的时钟信号,通常与单片机内部的时钟模块相连。

6. 外部存储器(可选):用于扩展单片机的存储容量,如EEPROM、Flash等。

7. 外部接口电路:用于连接外部设备,如LED、按键、传感器等。

这些部分组成了单片机最小系统的基本框架,可以根据具体需求和应用场景进行扩展和定制。

七、什么是IIC,UART,SPI,485,232

I2C(Inter-Integrated Circuit):是一种串行通信总线协议,用于连接微控制器和外部设备,支持多主机和多从机通信,属于半双工同步通信。

UART(Universal Asynchronous Receiver-Transmitter):是一种通用的异步串行通信接口,用于在设备之间传输数据,常用于串口通信。

SPI(Serial Peripheral Interface):是一种同步串行通信接口,用于短距离高速数据传输,支持全双工通信,常用于连接外围设备。

RS-485:是一种串行通信标准,用于远距离通信和多点通信,支持半双工通信,为差分信号,使用双绞线通信,具有抗干扰能力。

RS-232:是一种串行通信标准,用于短距离通信,支持全双工通信,常用于连接计算机和外部设备。

八、HAL库的全称是什么?是什么意思?

HAL代表Hardware Abstraction Layer,意为硬件抽象层,是一种软件层次结构,用于将底层硬件操作与上层应用程序分离,提供统一的接口和抽象,使得应用程序可以更方便地与硬件进行交互,同时实现跨平台和可移植性。HAL库通常用于嵌入式系统开发中,帮助开发人员简化硬件操作和提高代码的可维护性

九、一个16K×32位的存储器,其地址线和数据线分别有多少根?

地址线有14根,数据线有32根

16k是2的14次方,地址线数量为14根

数据线宽度为32位,表示每次可以传输32位的数据

十、简述磁盘、DDR、CACHE、和CPU的功能

磁盘(Disk):存储数据和程序文件的永久性存储设备。

DDR(Dynamic Random Access Memory):临时存储正在运行的程序和数据的内存。

CACHE(Cache):存储CPU频繁使用的数据和指令,提高数据访问速度。

CPU(Central Processing Unit):执行计算机程序指令的主要组件。

针对项目的常识部分

该部分不涉及知识点,主要考察应聘者是否实际做过开发,是否熟悉自己开发环境。以下题目没有唯一答案根据芯片的型号作答。若开发时间不长,一定要提前记忆此部分。

以下答案基于STM32F407芯片作答(STMG030或者STMF051答案也类似)

一、项目中使用到的芯片型号?该芯片名字的含义是什么?有哪些外设?

在STM32F407芯片中,型号中的"F"表示该系列芯片是基于ARM Cortex-M4内核的产品。"F"代表Flexible,表示这是一款灵活多样的产品系列。

补充G系列的G代表General-Purpose,表示这是一款通用用途的微控制器产品。U系列的U通常代表Ultra-Low Power,表示这是一款超低功耗的微控制器产品系列。这些产品通常设计用于对功耗要求非常严格的应用场景,如便携设备、传感器节点等。

包含外设有多个通用定时器、SPI、I2C、UART、GPIO、ADC、DAC、USB控制器、以太网控制器。

二、该芯片的运行内存(RAM)与闪存(FLASH)有多大?总线架构是哪一种?

在STM32F407芯片中,FLASH存储器大小为1MB,RAM的大小为192KB,总线架构为多总线架构

补充1:

STM32G030STM32F051芯片中,FALSH存储器大小为64KB,RAM的大小8KB,都为多总线架构。

补充2:

芯片总线架构主要包括以下几种

1. 单总线结构:所有设备通过一个总线连接,每个设备有唯一的地址,通信时需要进行地址识别。

2. 双总线结构:包括数据总线和地址总线,数据总线用于传输数据,地址总线用于传输地址信息。

3. 三总线结构:包括数据总线、地址总线和控制总线,控制总线用于传输控制信号,如读写控制、时序控制等。

4. 多总线结构:包括多个并行的总线,如系统总线、内存总线、I/O总线等,用于连接不同类型的设备和模块。

三、所使用的传感器通信协议是什么?数据格式是哪个?

此题目需要灵活回答,不同传感器使用协议不同,某一个传感器选择一种通信协议与一种数据格式即可,根据自己项目功能作答

常见通信协议有以下几种:

1. I2C(Inter-Integrated Circuit):双线串行通信协议,使用时钟和数据线进行通信。

2. SPI(Serial Peripheral Interface):四线串行通信协议,包括时钟、数据输入、数据输出和片选线。

3. UART(Universal Asynchronous Receiver/Transmitter):串行通信协议,使用异步通信方式,包括数据线、时钟线和控制线。

4. CAN(Controller Area Network):用于高速通信的串行通信协议,常用于汽车领域。

5. MODBUS:用于工业控制领域的通信协议,包括RTU和ASCII两种数据格式。

6. OneWire:单总线通信协议,只需要一根数据线进行通信。

常见的数据格式如下:

1. ASCII格式:将数据转换为ASCII码进行传输,可读性较好。

2. 二进制格式:直接以二进制形式传输数据,效率较高。

3. JSON格式:一种轻量级的数据交换格式,易于解析和生成。

4. XML格式:一种标记语言,用于描述数据结构和内容。

核心部分

该部分主要涉及一些核心知识点,通信与异常处理的流程,涉及到一些项目开发遇到的问题

一、I/O口的作用,I/O驱动方式,上拉电阻和下拉电阻的作用?

I/O口(输入/输出口)是单片机与外部世界进行数据交换的接口,其作用是实现单片机与外部设备之间的信息传输和控制

I/O口的驱动方式包括推挽输出、开漏输出和双向通用引脚。推挽输出可以提供较大的输出电流,适合驱动负载较重的外部设备;开漏输出适合连接到开路/上拉/下拉电路,用于实现信号的共享和多路连接;双向通用引脚可以实现输入输出功能,既可以作为输入端也可以作为输出端。

上拉电阻和下拉电阻通常用于I/O口的输入端,它们的作用是在没有外部信号输入时,通过引入一个预定的电平来确保输入端的电平状态。上拉电阻连接到电源电压,下拉电阻连接到地。当外部设备没有输出信号时,上拉或下拉电阻可以确保输入端的电平稳定,避免出现浮动状态。这样可以有效防止干扰和误操作,提高系统的稳定性和可靠性。

二、看门狗是什么?有什么作用?

看门狗(Watchdog)是一种用于监视和维护系统正常运行的硬件计时器。它的作用是在系统出现故障、死锁或其他异常情况时,对系统进行重启,以使系统恢复到一个可控状态。
看门狗通常由一个定时器和一个计数器组成。在系统正常运行时,软件需要周期性地喂狗(即向看门狗喂送信号),以防止看门狗计时器溢出。如果系统出现故障或软件停止响应,导致无法喂狗,计时器将会溢出,触发看门狗复位,强制系统重新启动,从而恢复到一个可控状态。
通过看门狗,可以提高系统的稳定性和可靠性,防止因软件死锁、死循环或其他异常情况导致系统无法正常工作

三、UART怎么进行一对多通信

1. 多路复用(Multiplexing):通过引入多路复用器(Multiplexer)或者软件实现多路复用的方式,将多个UART设备连接到同一个UART总线上。每个UART设备有一个唯一的地址或标识符,发送方根据接收方的地址选择要发送的数据。接收方根据地址识别数据的来源。

2. 总线结构建立一个UART总线结构,类似于总线系统,其中包含一个主设备和多个从设备。主设备负责控制总线的访问和数据传输,从设备根据主设备发送的命令或地址来响应或发送数据。

四、ARM中断处理流程?

当arm核(core)发生对应异常将做如下处理:
    1、cpsr拷贝到spsr
    2、修改cpsr
                进入ARM状态
                进入对应的异常模式
                禁止中断
    3、把pc保存到lr
    4、修改pc的值指向异常向量表
    
    程序员需要提前设置的内容:
    1、编写对应的异常向量表
    2、告诉ARM核异常向量表地址
    3、编写异常处理函数
                指定一个栈
                压栈保护(r0-r12 lr)
                处理异常
                异常返回
                            出栈(r0-r12 lr)spsr-->cpsr  lr-->pc

五、汇编里面调用C语言,参数的传递是什么样的,要注意那些地方?

首先必须要先设置栈sp前四个参数通过r0-r3传递,从第五个参数开始通过栈传递,C语言返回时,返回值会写到r0中。C语言代码如果是需要访问全局变量则需要添加volatile关键字

如果C语言部分是中断服务程序则需要注意不要使用线程不安全函数,比如printf,尽量避免使用引起阻塞的函数,另外该函数没有返回值

六、串口的一帧的数据格式是什么样的?串口出现了数据乱码有哪些原因?

串口通信中一帧数据通常包含以下几个部分

  1. 起始位:表示数据帧的开始,通常为逻辑低电平。
  2. 数据位:实际传输的数据位数,通常为8位,可以是5位、6位、7位或9位。
  3. 校验位:用于校验数据的正确性,可以是奇校验、偶校验、无校验等。
  4. 停止位:表示数据帧的结束,通常为逻辑高电平。

串口出现数据乱码的原因可能包括:

  1. 波特率不匹配:发送端和接收端的波特率设置不一致,导致数据接收错误。
  2. 数据位、校验位、停止位设置错误:发送端和接收端的数据位、校验位、停止位设置不一致,导致数据解析错误。
  3. 电气干扰:外部电磁干扰或信号线干扰导致数据传输错误。
  4. 缓冲区溢出:接收端处理数据速度不够快,导致缓冲区溢出,造成数据丢失或错位。
  5. 线路连接问题:串口线路连接不良或接触不良导致数据传输异常。

先检测配置是否正确,若配置正确可以再使用示波器查看线路中波型是否正确,也可以使用万用表查看线路问题。

七、IIC的时序图是什么样的?数据出现乱码的原因有哪些?

注意I2C每帧数据位为8位。I2C地址为7位

I2C(Inter-Integrated Circuit)的时序图通常包括以下几个部分:

  1. Start Condition:开始条件,SCL为高电平时,SDA由高变低表示开始条件。
  2. Address + R/W Bit:地址和读/写位,从器件地址后跟一个读/写位。
  3. Acknowledge Bit:应答位,主设备发送数据后,接收设备会发送一个应答位。
  4. Data Transfer:数据传输阶段,包括主设备发送数据、接收设备应答、接收设备发送数据等。
  5. Stop Condition:停止条件,SCL为高电平时,SDA由低变高表示停止条件。

I2C数据乱码可能的原因包括

  1. 时钟频率不匹配:主设备和从设备的时钟频率设置不一致,导致数据传输错误。
  2. 线路干扰:外部电磁干扰或信号线干扰导致数据传输错误。
  3. 地址设置错误:主设备发送的地址错误或从设备地址设置错误,导致数据传输混乱。
  4. 数据线连接问题:SDA线连接不良或接触不良导致数据传输异常。
  5. 应答错误:接收设备未正确应答或主设备未正确识别应答信号,导致数据传输错误。

电路相关知识

该部分主要是考察应聘者是否能够读懂电路图了解常见的元器件作用

一、三极管的导通方式与使用

三极管(晶体管)是通过控制基极电流来控制集电极和发射极之间的电流流动的。具体来说

  • NPN三极管导通:当NPN三极管的基极与发射极之间施加正向电压时,基极-发射极间的电压将使得基极-发射极间的电流增大,从而导致集电极-发射极间的电流增大,使得三极管导通。
  • PNP三极管导通:PNP三极管与NPN相反,当PNP三极管的基极与发射极之间施加负向电压时,基极-发射极间的电流将使得基极-发射极间的电流增大,从而导致集电极-发射极间的电流增大,使得三极管导通。

NPN和PNP三极管的使用如下

  • NPN三极管:常用于低电平控制高电平的电路中,例如开关、放大器等电路中。在NPN三极管中,基极与发射极之间施加正向电压时,三极管导通,否则截止。
  • PNP三极管:常用于高电平控制低电平的电路中,例如开关、放大器等电路中。在PNP三极管中,基极与发射极之间施加负向电压时,三极管导通,否则截止。

二、MOS管的用法

MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor)是一种场效应晶体管,常用于电子设备中。其功能和用法包括:

  1. 放大器应用:MOS管可以用于放大音频信号、射频信号等。
  2. 开关应用:MOS管可以用于电源管理、驱动器、电机控制等领域。
  3. 数字逻辑应用:MOS管可以用于构建逻辑门、存储器单元、微处理器等数字电路。

三、推挽开漏的原理

推挽开漏是一种常用的数字电路输出结构,通常用于驱动负载,如舵机、继电器等。推挽开漏结构由两个晶体管组成,一个是NPN型晶体管,另一个是PNP型晶体管。下面是推挽开漏结构的工作原理:

1. NPN型晶体管(上拉):NPN型晶体管的集电极连接到正电源,发射极连接到输出引脚,基极通过控制信号控制。当NPN晶体管导通时,输出引脚连接到正电源,输出为高电平。

2. PNP型晶体管(下拉):PNP型晶体管的集电极连接到负电源,发射极连接到输出引脚,基极通过控制信号控制。当PNP晶体管导通时,输出引脚连接到负电源,输出为低电平。

3. 工作原理:在推挽开漏结构中,当NPN晶体管导通时,输出为高电平;当PNP晶体管导通时,输出为低电平。通过控制这两个晶体管的导通与截止,可以实现输出引脚的高低电平切换,从而控制外部负载的通断。

4. 优点:推挽开漏结构具有较高的驱动能力和良好的抗干扰能力,适合驱动各种负载。

5. 应用:推挽开漏结构常用于需要控制电平切换的场合,例如驱动继电器、舵机、LED灯等。

推挽开漏结构通过NPN和PNP晶体管的组合,实现了对输出信号电平的有效控制具有较强的驱动能力和稳定性,适用于多种应用场合。

结语

编写该文章目的主要为想从事相关工作的同学找到一份好的工作,以上题目在面试中经常出现,如果有在外面试的朋友发现有更常见更经典的题目也可以私信告知,后续也会更新到博客当中。

如果有朋友想系统的学习嵌入式相关知识,从事相关的行业,可以私信我,有一些经典的电子档书籍资料和开源网课学习链接。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!