单片机核心基础高频问题:中断、定时器、GPIO、UART、I2C、SPI
外设驱动是单片机面试的“必考项”,面试官通过高频问题考察你的硬件理解深度、配置熟练度和异常排查思维。本章提炼三大核心问答卡片,帮你建立“原理→配置→轮询/中断→优化→调试”的完整回答框架。
📌 面试权重: 中断与GPIO几乎100%出现,UART/I2C/SPI占80%以上,定时器常结合项目提问。
📇 问答一:中断与轮询的区别及选择
🔍 面试问题: 你在项目中如何决定使用中断还是轮询?两者的优缺点是什么?
| 面试官考察点 | 是否理解实时性、CPU占用、代码复杂度之间的权衡;是否实际评估过两者对系统的影响。 |
| 回答框架 |
|
| 简短示例回答 | “若事件频率低于1kHz且需要毫秒级响应,我选中断,如UART接收。若事件频率高如ADC连续采样,我用轮询+定时器,避免中断开销。项目中曾因中断嵌套导致死锁,改用轮询+DMA后稳定性提升。” |
| 可能追问 | ① 中断服务函数中能调用延时吗?② 多个中断同时触发时优先级如何配置?③ 怎样测量中断延迟? |
| 避坑提醒 | ❌ 避免说“中断比轮询好”或“轮询都行”;必须结合具体场景。不要忘记提及临界区保护和共享变量volatile。 |
📇 问答二:UART通信配置与波特率误差
🔍 面试问题: 请简述UART在单片机上的配置步骤。如何计算波特率,并确保误差在允许范围内?
| 面试官考察点 | 是否熟悉USART模块的寄存器级配置;是否理解波特率与时钟分频的关系;是否经历过实际调参。 |
| 回答框架 |
|
| 简短示例回答 | “比如STM32F103配置115200波特率,使用8MHz HSE,经计算USARTDIV≈4.34,取整得4,实际波特率114943,误差仅0.22%可通过。我还会用示波器测量TX引脚位宽验证。” |
| 可能追问 | ① 如果收发双方波特率不一致会怎样?② 9位数据模式如何配置?③ UART与RS232/RS485电平转换注意点? |
| 避坑提醒 | ⚠️ 不要只背公式不谈实际调错过程。常见坑:忘记配置GPIO的AF模式、时钟源错误导致分频异常、中断优先级设置不当造成丢数据。 |
📇 问答三:I2C与SPI选型对比及时序细节
🔍 面试问题: 项目中你如何选择I2C或SPI?请分别画一下时序图的关键信号并说明主机/从机通信过程。
| 面试官考察点 | 是否掌握总线物理层、协议层区别;能否口头描述时序;是否有过同时使用两种总线的经验。 |
| 回答框架 |
|
| 简短示例回答 | “项目用温湿度传感器SHT30,I2C接口,引脚仅2个,且速度要求不高。而用SPI驱动OLED屏幕,需要快速刷图,SPI速率设10MHz。时序上我通过逻辑分析仪确认I2C起始/结束条件波形,调试时发现上拉电阻太小导致信号失真。” |
| 可能追问 | ① I2C多机冲突如何解决?② SPI如何实现多个从机且CS共用?③ 什么情况下I2C会出现总线锁死?如何恢复? |
| 避坑提醒 | ❌ 切忌只列举差异而不讲选择理由。一定要提上拉电阻、模式配置、实际调试工具(逻辑分析仪/示波器)。SPI的极性/相位不匹配是常见坑。 |
💡 本章小结: 面试官期待的不只是背课本,而是你有“现场配置”的自信和“踩坑复盘”的实战感。用上述框架回答,再结合1-2个真实外设场景,高分自然到手。