stm32面试题总结

1.嵌入式系统中ROM、RAM、Register的概念和作用是什么?

  • ROM是只读存储器,断电后能保证数据不会丢失。(硬盘)
  • RAM是随机存储器,断电后数据会丢失.(内存)
  • Register是寄存器,用来暂时存放相关指令信息或数据信息的硬件设备。

2.嵌入式中断系统的概念、并举例说明终端执行过程?

        中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

3.STM32的IO可以配置成哪几种工作方式?

  • GPIO_Mode_AIN 模拟输入
  • GPIO_Mode_IN_FLOATING 浮空输入
  • GPIO_Mode_IPD 下拉输入
  • GPIO_Mode_IPU 上拉输入
  • GPIO_Mode_Out_OD 开漏输出
  • GPIO_Mode_Out_PP 推挽输出
  • GPIO_Mode_AF_OD 复用开漏输出
  • GPIO_Mode_AF_PP 复用推挽输出
     

4.介绍以下STM32启动过程?

  • 通过Boot引脚设定,寻找初始地址
  • 初始化栈指针 __initial_sp
  • 指向复位程序 Reset_Hander
  • 设置异常中断 HardFault_Handler
  • 设置系统时钟 SystemInit
  • 调用C库函数 _main

stm32面试题总结_第1张图片

 5.串行通信方式介绍?

  • 同步通信:I2C 半双工,SPI 全双工
  • 异步通信:RS485 半双工、RS232 全双工

6.串口设置的一般步骤可以总结为如下几个步骤:

  1. 串口时钟使能,GPIO时钟使能
  2. 串口复位
  3. GPIO端口模式设置:TX的GPIO工作模式为:GPIO_Mode_AF_PP;//复用推挽输出。RX的GPIO工作模式为:GPIO_Mode_IN_FLOATING;//浮空输入。
  4. 串口参数初始化:主要包含:波特率设置(115200)、8个数据位、1个停止位、无奇偶校验位、无硬件数据流控制、收发模式。
  5. 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
  6. 使能串口
  7. 编写中断处理函数7.在这里插入图片描述

7.USART主要特点?
        (1)全双工操作(相互独立的接收数据和发送数据);
        (2)同步操作时,可主机时钟同步,也可从机时钟同步;
        (3)独立的高精度波特率发生器,不占用定时/计数器;
        (4)支持5、6、7、8和9位数据位,1或2位停止位的串行数据桢结构;
        (5)由硬件支持的奇偶校验位发生和检验;
        (6)数据溢出检测;
        (7)帧错误检测;
        (8)包括错误起始位的检测噪声滤波器和数字低通滤波器;
        (9)三个完全独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;
        (10)支持多机通信模式;
        (11)支持倍速异步通信模式。


8.I2C 总线在传送数据过程中共有三种类型信号?
        (1)开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
        (2)结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
        (3)应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障


9.I2C配置主机模式端口该怎么配置?
        硬件模式:复用开漏输出、既不上拉也不下拉。(快速模式:400 Kbit/s)
        软件模拟:推挽输出、配置上拉电阻。

10.I2C仲裁机制?
        遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。
 

11.SPI需要几根线?

  • SPI 接口一般使用 4 条线通信:
  • MISO 主设备数据输入,从设备数据输出。
  • MOSI 主设备数据输出,从设备数据输入。
  • SCLK 时钟信号,由主设备产生。
  • CS 从设备片选信号,由主设备控制。

12.SPI通信的四种模式?
        SPI 有四种工作模式,各个工作模式的不同在于 SCLK 不同, 具体工作由 CPOL,CPHA 决定。

(1)CPOL: (Clock Polarity),时钟极性:

  • SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:
  • CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;
  • CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;
    stm32面试题总结_第2张图片

 (2)CPHA:(Clock Phase),时钟相位:
        相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。

  • 对于:CPHA=0,表示第一个边沿:

对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;

  • CPHA=1,表示第二个边沿:

对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;
对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;
stm32面试题总结_第3张图片

