STM32常见面试题

news2024/12/26 21:25:17

一、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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【无标题】vue中表单绑定v-model

表单绑定v-model 表单控件在实际开发中是非常常见的。特别是对于用户信息的提交,需要大量的表单。 Vue中使用v-model指令来实现表单元素和数据的双向绑定。 案例的解析: 当我们在输入框输入内容时 因为input中的v-model绑定了message,所以会…

Vue-搭建Vuex开发环境

1 安装Vuex 安装之前需要了解一个版本问题,在vue2中,要用vuex的3版本,在vue3中,要用vuex的4版本,要严格遵循这个版本要求,不然就会出现各种意想不到的问题,例如下方安装报错,就算因…

ubuntu修改应用图表|任务栏收藏|快捷方式|收藏夹

需要知道应用程序对应的.desktop文件的位置,然后使用sudo gedit打开。修改对应位置的信息就可以了。 参考:Linux下Desktop文件入门 1.desktop文件位置 一般存放在/usr/share/applications这个位置里面。 以vscode为例,使用sudo gedit code…

POJ - 2287 Tian Ji -- The Horse Racing

题目来源 2287 -- Tian Ji -- The Horse Racing (poj.org) 题目描述 田忌赛马是中国历史上一个著名的故事。 这个故事发生在2300年前,田忌是齐国的一个大官,他喜欢和齐王以及其他公子赛马。 田忌和齐王都有三类马,分别是下等马&#xff0…

1750_使用gcc对嵌入式代码控制逻辑进行测试

全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com) 相信很多人的C语言学习是从printf开始的,为了验证我们的程序代码运行结果,我们通常会选择使用printf打印出我们计算的结果看一下是否与预期一致。到了嵌入式软件开发&#…

web前端工程师个人简历编写(附详细代码)

web前端工程师 h5css3完成简历编写,效果如下: 底部附有详细代码编写 编写Web前端工程师个人简历时,需要注意以下几点: 简洁明了:简历应该简洁明了,内容要点突出,避免冗长和废话。用简洁的语言…

Boost的介绍、安装与环境配置

文章目录 一、Boost库简介二、Boost的安装与编译(一)下载解压(二)编译静态库 三、配置VS环境四、其它环境的配置(vscode、DevC)(一)在DEVC中配置使用boost库的环境(二&am…

java: 程序包javax.servlet.http不存在

问题描述 当项目从2.7.x的springboot升级到3.0.x的时候,遇到一个问题“java: 程序包javax.servlet.http不存在” 。这可能是一些包的精简变化导致的。错误信息如下: 错误代码段 package com.softdev.system.generator.config;import com.softdev.system…

深度学习-ubuntu18.04+RTX3080+cuda11.2+cudnn8.1.0下安装polarstream全纪录

1、安装 创建一个python3.7的虚拟环境 conda create --name polarstream python3.7 激活虚拟环境 source activate polarstream以下操作均在虚拟环境中进行 安装与cuda和python版本对应的torch版本,参考https://blog.csdn.net/didadifish/article/details/12748…

【软件设计师暴击考点】操作系统知识高频考点暴击系列【二】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

栈的应用——括号匹配、表达式求值、递归

目录 一、栈在括号匹配中的应用逻辑实现代码实现 二、栈在表达式求值中的应用手算实现代码实现 三、栈在递归中的应用逻辑实现代码实现 一、栈在括号匹配中的应用 括号匹配,顾名思义。若括号按照正确的格式嵌套,则可正确匹配,例如([])&#…

scratch lenet(12): LeNet-5输出层和损失函数的计算

文章目录 1. 目的2. 输出层结构2.1 Gaussian Connection2.2 Gaussian Connection 的 weight 可视化 3. Loss Function3.1 当前类别判断错误时,loss function 中的项(基本项)3.2 判断为其他类别时, loss function 中的项&#xff0…

Spring发展历程及其体系结构

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Spring 目录 发展历程体系结构 发展历程 体系结构 Spring框架的体系结构的主要组成部分: 核心容器…

idea如何集成Tomcat

(1)、这里应该找Add Configuration点击这里:如果没有标志,点击Exit (2)、这里可以配置一个配置项: (3)、loacl是本地,那个是远程:这里我选择本地 (4&#xff…

代码随想录算法训练营第四十二天 | 01背包理论基础,01背包理论基础(滚动数组),416. 分割等和子集

代码随想录算法训练营第四十二天 | 01背包理论基础,01背包理论基础(滚动数组),416. 分割等和子集 1.1 01背包理论基础 01背包 回溯法:暴力的解法是o(2^n)指数级别的时间复杂度,需要动态规划的解法来进行优…

如果你曾经拥有python,那么现在你应该拥抱Julia吗?

看完本文,您就会有较成熟的想法。 Julia和Python的区别是什么?为什么Julia适合用于大规模计算和超级计算机模拟? 你一定听说过Julia和Python这两个编程语言。虽然它们都可以用于从简单的机器学习应用程序到巨大的超级计算机模拟的所有方面&am…

Gradio的Audio组件介绍

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

ImGUI项目建立(cmake+MinGW64)

Dear ImGUI ImGui是一个轻量级的C图形界面库,它可以用于创建各种交互式的工具和编辑器。具有跨平台、高性能的特点。 ImGUI自身不能创建窗口,需要使用Win32API或glfw或SDL等工具来创建窗口,另外需要使用OpenGL或DirectX、vulkan用于渲染图形…

excel数据的编排与整理——表格结构的整理(一)

excel数据的编排与整理——表格结构的整理(一) 1 快速移动一列数据到指定位置 1.1 移动到相邻行 1.1.1 题目内容 1.1.2 选中年龄列➡移动到左侧直到出现十字箭头 1.1.3 按下shift键和左键➡移动到指定位置,直到出现"T"字形 1.1.4 松开鼠标左键后,移动就完成了 1.2…

Debian 12中安装Rstudio

1.Debian 12中安装R 打开终端,执行命令:#apt search r-base (注:此图为安装r-base后再来截图的),Debian 12官方源中默认为r-base 4.2.2,如果想安装最新版(当前最新版为R-4.3.0),可参考上次写的博文“Debi…