STM32常见面试题及答案解析

一、STM32F1和F4的区别?

内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;
主频不同:F1主频72MHz,F4主频168MHz;
浮点运算:F1无浮点运算单位,F4有;
功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等;
内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)。

二、介绍一下GPIO模式

  • 1. GPIO_MODE_AIN 模拟输入:I/O端口模拟信号(电压信号,非电平信号)直接模拟输入到片上外设模块。
  • 2. GPIO_MODE_IN_FLOATING 浮空输入:上下拉电阻开关断开,输入信号只经过施密特触发器进行滤波,然后再被读出。
  • 3. GPIO_MODE_IPD 下拉输入:与上拉相同,只是把IO下拉为低电平。
  • 4. GPIO_MODE_IPU 上拉输入:上拉就是将IO口上不确定的信号通过一个上拉电阻把IO上拉为高电平。电阻同时起限流作用。
  • 5. GPIO-MODE_OUT_OD 开漏输出: P-MOS管不工作,只有N-MOS管工作,MCU只能控制输出低电平。
  • 6. GPIO_MODE_OUT_PP 推挽输出:P-MOS管和N-MOS管都工作,MCU可以控制输出高电平和低电平。
  • 7. GPIO_MODE_AF_OD 复用开漏输出: GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。
  • 8. GOIO_MODE_AF_PP 复用推挽输出:GPIO复用为其他外设,输出数据寄存器GPIOx_ODR无效, 输出的高低电平的来源于其它外设。
  • stm32当中GPIO输出知识点汇总(GPIO的八种模式及其原理)_向阳菌的博客-CSDN博客

    GPIO的使用

    1.使能时钟:RCC APB2RSTR寄存器 HAL_RCC_GPIOC_CLK ENABLE();
    2.设置工作模式;
    3.设置输出状态:ODR,BSRR。

    总结:

  • 浮空输入:为了降低功耗;
  • 上下拉:钳位电平,增强驱动(电流增大),抗干扰;
  • 模拟输入就是模拟电信号,如ADC;
  • 开漏输出:通常情况下只能输出0,但是能完美的兼容不同外设电平;
  • 复用开漏输出:复用表示IO不在是普通IO,而是具有特殊功能的IO,比如SPI,UART等;
  • 推挽输出:是为了提高驱动能力。
  • stm32输入输出模式的选择和区别_有种放学别跑啊的博客-CSDN博客

    三、串口配置步骤

    (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)编写中断处理函数

    四、I2C

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

    I2C仲裁机制?

    I2C 允许多个主设备和多个从设备。如果两个或两个以上的主设备同时向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是 I2C 总线上的仲裁。

    I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。简单说,它遵循“低电平优先”的原则,即谁先发送低电平谁就会掌握对总线的控制权。

    I2C总线仲裁机制_i2c仲裁机制_艾特号的博客-CSDN博客

    五、该如何确定使用哪种SPI模式?

    (1)先确认从机需求的 SCLK 极性,不工作时是在低电位还是高电位,由此确认 CPOL 为 0 或 1。

    (2)再由slave芯片 datasheet 中的时序图确认 slave 芯片是在 SCLK 的下降沿采集数据,还是在SCLK的上升沿。

    六、时钟系统

    在STM32中,有五个时钟源,为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。
     

    七、简述STM32的ADC系统的功能特性?

    (1)12bit分辨率
    (2)自动校准
    (3)可编程数据对齐(转换结果支持左对齐或右对齐方式存储在16位数据寄存器)
    (4)单次和连续转换模式

    八、简述一下STM32中断有哪些?

    外部中断、定时器中断、DMA中断、UART中断、SPI中断、I2C中断、USB中断、ADC中断。

    九、ARM v7的体系结构可以分为哪几个子版本(款式),分别应用在什么领域?

    A,R,M三种。
    Contex-A系列面向密集型系统的应用处理器内核。顶级主控,在手机,平板,GPS普遍应用,移动设备芯片90%都是使用arm。与arm9和arm11相对应,都是可以跑操作系统系统的如linux等。
    Contex-R系列面向实时应用的高性能内核。主要应用于对实时性较高的场合,如硬盘控制器、车载控制产品等。
    Contex-M系列面向各类嵌入式应用的微控制器内核(相当于高级单片机)。主要应用工业、消费领域。与arm7相似,不能跑大操作系统(只能跑类似uCos2实时操作系统)

    十、你用过STM32有哪些型号?内部资源情况?

     嵌入式工程师面试题集-MCU_STM32_mcu面试题_匠在江湖的博客-CSDN博客

    十一、Systick滴答定时器

    SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的COUNTFLAG 标志会置位,触发中断 (如果中断使能情况下)。

    假设系统时钟为 72Mhz,那么 SysTick 每增加 1,就是 1/9us。注:系统72MHz 8分频。

    十二、NVIC 中断优先级管理 

    CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256级的可编程中断设置。但 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。STM32 有 84 个中断,包括 16 个内核中断和 68 个可屏蔽中断,具有 16 级可编程的中断优先级。而我们常用的就是这 68 个可屏蔽中断,但是 STM32 的 68 个可屏蔽中断,在 STM32F103 系列上面,又只有 60 个(在 107 系列才有 68 个)。

    STM32 将中断分为 5 个组,组 0~4。

     这里需要注意两点:

    第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;

    第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。

    十三、使用 IO 口外部中断的一般步骤

    1.初始化 IO 口为输入。
    2.开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
    3.初始化线上中断(EXTI),设置触发条件等。
    4.配置中断分组(NVIC),并使能中断。
    5.编写中断服务函数。

    十四、定时器配置步骤

    1.使能定时器时钟。调用函数:RCC_APB1PeriphClockCmd();
    2.初始化定时器,配置ARR、PSC。调用函数:TIM_TimeBaseInit();
    3.开启定时器中断,配置NVIC。调用函数:void TIM_ITConfig();NVIC_Init();
    4.使能定时器。调用函数:TIM_Cmd();
    5.编写中断服务函数。调用函数:TIMx_IRQHandler()。

    十五、其他内容

    1、为什么CPU不能直接从硬盘读取数据,却要先经过内存

    CPU 不能直接从硬盘读取数据的原因是因为硬盘和 CPU 之间存在着速度上的巨大差异。硬盘是一种机械设备,需要时间来旋转磁盘和移动读写头,才能够读取或写入数据。相比之下,CPU 的处理速度非常快,可以在纳秒级别内完成一次指令的执行。因此,如果 CPU 直接从硬盘读取数据,会导致 CPU 的处理速度受到硬盘速度的限制,从而大大降低系统的整体性能。

    2、CPU 内存 虚拟内存 磁盘/硬盘 的关系

    CPU对数据进行判断以及逻辑处理,本身不能存储数据,这时cpu从内存取数据进行逻辑计算,如果内存没有数据,才会从硬盘读数据到内存,再对数据进行处理。

    就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅!

    当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加,系统态sy%提升,cpu开销增加;内存里数据不够用,才用磁盘中取数据。

    3、CPU内部结构

    CPU:即中央处理器,是一台计算机的运算核心和控制核心。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器、寄存器、高速缓存及实现它们之间联系的数据、控制及状态的总线构成;
    存储器:分为外存和内存, 用于存储数据(使用二进制方式存储);
    输入设备:用户给计算机发号施令的设备;
    输出设备:计算机个用户汇报结果的设备。

    4、波特率是什么,为什么双方波特率要相同,高低波特率有什么区别

    通信中的波特率:指的是每秒钟传输的比特数,也就是通信速率。

    在通信过程中,波特率是指每秒传输的比特数。如果双方的波特率不同,那么发送方和接收方之间就会出现数据传输速率不匹配的问题。

    具体来说,如果发送方的波特率比接收方的波特率高,那么发送方发送的数据可能会比接收方能够处理的速度更快,导致数据丢失或传输错误。如果发送方的波特率比接收方的波特率低,那么接收方可能无法及时接收到所有的数据,导致数据传输效率低下或者数据丢失。

    高波特率意味着每秒传输的比特数更多,数据传输速率更快。

    高波特率下,由于传输速率增加,信号上升沿和下降沿变化更快,导致传输距离较低波特率要受限一些。

    5、ROM、RAM的概念

    ROM:只读存储器。优点:容量大,掉电不丢失;缺点:读取速度慢。事实上,“只读”定义不准确,如手机的8+128G。这里8指的是RAM;128指的是ROM。而这里的ROM是flash,如EMMC、UFS、NAND flash都可以进行写操作(擦除–>发送要写地址或扇区–>写数据)。由于历史原因,flash仍被称为ROM。

    RAM:随机存储器。优点:速度快,直接与CPU通信;缺点:掉电丢失,容量小。
    浅析嵌入式开发中的RAM和ROM_嵌入式ram和rom_CinzWS的博客-CSDN博客

    6、扇区、块、页、簇的概念

    嵌入式100题(85):扇区 块 页 簇的概念_角色人生的博客-CSDN博客

    扇区硬盘的最小寻址单元(像硬盘一样的外部存储设备的最小查找部分,即“拿硬盘”的时候,一次最少“拿”一个扇区);
    块 / 簇:由于扇区的空间比较小且数目众多,在寻址时比较困难,所以操作系统就将多个的扇区组合在一起,形成一个更大的单位,再对这个单位进行整体的操作。这个单位,在Windows下,FAT,FAT32和NTFS 文件系统中叫做簇(cluster);在Linux下如Ext4等文件系统中叫做块(block)。每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。
    :对操作系统来说的最小基本单元。

    综上所述,文件读取时的最小单位是块。扇区是对硬盘而言,磁盘块是对文件系统而言。所以文件系统操作文件的最小单位是块,而磁盘的基本单位是扇区。

    而操作系统与内存打交道时才有了页的概念,因为如果采用内存的分页机制,内存被分为大小为4K的页面。也是一种虚拟单位。

    综上:操作系统操作内存是以页为基本单位、文件系统操作磁盘是以块为基本单位,而磁盘自身读写是以扇区为基本单位。
    linux下扇区、块、页的区别+inode与高速缓冲区在linux文件系统的作用_linux 块设备 块 扇区_西邮小菜机的博客-CSDN博客

    十六、参考内容

    嵌入式面试知识点总结 — STM32篇_stm32编程题_聚优致成的博客-CSDN博客

    全网最全的MCU面试经(基于STM32F103)_mcu面试题_十六师兄的博客-CSDN博客

    STM32-面试题及答案_stm32单片机答辩问题_飞奔的小牛的博客-CSDN博客

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32常见面试题及答案解析

    发表评论