在这里插入图片描述

 13.该如何确定使用哪种模式?

  • 先确认从机需求的 SCLK 极性,不工作时是在低电位还是高电位,由此确认 CPOL 为 0 或 1。看原理图,我们设置串行同步时钟的空闲状态为高电平所以我们选择 SPI_CPOL_High。也就是CPOL为1
  • 再由slave芯片 datasheet 中的时序图确认 slave 芯片是在 SCLK 的下降沿采集数据,还是在SCLK的上升沿。
     

14.CAN总结介绍一下?
        CAN控制器根据 CAN_L 和 CAN_H上 的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者比居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

15.CAN初始化配置步骤?

  • 配置相关引脚的复用功能,使能CAN时钟
  • 设置CAN工作模式及波特率等(CAN初始化环回模式,波特率500Kbps )
  • 设置滤波器

16.CAN发送数据格式?

  • CanTxMsg TxMessage;
  • TxMessage.StdId=0x12; // 标准标识符
  • TxMessage.ExtId=0x12; // 设置扩展标示符
  • TxMessage.IDE=CAN_Id_Standard; // 标准帧
  • TxMessage.RTR=CAN_RTR_Data; // 数据帧
  • TxMessage.DLC=len; // 要发送的数据长度 发送8个字节
  • for(i=0;i
  • TxMessage.Data[i]=msg[i]; //数据
     

17.DMA介绍?
        直接存储器存取(DMA) 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

18.DMA传输模式有几种?

  • DMA_Mode_Circular 循环模式
  • DMA_Mode_Normal 正常缓存模式
  • 应用场景:GPS、蓝牙,都是用的循环采集,DMA_Mode_Circular模式。

19.描述一下中断的处理流程?
(1)初始化中断,设置触发方式是上升沿/下降沿/双沿触发。
(2)触发中断,进入中断服务函数

20.STM32的中断控制器支持多少个外部中断?
STM32的中断控制器支持19个外部中断/事件请求:GPIO 的管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0 ~ 15。
另外四个EXTI线的连接方式如下:

  • EXTI线16连接到PVD输出
  • EXTI线17连接到RTC闹钟事件
  • EXTI线18连接到USB唤醒事件
  • EXTI线19连接到以太网唤醒事件(只适用于互联型产品)

21.中断服务函数列表:
IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数。

  • EXTI0_IRQHandler
  • EXTI1_IRQHandler
  • EXTI2_IRQHandler
  • EXTI3_IRQHandler
  • EXTI4_IRQHandler
  • EXTI9_5_IRQHandler
  • EXTI15_10_IRQHandler
     

22.STM32有几个时钟源?
STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。

  • HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。
  • HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
  • LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。 
  • LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
  • PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
     

23.物联网的架构分为几层?每一层都负责哪些功能?
        分三层,物联网从架构上面可以分为感知层、网络层和应用层,

  1. 感知层: 负责信息采集和物物之间的信息传输,信息采集的技术包括传感器、条码和二维码、 RFID射频技术、音视频等多媒体信息,信息传输包括远近距离数据传输技术、自组织组网技术、协同信息处理技术、信息采集中间件技术等传感器网络。感知层是实现物联网全面感知的核心能力,是物联网中包括关键技术、标准化方面、产业化方面亟待突破的部分,关键在于具备更精确、更全面的感知能力,并解决低功耗、小型化和低成本的问题。
  2. 网络层: 是利用无线和有线网络对采集的数据进行编码、认证和传输,广泛覆盖的移动通信网络是实现物联网的基础设施,是物联网三层中标准化程度昀高、产业化能力昀强、昀成熟的部分,关键在于为物联网应用特征进行优化和改进,形成协同感知的网络。
  3. 应用层: 提供丰富的基于物联网的应用,是物联网发展的根本目标,将物联网技术与行业信息化需求相结合,实现广泛智能化应用的解决方案集,关键在于行业融合、信息资源的开发利用、低成本高质量的解决方案、信息安全的保障以及有效的商业模式的开发。
     

24.简述设置系统时钟的基本流程?

  1. 打开HSE,等待就绪后,设置Flash等待操作。
  2. 设置AHB,APB1,APB2分频系数,确定他们各自和系统时钟的关系。
  3. 设置CFGR寄存器确定PLL的时钟来源和倍频系数(HSE外部8M*9倍=72MHz)。
  4. 使能PLL,将系统时钟源切换到PLL.
     

25.如果是两个优先级相同的任务怎么运行?

        使获得信号量任务的优先级在使用共享资源期间暂时提升到所有任务最高优先级的高一个级别上,以使该任务不被其他任务所打断,从而能尽快地使用完共享资源并释放信号量,然后在释放信号量之后,再恢复该任务原来的优先级别。

26.Cortex-M3 的存储空间可以分为哪几个部分,每一部分的地址范围是怎样的?
        程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内,Cortex-M3最大支持4GB的存储空间,但在实际的不同STM32不一样;

  1. 在0xE0000000到0xFFFFFFFF的512MB的地址存储空间是用于NVIC、MPU及调试组件等使用;
  2. 在0xA0000000到0xDFFFFFFF的1GB的地址存储空间是用于片外外设扩展;
  3. 在0x60000000到0x9FFFFFFF的1GB的地址存储空间是用于扩展片外存储器;
  4. 在0x40000000到0x5FFFFFFF的512MB的地址存储空间是用于片上外设;
  5. 在0x20000000到0x3FFFFFFF的512MB的地址存储空间是片上SRAM;STM32F103VET处理器64kB,起始地址是0x20000000到0x20010000。
  6. 在0x00000000到0x1FFFFFFF的512MB的地址存储空间是代码区;STM32F103VET处理器512kB,起始地址是0x80000000到0x1FFFFFFF。
     

27.基于 CMSIS 标准的软件架构分为那几层?其中的 CMSIS 层一般由哪几部分组成?
        基于CMSIS标准的软件架构主要分为以下四层:用户应用层,操作系统层,CMSIS层以,硬件寄存器层。
        其中CMSIS层起着承上启下的作用,一方面该层对硬件寄存器层进行了统一的实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义,另一方面又向上层的操作系统和应用层提供接口,

28.DAC有两个寄存器,一个是DHR(Data HoldingRegister)数据保持寄存器,一个DOR(Data Output Register)数据输出寄存器。真正起作用的是DOR寄存器,该寄存器把值给数模转换发生单元输出以VREF+为参考电压的电压值。如果是硬件触发转换,系统将在1个ABP时钟周期后把值给DOR,如果是软件触发转换,时间为3个APB时钟周期。然后,均等待Tsetting时间(Typical为3us,Max为4us)后真正输出电压值。

29.下载程序:

  • 一种为ICP(在线编程),适用于JTAG或SWD协议下的烧写程序。
  • 另一种成为IAP(在应用编程),适用于很多接口(USB,串口,CAN)下载到存储器中,IAP允许在程序运行时重新烧写FLASH。

30.内部上下拉电阻的设置:

        如果外部的按键另一头接地,那么需要设置成上拉电阻。(理由是当没有按下按键时,由于上拉,输入为高电平;按下时,由于外部接地,输入为低电平。)同理,如果外部的按键另一头接高电平,那么需要设置成下拉电阻。

31.串口中断TXE和TC的区别:

        其实很明显,一个是发送寄存器空标志,一个是发送完成标志。因为串口在发送的时候首先需要把发送寄存器中的数据移位到移位寄存器(影子寄存器)后再串行发送出去。所以当发送寄存器DR空时说明现在可能正在往外面发送数据,数据可能还没有发送完。但是发送完成不一样,他是在移位寄存器将本次数据全部移位完成后设置的标志位(也就是发送完了停止位)。这么看来:TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。TC可以让程序知道发送结束的确切时间,有利于程序控制外部数据流的时序。

32.定时器中断溢出更新时间:Tout=((arr+1)*(psc+1))/Tclk,ARR为自动装载寄存(1~65535)、PSC为分频系数,TCLK为输入时钟频率(Mhz)。

33.PWM1和PWM2模式的区别仅在于相位的180度。前者高电平时,后者低电平。

34.定时器输入捕捉有一个滤波器,顾名思义滤波器起到的就是滤波的作用,在捕捉外部信号时,信号可能不稳定,此时需要滤波:当检测到有外部输入时,需要再连续采样N次如果确定为高电平/低电平,则触发响应中断(如果开启了的话)。

35.常用的汉字内码系统有GB2313、GB13000、GBK、BIG5(繁体)。其中GB2313只有几千个汉字,而GBK则有2万多汉字。

你可能感兴趣的:(单片机,嵌入式硬件)