赞
踩
该文章只针对面试时面试官提问如何回答的更全更好,看此文章没有讲解太多太细节的知识点。如果知识点本身不会,背诵此文章可能能让你找到一份工作,但不能让你持续的干下去。还是需要自身精通对应知识点。
该文章适合有学习过ARM框架与STM32单片机的朋友阅读,主要是针对本科应届生。收录了二十道近几年非常经典的ARM与STM32面试题。
配合阅读 C语言常见笔试题 与 C语言常见面试题 更容易帮您找到一份单片机相关开发工作
该部分涉及一些知识要点,主要是面试官考察应聘者是否了解底层开发,是否了解相关基础知识概念
ARM内核主要分为三类,Cortex-A,Cortex-R,Cortex-M三种,A代表Applications,向用户提供全方位解决方案,主要用于复制的应用场合,比如智能手机、移动计算平台,数字电视、机顶盒、打印机或服务器等。R代表Real-Time Embedded,主要用于实时应用的系统,面向深层嵌入式实时应用,对低功耗、良好的中断行为、卓越性能以及与现有平台的高兼容性这些需求进行了平衡考虑,比如摄像机、智慧汽车等。M代表MCU & FPGA,面向具有确定性的微控制器应用的成本敏感型解决方案,主要是针对微控制器领域开发的,在该领域中,既需进行快速且具有高确定性的中断管理,又需将门数和可能功耗控制在最低,例如玩具,电子手表、音响、游戏手柄等设备。
User----用户模式
System----系统模式
Abort----数据访问中止异常
Undef----未定义指令异常
FIQ----快速中断
IRQ----外部中断
Supervisor----特权模式
Monitor----监控模式 安全模式(A系列独有)
除了用户模式都属于特权模式,其中安全模式级别更高一些
除了用户、系统、安全模式都属于异常模式
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、按键、传感器等。
这些部分组成了单片机最小系统的基本框架,可以根据具体需求和应用场景进行扩展和定制。
I2C(Inter-Integrated Circuit):是一种串行通信总线协议,用于连接微控制器和外部设备,支持多主机和多从机通信,属于半双工同步通信。
UART(Universal Asynchronous Receiver-Transmitter):是一种通用的异步串行通信接口,用于在设备之间传输数据,常用于串口通信。
SPI(Serial Peripheral Interface):是一种同步串行通信接口,用于短距离高速数据传输,支持全双工通信,常用于连接外围设备。
RS-485:是一种串行通信标准,用于远距离通信和多点通信,支持半双工通信,为差分信号,使用双绞线通信,具有抗干扰能力。
RS-232:是一种串行通信标准,用于短距离通信,支持全双工通信,常用于连接计算机和外部设备。
HAL代表Hardware Abstraction Layer,意为硬件抽象层,是一种软件层次结构,用于将底层硬件操作与上层应用程序分离,提供统一的接口和抽象,使得应用程序可以更方便地与硬件进行交互,同时实现跨平台和可移植性。HAL库通常用于嵌入式系统开发中,帮助开发人员简化硬件操作和提高代码的可维护性
地址线有14根,数据线有32根
16k是2的14次方,地址线数量为14根
数据线宽度为32位,表示每次可以传输32位的数据
磁盘(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控制器、以太网控制器。
在STM32F407芯片中,FLASH存储器大小为1MB,RAM的大小为192KB,总线架构为多总线架构
补充1:
在STM32G030与STM32F051芯片中,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口的输入端,它们的作用是在没有外部信号输入时,通过引入一个预定的电平来确保输入端的电平状态。上拉电阻连接到电源电压,下拉电阻连接到地。当外部设备没有输出信号时,上拉或下拉电阻可以确保输入端的电平稳定,避免出现浮动状态。这样可以有效防止干扰和误操作,提高系统的稳定性和可靠性。
看门狗(Watchdog)是一种用于监视和维护系统正常运行的硬件计时器。它的作用是在系统出现故障、死锁或其他异常情况时,对系统进行重启,以使系统恢复到一个可控状态。
看门狗通常由一个定时器和一个计数器组成。在系统正常运行时,软件需要周期性地喂狗(即向看门狗喂送信号),以防止看门狗计时器溢出。如果系统出现故障或软件停止响应,导致无法喂狗,计时器将会溢出,触发看门狗复位,强制系统重新启动,从而恢复到一个可控状态。
通过看门狗,可以提高系统的稳定性和可靠性,防止因软件死锁、死循环或其他异常情况导致系统无法正常工作。
1. 多路复用(Multiplexing):通过引入多路复用器(Multiplexer)或者软件实现多路复用的方式,将多个UART设备连接到同一个UART总线上。每个UART设备有一个唯一的地址或标识符,发送方根据接收方的地址选择要发送的数据。接收方根据地址识别数据的来源。
2. 总线结构:建立一个UART总线结构,类似于总线系统,其中包含一个主设备和多个从设备。主设备负责控制总线的访问和数据传输,从设备根据主设备发送的命令或地址来响应或发送数据。
当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
首先必须要先设置栈sp,前四个参数通过r0-r3传递,从第五个参数开始通过栈传递,C语言返回时,返回值会写到r0中。C语言代码如果是需要访问全局变量则需要添加volatile关键字。
如果C语言部分是中断服务程序则需要注意不要使用线程不安全函数,比如printf,尽量避免使用引起阻塞的函数,另外该函数没有返回值。
串口通信中一帧数据通常包含以下几个部分:
串口出现数据乱码的原因可能包括:
先检测配置是否正确,若配置正确可以再使用示波器查看线路中波型是否正确,也可以使用万用表查看线路问题。
注意I2C每帧数据位为8位。I2C地址为7位
I2C(Inter-Integrated Circuit)的时序图通常包括以下几个部分:
I2C数据乱码可能的原因包括:
该部分主要是考察应聘者是否能够读懂电路图,了解常见的元器件作用
三极管(晶体管)是通过控制基极电流来控制集电极和发射极之间的电流流动的。具体来说:
NPN和PNP三极管的使用如下:
MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor)是一种场效应晶体管,常用于电子设备中。其功能和用法包括:
推挽开漏是一种常用的数字电路输出结构,通常用于驱动负载,如舵机、继电器等。推挽开漏结构由两个晶体管组成,一个是NPN型晶体管,另一个是PNP型晶体管。下面是推挽开漏结构的工作原理:
1. NPN型晶体管(上拉):NPN型晶体管的集电极连接到正电源,发射极连接到输出引脚,基极通过控制信号控制。当NPN晶体管导通时,输出引脚连接到正电源,输出为高电平。
2. PNP型晶体管(下拉):PNP型晶体管的集电极连接到负电源,发射极连接到输出引脚,基极通过控制信号控制。当PNP晶体管导通时,输出引脚连接到负电源,输出为低电平。
3. 工作原理:在推挽开漏结构中,当NPN晶体管导通时,输出为高电平;当PNP晶体管导通时,输出为低电平。通过控制这两个晶体管的导通与截止,可以实现输出引脚的高低电平切换,从而控制外部负载的通断。
4. 优点:推挽开漏结构具有较高的驱动能力和良好的抗干扰能力,适合驱动各种负载。
5. 应用:推挽开漏结构常用于需要控制电平切换的场合,例如驱动继电器、舵机、LED灯等。
推挽开漏结构通过NPN和PNP晶体管的组合,实现了对输出信号电平的有效控制,具有较强的驱动能力和稳定性,适用于多种应用场合。
编写该文章目的主要为想从事相关工作的同学找到一份好的工作,以上题目在面试中经常出现,如果有在外面试的朋友发现有更常见更经典的题目也可以私信告知,后续也会更新到博客当中。
如果有朋友想系统的学习嵌入式相关知识,从事相关的行业,可以私信我,有一些经典的电子档书籍资料和开源网课学习链接。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。