STM32面试常见问题大全
基础问题:
1.GPIO的工作模式:
①、浮空输入;②、上拉输入;③、下拉输入;④、模拟输入;
⑤、开漏输出;⑥、推挽输出;⑦、复用推挽;⑧、复用开漏。
2.推挽模式和开漏模式区别?
PP是推挽,OD是开漏,推挽是可以主动的输出高低电平
当输出高电平时:P-MOS导通,N-MOS截止,Vout被上拉到VDD
当输出低电平时:P-MOS截止,N-MOS导通,Vout被下拉到VSS
开漏输出只能输出低电平,P-MOS管一直截止,需要借助外部上拉电阻才能输出高电平。
3.输入上拉和下拉的区别?
上拉:通过一个电阻连接到VDD,将一个不确定的信号拉到高电平
下拉:通过一个电阻连接到VSS,将一个不确定的信号拉到低电平
4.介绍一下学过的定时器以及区别?
Systick(24位)系统节拍定时器 TIM定时器
区别:①SysTick是24位计数器,TIM一般是16位计数器②SysTick向下计数,TIM一般是向上计数,也能实现向下计数或者中心对齐③SysTick只能是不分频或者是8分频,TIM是1~65535分频 ④计数方式不同:SysTick将计数值给LOAD重装载值寄存器,LOAD将计数值给VAL当前值寄存器,VAL递减计数,计数减至0结束;TIM是将计数值给ARR自动重装载值寄存器,CNT递增计数,当CNT==ARR时计数结束时,输出电平无效,否则为有效。
PWM2模式:向上计数时,当TIMx_CNT > TIMx_CCR时,输出电平有效,否则为无效向下计数时,当TIMx_CNT < TIMx_CCR时,输出电平无效,否则为有效。
9.ADC的工作模式共有几种?
共有四种:单次 ;连续;扫描;不连续采样
10.ADC连续+扫描是否可以实现,若能,如何实现,若不能,为什么?
只靠ADC不能实现,需要结合DMA使用,必须选择DMA的循环模式, 因为一般使用的是ADC的规则转换,规则通道只有一个数据寄存器,连续+扫描只需要触发一次便可以连续不停的转换,会造成没有及时读走数据,数据会被覆盖。
11.STM32的时钟源有几个,分别是多少?
低速内部时钟LSI 32KHZ
高速内部时钟HSI 16M
5.描述一下中断的执行流程?
CPU正在执行当前程序,由于某个事件的发生产生了中断请求,导致CPU暂停当前程序执行,中断请求会经过中断通道到达NVIC,NVIC去调用专门的中断服务函数执行,执行完毕返回当前程序继续执行。
6.USART的特点以及数据帧格式?
USART特点:异步 串行 全双工
UART数据帧格式为:起始位(0有效)-数据位(8位)-校验位(奇偶校验)-停止位(1位)
7.通用定时器的功能有哪些?
基本定时功能 输入捕获 输出比较
8.输出比较的模式有几种?
模式共有8种,常用的是PWM1 PWM2
PWM1模式:向上计数时,当TIMx_CNT < TIMx_CCR时,输出电平有效,否则为无效向下计数时,当TIMx_CNT > TIMx_CCR
HZ
低速外部时钟LSE 32.768KHZ
高速外部时钟HSE 25MHZ
锁相环PLL 锁相环,本质是一个倍频器,功能是将输入的时钟进行倍频 PLL自己本身没有时钟,时钟是由HSI或者HSE提供
12.DMA的工作方式共有几种,它的作用是什么?
DMA的工作方式共有两种:正常和循环模式
DMA的作用是用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输可以在无需任何CPU操作的情况下通过DMA快速移动数据这样节省的CPU资源可供其它操作使用。
13.简述STM32的GPIO的一些主要特点(至少5个)?
①通用I/O,可以为每个I/O选择不同的速度,可以作为输出、输入等功能。
②单独的位设置或位清除。
③可以唤醒外部中断。
④复用功能(AF)和重映射。
⑤GPIO锁定机制,可冻结I/O配置。
14.SPI和IIC的区别?
①SPI是全双工,IIC是半双工
② IIC两根线 SPI四根线
③SPI通信速度一般是十几M,IIC三种 100k,400k,3.4M
④SPI无应答机制,IIC有应答机制
⑤SPI通过片选来选中从机,IIC广播地址寻址来确定从机
⑥IIC总线是多主机总线,SPI总线只有一个主设备
⑦SPI的时钟极性和时钟相位根据从机决定,IIC的时钟极性和时钟相位是固定的
15.SPI一共有几种模式如何确定使用哪一种?
00 模式0(空闲状态是低电平,从第一个边沿(上升沿)采样);
01 模式1(空闲状态是低电平从第二个边沿(下降沿)采样);
10模式2(空闲状态是高电平,从第一个边沿(下降沿)采样);
11 模式3(空闲状态是高电平,从第二个边沿(上升沿)采样)。
16.请介绍一下学过的存储芯片以及它们的区别?
EEPROM和flash区别
①使用flash需要擦除(留1)EEPROM不需要擦除
②flash 读写速度快 EEPROM读写速度慢
③flash 基于页编程EEPROM基于字节编程
④flash一般用作程序存储 EEPROM一般用作数据存储(重要的数据,用户的配置参数,传感器数据)
17.STM32启动流程?
①确定启动方式
② 初始化堆栈指针
③指向复位程序—Reset_Handler
④ 设置中断向量表
⑤ 设置系统时钟
⑥ 调用main函数
18.介绍一下STM32的下载方式?
ICP 在电路中编程 SWD JTAG
ISP 在系统中编程,借助MCU厂商预置的bootloader通过USB和UART烧录代码
IAP 在应用中编程 程序由用户自己编写
19.DMA和中断的区别是什么?
①DMA是硬件方式,中断是软件方式
②DMA不需要CPU参与,中断是需要CPU参与
③DMA只能搬运数据,中断可以处理一些其他事情
④DMA的优先级是要高于中断的,中断的优先级是要高于main的
20.USART发送大量数据如何保证数据的准确性?
硬件协议上,采用差分信号通信电平标准。
软件协议上,采取固定数据帧头数据帧尾、一位奇偶校验位的方式。
程序实现中,在USART发送过程中屏蔽请求IMR,提高数据传输的可靠性,可以防止数据传输过程中不会被其他中断打断,数据是连续传输的
采用硬件流控制
21.中断服务函数的特点?
无参 无返回值 不能被调用,不需要声明 尽量不要使用printf 中断执行时间不要太长
22.ROM和RAM的区别?
RAM掉电丢失 ROM掉电不丢失,可以保存原来的数据
RAM可以随机读写 ROM工作过程中只能读出
23.堆区和栈区的区别?
栈区是由系统自动分配释放,堆区是由程序员手动申请和释放的
栈区容量是要小于堆区的
栈区存放局部变量,函数参数,返回值,寄存器等,堆区存放内容是由程序员自己定义的
栈的生长方向向下,由高到低,连续的
堆的生长方向向上 由低到高 不连续的
24.MCU最小系统包含哪些部分?
晶振电路 复位电路 电源电路
25.IIC在传输过程中的三种类型信号?
起始信号 :SCL(串行时钟)保持高电平不变, SDA(串行数据)由高电平向低电平(考虑起始信号建立时间和起始信号保持时间)
停止信号:SCL保持高电平不变,SDA由低电平向高电平(需要考虑停止信号建立时间)
应答信号:在SCL保持高电平过程中:有效为0(低电平),无效为1(高电平)
26.头文件中的 ifndef/define/endif 干什么用?
作用是防止同一文件被多次包含,当头文件被多次包含时,预处理器会在第一次包含时定义这个宏,后续的包含就会跳过条件编译部分,从而避免了重复定义的错误,提高允许效率
27.堆栈溢出原因及解决办法?
指针或者数组访问内存越界;
局部数组申请内存空间太大;
递归 中断调用的层次太深;
申请动态内存后忘记释放。
野指针(指针非法访问)
解决办法:
①每次访问地址前,检查地址是否合法;
② 使用堆空间申请数组,或者使用动态内存分配;
③ 用循环代替递归,用时间换取空间;
④ 及时释放不再使用的动态空间。
28.F1芯片和F4芯片的区别?
①F1是cortex- M3的内核,F4是cortex-M4的内核。
②F4具有FPU浮点运算单元,F1没有
③F1主频最高72MHZ,F4最高168MHZ
④F4系列外设功能比F1系列更强,功耗相对更小
⑤F4的上下拉电阻对GPIO输出是有用的,F1的上下拉电阻针对GPIO输出没有用
29.定时器中影子寄存器的作用是什么?
影子寄存器的存在起到一个缓冲的作用TIMx_PSC、 TIM_ARR和TIMX_CCR寄存器,它们都可以动态修改,PSC的影子功能是一直开启的,ARR是可以设置ARPE位来选择是否开启,CCR可以选择OcxPE来选择是否开启。
30.定时器计数的三种方式是什么?
向下计数,向上计数,中心对齐(递增/递减)
31.描述0x12345678在大端和小端系统的内存布局?
大端模式:低地址存放数据的高位,高地址存放数据的低位
小端模式:低地址存放数据的低位,高地址存放数据的高位
0x12345678在大端模式下 0x12存储在低地址,0x78存储在高地址
0x12345678在小端模式下 0x12存储在高地址,0x78存储在低地址
32.机械按键使用时会存在抖动,常用的处理按键抖动的措施有哪些?
软件消抖:当检测到按键状态改变时,在代码中添加延时,等待抖动信号消失后再进行后续操作
硬件消抖:进行滤波,换一个性能好的
33.简述嵌套向量中断控制器(NVIC)的主要特性?
管理中断,中断分组 设置响应和抢占优先级 支持中断嵌套
34.介绍一下IIC的仲裁机制?
SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。主机拉高SDA后检测总线的状态:如果SDA线为高电平,主机可以拉低SDA去占用总线,如果SDA线为低电平,退出竞争。总线系统通过仲裁只允许一个主机可以继续占据总线。
35.ADC的触发方式有哪些?
通用定时器触发,
外部中断触发,
软件触发
36.简述输出比较的作用是什么?
通过时基单元 +输出比较,控制指定引脚输出特定波形(输出PWM波),并且波形的周期,占空比都是可控的。进而控制输出的的电平
37.const static修饰变量的作用是什么?
const是将变量声明为常量,常量的值声明后不能被修改。修饰只读
static是将变量声明为静态变量,存放在静态区,改变变量的生命周期,一直到程序结束才会被销毁。
在修饰全局变量和函数时,还会改变变量和函数的作用域,使得变量只能在被声明的文件中调用。
38.volatile register的作用是什么?
volatile提示编译器修饰的变量不要优化
register关键字修饰变量,把该变量放到寄存器中,这样可以提高cpu对该变量的访问速度
39.介绍一下STM32的位带操作?
STM32有两个位带区和两个外带别名区,分别是SRAM和片内外设,位带区是支持位带操作的,要想实现对位带区的位操作,需要对位带别名区对应地址的一个字进行操作。操作位带别名区的时候就等价于在操作位带区地址。
操作系统问题:
1.介绍一下学过的操作系统,什么是RTOS系统?
FreeRTOS:是以抢占优先级为主,时间片为辅实现任务调度的操作系统,包含一个实时任务调度器,这个任务调度器严格按照优先级来分配CPU时间,实现任务调度,使任务具有实时性.
2.FreeRTOS的实时性是如何实现的?
一个处理器核心在某一时刻只能运行一个任务,操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务。
实时操作系统中都要包含一个实时任务调度器,这个任务调度器严格按照优先级来分配CPU时间。
3.FreeRTOS的四种工作状态?
FreeRTOS的任务状态(4种)
1.运行态(Running) 2.就绪态(Ready) 3.阻塞态(Blocked) 4.挂起态(Suspended)
4.操作系统开发相比裸机开发的优点是什么?
①硬实时响应
基于优先级抢占的RTOS,根据任务的实时需求,执行优先调度。
②复杂度降低 并发执行效率高
RTOS允许应用划分为多个自主运行的任务。任务执行自己的上下文中,不依赖其它任务或调度器。
5.互斥信号量和二值信号量的区别是什么?
互斥信号量是一种特殊的二值信号量,互斥信号量的申请与释放是要在同一个任务中进行的,不能在一个任务中申请而在另一个任务中释放。二值信号量允许在一个任务中申请,在另外一个任务中释放。
6.队列和信号量的区别是什么?
队列可以容纳多个数据,创建队列有2部分内存:队列结构体,存储数据的空间
信号量只有计数值,无法容纳其他数据,创建信号量时,只需要分配信号量结构体
生产者:队列没有空间存入数据时可以阻塞
信号量不阻塞,计数值已经达到最大时,返回失败
7.介绍一下FreeRTOS的任务调度?
默认情况下,FreeRTOS使用固定优先级抢占式调度策略,并对同等优先级的任务进行循环时间切片:
任务创建完成之后,启动任务调度器,调度器就会使能SVC中断
跳转到第一个task的函数入口,之后退出中断就会执行第一个task了,在PendSV中断里保存当前任务的上下文,并切换到下一个优先级task。SysTick系统定时器基于中断产生节拍同时判断新加入的task优先级是否大于当前正在运行的优先级,如果是就置一个pdTRUE的标志位。调度器在每个节拍来确定是否进行调度,如果是pdTRUE则会启动pendSV中断在此中断里切换上下文调度到新的task。
作者:小杨一直在