分类:单片机工程师面试准备经验级别:中级难度:中级题型:跳槽准备/知识梳理

📖 本文概述
单片机工程师想跳槽,技术面到底该复习什么?很多人东看一点西看一点,效率很低。本文梳理了单片机面试最常考的5大技术方向:外设驱动、通信接口、中断系统、低功耗设计、调试与问题定位,帮你有重点地准备面试。
🔑 核心要点速览
单片机面试有规律可循,高频考点集中在5大方向:外设、通信、中断、低功耗、调试
外设驱动不仅要会用,还要懂原理,知道寄存器层面是怎么工作的
通信接口是必考题,UART/SPI/I2C三大接口要烂熟于心
中断系统是重点也是难点,优先级、嵌套、抖动、延时这些都是常考点
调试能力是区分新手和老手的关键,准备一两个排查案例很加分
面试题
你做单片机开发有几年了?主要用什么芯片?能说一下你比较熟悉的技术方向吗?
面试官考察的3个层面
广度
知识面覆盖
深度
原理理解程度
实战
项目落地能力
5大技术方向
1
外设驱动
GPIO/Timer/PWM/ADC
2
通信接口
UART/SPI/I2C
3
中断系统
优先级/嵌套/抖动
4
低功耗
休眠模式/唤醒
5
调试排查
问题定位/工具
每个方向怎么准备
第一,GPIO和基础外设
GPIO是最基础的,但面试也会考。不要只说"配置输入输出",要能讲清楚推挽输出和开漏输出的区别、上拉下拉的作用、输入模式的几种类型(浮空、上拉、下拉、模拟)。还要准备几个相关的问题:什么是引脚复用?外部中断怎么配置?GPIO的速度等级有什么影响?
定时器和PWM也是常考的。要知道定时器的几种工作模式:定时模式、输出比较、输入捕获、PWM输出。PWM的占空比和频率是怎么控制的?用定时器做输入捕获怎么测脉冲宽度?这些都要能说清楚。
ADC方面:分辨率和精度的区别、采样率怎么定、参考电压的选择、多通道扫描模式、DMA怎么配合ADC用。这些都是常见考点。
第二,三大通信接口
UART、SPI、I2C是单片机面试的必考题,每个都要准备好。
UART:帧格式(起始位、数据位、校验位、停止位)、波特率怎么算、什么是奇偶校验、什么是硬件流控、UART和RS232/RS485的区别、怎么处理接收溢出和错误。
SPI:四种模式(CPOL和CPHA的组合)、主从关系、片选怎么处理、全双工和半双工、SPI和I2C的优缺点对比、多个从设备怎么连接。
I2C:开漏输出和上拉电阻、起始和停止条件、应答机制、地址帧和数据帧、仲裁机制、为什么I2C只有两根线、上拉电阻阻值怎么选。
第三,中断系统
中断是单片机的核心概念,也是面试重点。要准备这些问题:
中断的基本概念:中断向量、中断优先级、中断嵌套、中断响应时间。中断服务函数里应该做什么、不应该做什么?为什么不建议在中断里做耗时操作?
中断和主循环之间怎么传递数据?全局变量要注意什么?为什么要加volatile?DMA和中断的关系是什么?哪些情况下用DMA比用中断更好?
还要准备一个实际的例子:你在项目中是怎么使用中断的?遇到过什么中断相关的问题,比如优先级冲突、中断抖动、中断丢失等。
第四,低功耗设计
如果是电池供电或者低功耗产品的岗位,这部分是重点。要了解几种低功耗模式的区别:睡眠模式、停止模式、待机模式,分别关掉了哪些部分、唤醒源有哪些、唤醒时间多长、功耗大概是多少。
还要知道降低功耗的方法:不用的外设关掉时钟、不用的GPIO设成模拟输入、降低系统时钟频率、优化工作间隔、合理使用DMA代替CPU搬运数据。
实际项目经验也很重要:你做过低功耗的项目吗?最低功耗做到了多少?怎么测的?遇到了什么困难?是怎么优化的?这些用数据说出来很有说服力。
第五,调试和问题排查
调试能力最能体现工程师的真实水平,也是面试官很看重的一点。准备一两个你调试过的印象最深的问题,按照"现象-分析-排查-解决-总结"的逻辑讲清楚。
常用调试工具要了解:仿真器怎么用、断点和观察点的区别、串口打印调试、示波器测波形、逻辑分析仪抓时序。什么是HardFault?遇到HardFault怎么排查?这些都是常见问题。
还要准备一些调试方法:二分法定位问题、对比法用好板和坏板对比、压力测试加速偶发问题复现。能说出这些方法,说明你不是靠运气调试,而是有方法论的。
常考追问
追问1:你用过哪些单片机?觉得各有什么特点?
这个问题考察你的视野和选型思维。不要只说"我用过STM32",要说具体的系列,以及不同系列的定位和适用场景。比如STM32F1是主流型,性价比高;F4是高性能,带DSP和FPU;L系列是低功耗;H系列是更高性能的。还可以对比一下不同品牌的特点,比如STM32生态好、资料多;GD国产性价比高;NXP的工业级可靠性好。根据实际用过的说,不要瞎编。
追问2:单片机程序的一般架构是怎样的?
这个问题考察你写代码的系统性。可以从简单到复杂讲:最简单的是超级循环,就是while(1)里面顺序执行各个功能;好一点的是状态机架构,每个功能模块是一个状态机,主循环里轮流跑;再复杂的就是用实时操作系统,比如FreeRTOS,任务调度、信号量、队列这些。要说明不同架构的适用场景:简单项目用超级循环够了;复杂一点的用状态机更清晰;多任务并发的用操作系统更合适。
追问3:你怎么保证单片机程序的可靠性?
可靠性是单片机开发的重要话题,特别是工业控制、汽车电子这些领域。可以从几个方面说:输入参数校验,防止非法输入;看门狗,防止程序跑飞;缓冲区溢出检查;电源和复位的可靠性设计;极端条件测试,高低温、电压波动;代码评审和测试覆盖。最好能举一个你实际做过的可靠性措施的例子。
追问4:有没有用过RTOS?和裸机比有什么优缺点?
如果用过就详细说:用的什么系统(FreeRTOS/uCOS/RT-Thread)、怎么管理任务、用了哪些内核功能(信号量、队列、互斥量、软件定时器)、遇到过什么问题。如果没用过也不要慌,可以说:我目前主要还是用裸机开发,对RTOS有了解,知道它的优势是多任务调度、实时性好,缺点是增加了复杂度和资源占用。我也在学习FreeRTOS,了解任务优先级调度和信号量这些基本概念。
失分表达
❌ 失分表达:"我就是用库函数开发的,寄存器那块不太清楚。"
这样回答会让面试官觉得你只会调库,不懂原理,遇到深层问题就搞不定。即使主要用库函数开发,也要对底层原理有基本的了解。比如你可以说:"平时开发主要用HAL库提高效率,但遇到问题的时候我会查寄存器来调试,对底层原理也有一定了解。"
✅ 高分表达:"我做单片机开发有三年了,主要用STM32系列,做过工业控制和消费电子类的项目。我比较熟悉的方向有这么几个:一是外设驱动,GPIO、定时器、ADC这些常用外设都很熟,也了解寄存器层面的工作原理;二是通信接口,UART、SPI、I2C都做过不少项目,时序和常见问题都比较清楚;三是中断和低功耗设计,之前做过电池供电的项目,对低功耗模式和优化有一些经验;四是调试排查,用仿真器和示波器解决过不少问题。我觉得我最强的是调试能力,遇到问题比较有思路。"
准备动作
跳槽面试前的复习建议
1. 把5大方向各列一个知识清单,逐一检查自己哪些比较熟、哪些需要补。
2. 每个方向准备2到3个常见问题和回答,写下来整理成文档。
3. 从做过的项目里选2到3个代表性的,按照STAR法准备好讲解。
4. 准备1到2个你调试过的印象最深的问题,重点讲分析思路和方法。
5. 如果有时间,动手写几个简单的代码回顾一下,比如GPIO配置、中断配置、I2C时序,光看不写容易忘。
核心关键词:单片机面试、跳槽准备、外设驱动、通信接口、中断系统、低功耗设计、调试排查、STM32

扫码关注





























