嵌入式面试经典30问与非标准答案

原问题见

https://blog.csdn.net/xydlxd118/article/details/105707499

1. 讲一下stm32的时钟系统

时钟在MCU中的作用,就好比于人类的心脏一样不可或缺。STM32有多个时钟源可以使用。因为STM32拥有丰富的外设资源,不同外设使用的时钟也会不一样,同时我们要知道时钟越快,功耗就越大,抗电磁干扰的能力就会减弱,因此,比较复杂的MCU 都会采用多时钟来解决这些问题。

STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统时钟或者用作PLL时钟输入。

②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。

③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。

④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。作为RTC时钟;

⑤、PLL为锁相环倍频输出。提供2-16倍的倍频输出。

2. C语言中堆和栈的区别;推挽输出是什么?

C语言中堆和栈的区别:
  1. 申请方式
  • 栈(satck):由系统自动分配。
  • 堆(heap):需程序员自己申请和释放。
    // 待补充
32单片机IO口8种状态的理解

1、浮空输入,据我的理解,就是不接上拉,也不接下拉,外部电路是什么状态,就是什么状态,具有不确定性。
2、上拉输入,就是配置好IO口后,默认与VDD相连的开关闭合,读状态默认高电平,外部有低电平才拉低。
3、下拉输入,与上拉输入一个意思。
4、模拟输入,这个我没用到,也不太理解,套用一下前辈的话:模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。

5、开漏输出:据我的理解就是要加上拉电阻,才能拿到低电平,(nmos管为0时,才接通),外部的上拉电阻的高电平拉到了Gnd,默认输出高电平。
6、推挽输出:配置后,输出1,PMOS管接通,外输出高点平,输出0,NMOS管接通,外输出低电平,输出1.
7、推挽复用输出
8、开漏复用输出
复用功能就是外设的配置。

引用CSDN博主「持续学习中」的原创文章:关于32单片机IO口8种状态的理解

3. 假如一个单片机上电之后不运行?这是为什么?

1、检查供电:直接用万用表测量VCC和GND的电平,是否符合要求。如果VCC偏离5V或3.3V过多,检查7805或其他稳压、滤波电路的输出。

2、检查晶振:一般是多换几个晶振上电试试。

3、检查RESET引脚电平逻辑,注意所用机型是高电平复位还是低电平复位的,防止MCU一直处于反复被复位状态。

4、如果设计时,程序是从扩展的外部ROM开始运行的,还需检查EA脚。

5、检查MCU是否损坏或flash无法下载,最好换块新的芯片试试。

6、如果测试程序运行正常。那就基本确定是控制程序的问题了。

个人经验:首先检查MCU供电是否正常,再判断擦除和烧录是否正常,再判断控制程序是否正常,一般情况下3、4不会出现,对于STM32来说可以换内部晶振来排除2。

4. 举你用过的单片机的型号和它的一些主要参数

STM32F103VCT6

内核
-ARM 32位 Cortex - M 3处理器
-高达72 MHz
内存
-256 KB 的 Flash
-48 KB 的 SRAM
3个12位AD,外部通道16个,内部通道2个
7个通道DMA
8个定时器
12个通信接口
-2个 I 2 C 接口
-5 个 UART
-3 个 SPI
-1 个 USB
-1 个 CAN
内置 CRC 计算单元,和96位唯一的 ID 号
具体请参考数据手册。

5. 一个温度传感器模块,按照正确的使用方式和参数指标,对人体皮肤测量之后,得到的温度一直都是35摄氏度,这是为什么?

猜一个:因为该温度传感模块测出的温度为表面温度,而实际上表面温度和实际体温是有差距的。

6.考一些结构体、联合体、sizeof方面的知识

结构体参考:https://blog.csdn.net/abc_xixi111/article/details/80262753 , https://blog.csdn.net/qq_27597629/article/details/112311702
联合体参考:https://www.cnblogs.com/luoxuw/p/11337923.html

10.485有几根线

RS485总线通信的一般是两根线,多出的一根是公共线,也就是地线G【长距离电缆中的屏蔽层】抑制干扰用的必需接!总共要接三根,一般测试时可以不用接。

11.串口和并口有什么区别

并行接口是指数据的各位同时进行传送,其特点是传输速度快,但当传输距离较远、位数又多时,导致了通信线路复杂且成本提高;

串行接口是指数据一位位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线,从而大大降低了成本,特别适用于远距离通信,但传送速度较慢;

14.局部变量和全局变量分别存放在哪里?

C语言中局部变量存在栈里,全局变量存静态存储区。

15.c语言头文件的工作原理

引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。

16.精度和分辨率有什么区别

1、精度是接近真实值的程度, 即绝对误差或相对误差的大小.精度做到0.01%极其难
2、分辩率是量化刻度的细度大小。
分辩率高是精度高的必要条件,不是充分条件;分辩率高不等于精度高. 认定精度才是王道。

写不动了。

你可能感兴趣的:(stm32,面试)