这份资料整理涵盖了 STM32基础、外设接口 (UART/IIC/SPI)、通信协议 (USB/CAN/网络)、RTOS 、硬件设计 (PCB/电路) 等嵌入式开发的核心领域。
💡 建议:
你可以按照这个二级目录结构来制作您的面试笔记或思维导图。
- 先背一级目录(6大块),建立宏观框架。
- 再背二级目录(如"通信"分为"基础、串口、总线、网络"),理清技术脉络。
- 最后填充具体问题,这样即使面试官跳着问,您也能迅速定位到知识点所在的"抽屉"。
对第一板块和第二板块的播客:
📂 第一板块:单片机基础与架构 (MCU)
这部分考察对 STM32 架构、时钟系统及启动流程的理解。
1.1 概念与选型
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 什么是单片机 | 必问 | 单片机(Microcontroller Unit, MCU)是一种集成电路芯片,它将微处理器(CPU)、存储器(包括 RAM 和 ROM)、输入/输出接口(I/O)以及其他功能模块集成在一个小型的芯片上。单片机设计用于执行特定的控制任务,广泛应用于嵌入式系统。 |
| 单片机有什么特点 | 必问 | 1. 集成度高:集成 CPU、RAM、ROM、外设于一体。 2. 低功耗:适合电池供电。 3. 专用性:针对特定应用优化。 4. 实时性:快速响应外部事件。 5. 可编程性:内部存储器可编程。 6. 丰富的 I/O:GPIO, ADC, PWM 等。 7. 成本效益高。 8. 易于使用:有丰富库和工具。 9. 可扩展性。 10. 广泛应用:家电到工控。 |
| 51单片机和32单片机的区别 | 必问 | 1. 架构:51 是 8 位 CISC (8051内核),冯·诺依曼架构;STM32 是 32 位 RISC (Cortex-M内核),哈佛架构。 (哈佛架构的数据和指令分开存,冯诺依曼架构一起存) 2. 性能:51 几十 MHz;STM32 可达几百 MHz。 3. 资源:51 RAM/ROM 仅几 KB;STM32 可达几 MB。 4. 外设:51 简单;STM32 丰富 (USB, CAN, Ethernet)。 5. 开发:51 用 Keil C51;STM32 用 Keil MDK/CubeMX,有 HAL 库。 6. 价格:51 极低;STM32 适中。 |
| 单片机开发中,芯片如何选型 | 必问 | 1. 明确需求:功能、性能、成本预算。 2. 对比参数:Flash/RAM 大小、外设资源。 3. 参考应用:如 C8051 适合实时性,STM32 适合通用。 4. 评估成本:开发工具成本、学习成本。 5. 功能匹配:外设兼容性。 6. 未来扩展:避免性能过剩或不足。 |
| 你了解过哪些MCU型号 / 国产MCU | 重点 | 国际:STM32 (ST), PIC (Microchip), AVR (Atmel/Microchip), MSP430 (TI), ESP8266/32 (乐鑫)。 国产: 1. GD32 (兆易创新):兼容 STM32,主频更高。 2. MM32 (灵动微):引脚/软件高度兼容。 3. AT32 (雅特力):兼容且性价比高。 4. STC (宏晶):经典的增强型 51。 5. ESP系列 (乐鑫):IoT Wi-Fi/蓝牙首选。 |
| 有没有用过MM32? | 了解 | 基于 ARM Cortex-M,与 STM32 相似,库函数命名略有不同,可快速迁移。 |
1.2 内核与启动
| 问题 | 级别 | 详细解答 |
|---|---|---|
| STM32F1和STM32F4有什么区别? | 了解 | 1. 内核:F1 是 Cortex-M3;F4 是 Cortex-M4 (带 FPU 浮点单元/DSP 指令)。 2. 主频:F1 72MHz;F4 168MHz。 3. 内存:F4 更大 (192KB SRAM)。 4. 外设:F4 功能更强 (如 GPIO 翻转速度、ADC 精度)。 |
| STM32F407的最高时钟主频 | 必问 | 168 MHz |
| STM32的启动过程是怎么样的? | 必问 | 1. 上电复位,读取 BOOT 引脚决定从哪里启动 (通常是 0x08000000 Main Flash)。 2. 从起始地址读取 栈顶指针 (MSP)。 3. 读取 复位中断向量 (Reset_Handler) 地址,跳转执行。 4. 执行复位中断服务程序:初始化系统时钟 (SystemInit)、设置中断向量表偏移 (VTOR)、初始化 C 库 (__main)。 5. 跳转到用户 main() 函数。 |
| 单片机最小系统组成 | 了解 | 1. 电源电路 (3.3V/5V)。 2. 复位电路 (RC 复位/芯片复位)。 3. 晶振电路 (时钟源)。 4. 下载调试接口 (SWD/JTAG/UART)。 5. 启动配置 (BOOT 引脚)。 |
| 单片机的PC / 堆栈 | 了解 | PC (程序计数器):16/32 位寄存器,存放下一条要执行的指令地址。取指后自动加 1。 堆栈 (Stack):RAM 中的后进先出 (LIFO) 区域。用于保存断点 (PC)、保护现场 (寄存器) 和传递参数。 |
| 单片机寻址方式 | 了解 | 1. 立即寻址 :操作数在指令中(MOV A, #30H)。2. 直接寻址 :直接给出地址( MOV A, 30H)。3. 寄存器寻址 :操作数在寄存器( MOV A, R1)。4. 寄存器间接寻址:寄存器存地址 ( MOV A, @R0)。5. 变址寻址 :基址+变址( MOVC A, @A+PC)。6. 相对寻址 :PC+偏移量 (跳转)。 7. 位寻址:对某一位操作。 |
| 什么是位段操作(BitBand) | 了解 | 将 1 个比特位膨胀映射为 1 个字 (32bit) 的地址。允许 CPU 通过读写这个字地址来原子操作那个比特位。主要用于 GPIO 和 SRAM 的原子位操作。 |
| 单片机中能够位寻址的寄存器的规律 | 了解 | 寄存器的地址能够被 8 整除 的,通常就是可以位寻址的。 |
1.3 时钟与调试
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 为什么芯片需要时钟信号 / 时钟使能 | 必问 | 需要时钟: 1. 同步数据传输:提供统一时间基准,确保逻辑单元在同一时刻动作(如触发器翻转)。 2. 控制时序:取指、译码、执行都需要时钟节拍。 需要使能: STM32 为了低功耗设计,默认关闭所有外设时钟。用户需手动开启(使能)特定外设的时钟,该外设才能工作。 |
| 32位芯片的调试主要包括哪些工具? | 了解 | J-Link、ST-Link、DAPLink、ULINK、Tracealyzer、SystemView、ITM/SWO、ETM/ETB、GDB+QEMU、串口 printf、逻辑分析仪、示波器。 |
1.4 总线主控
| 问题 | 级别 | 详细解答 |
|---|---|---|
| DMA (直接存储器访问) | 必问 | 搬运工。不经过 CPU,直接在 外设 <-> 内存 或 内存 <-> 内存 之间传输数据。节省 CPU 资源,提高效率 (如 ADC 连续采集、串口大量发送)。 |
1.5 电源管理与调试
| 问题 | 级别 | 详细解答 |
|---|---|---|
| STM32的低功耗模式有哪些 | 必问 | 按功耗由高到低排列,STM32 具有 运行、睡眠、停止、待机 四种工作模式。 上电复位后默认处于运行状态。用户需根据应用需求(如电池供电)选择最佳模式以降低功耗。 |
| STM32 低功耗模式 - 睡眠模式 (Sleep) | 重点 | 特点:仅关闭了内核时钟,内核停止运行,但片上外设(GPIO、定时器、ADC等)照常运行。 进入条件:执行 WFI (等待中断) 或 WFE (等待事件) 指令,且 SLEEPDEEP=0。唤醒方式:任意中断 (如 SysTick) 或事件。 唤醒延迟:无(立即唤醒)。 |
| STM32 低功耗模式 - 停止模式 (Stop) | 必问 | 特点:关闭所有时钟(HSI/HSE/PLL),所有外设停止工作。但 1.2V 区域电源保留,即内核寄存器和 SRAM 内容保持(数据不丢失)。 进入条件: SLEEPDEEP=1,PDDS=0 (电源控制寄存器)。唤醒方式:任意 外部中断 (EXTI) 线(如按键、串口RX引脚中断)。 注意:唤醒后时钟默认切回 HSI,需重新配置系统时钟。 |
| STM32 低功耗模式 - 待机模式 (Standby) | 必问 | 特点:功耗最低。关闭所有时钟,关闭 1.2V 区域电源。SRAM 和寄存器内容丢失(除备份域外)。 进入条件: SLEEPDEEP=1,PDDS=1,WUF=0 (唤醒标志清零)。唤醒方式:WKUP (PA0) 引脚上升沿、RTC 闹钟、NRST 引脚复位、IWDG 复位。 唤醒后:程序从头开始执行(相当于复位),之前的数据丢失。 |
| keil5如何进行软件仿真/debug模式 | 了解 | 软件仿真 (Simulator): 1. 点击魔术棒 (Options for Target) -> Debug 选项卡。 2. 勾选 “Use Simulator”。 3. 修改 Dialog DLL 和 Parameter (如 DARMSTM.DLL / -pSTM32F103C8) 以匹配芯片型号。 4. 点击 Start/Stop Debug Session 进入仿真。 硬件调试 (Hardware Debug): 1. 连接仿真器 (ST-Link/J-Link)。 2. Debug 选项卡勾选自己的调试器型号 3. 点击 Settings 确认识别到芯片 SWD/JTAG ID。 4. 进入 Debug 模式支持单步运行、打断点、查看寄存器/变量。 一般情况下,程序跑飞了会触发hardfault(硬错误中断),最快的方法是右键栈窗口里的hardfault,选择 显示调用代码的选项,参考博客![]() |
📂 第二板块:存储器与 Flash
2.1 存储理论
| 问题 | 级别 | 详细解答 |
|---|---|---|
| RAM与ROM的区别 | 重点 | 1. 核心功能:RAM 是临时工作台;ROM 是基础说明书 (固件)。 2. 读写权限:RAM 随机读写;ROM 默认只读 (或按块擦写)。 3. 持久性:RAM 易失 (断电丢);ROM 非易失。 4. 速度:RAM 极快 (GB/s);ROM 较慢 (MB/s)。 5. 容量:RAM 大 (GB级);ROM 小 (MB级,嵌入式中)。 |
| 存储器分类 (SRAM, DRAM, NOR, NAND) | 了解 | RAM:SRAM (快, 贵, 不需要刷新, MCU内部) vs DRAM (慢, 便宜, 需刷新, 内存条)。 Flash: 1. NOR Flash:地址线数据线分开,支持按字节随机读取 (代码可直接运行),擦除按扇区。STM32 内部 Flash 就是 NOR 类型。 2. NAND Flash:地址数据线复用,按块读写,容量大便宜,主要存数据 (SSD/U盘)。 |
| STM32F4 内存大小细节 | 了解 | STM32F4 内部 SRAM 最大 192K,其组成细节为:112KB (系统SRAM) + 64KB (CCM数据RAM) + 16KB (备份SRAM)。 |
2.2 Flash 机制与操作
| 问题 | 级别 | 详细解答 |
|---|---|---|
| STM32F4的FLASH是什么类型 | 重点 | NOR FLASH。支持片内执行 (XIP),擦除按扇区,读写按字节/字。 |
| FLASH是怎么规划的,分了那些数据 | 必问 | 按功能:引导区 (Bootloader)、系统区 (OS/APP)、用户数据区 (配置/文件)。 按类型:代码类 (Bin文件)、文件类 (图片/字库)、配置类 (参数)。 按频率:频繁擦写区 (日志)、非频繁区 (固件)。 |
2.3 外部存储与应用
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 写入FLASH的流程 / SPI通信原理 | 重点 | 流程:解锁 -> 擦除 (将位全置1) -> 编程 (写入数据, 只能1变0) -> 校验 -> 上锁。 SPI原理:全双工同步通信。CS 片选,CLK 时钟,MOSI 主出从入,MISO 主入从出。 |
| W25q128用的什么通信? | 了解 | SPI 通信。W25Q128 是一款 Flash 存储器,通过 SCK, MISO, MOSI, CS 四线进行数据读写。 |
| 51单片机中,可拓展的外部程序储存器最大为多少字节 | 了解 | 64KB (16位寻址 )。 1. EA 接高:先读内部 4K,超出读外部 (共 60K)。 2. EA 接低:直接从外部读取 (共 64K)。 |
| Json在stm32的处理效率问题 | 了解 | 效率取决于主频、内存和 JSON 复杂度。 优化方法: 1. 选择轻量库 (cJSON, Jsmn)。 2. 避免嵌套结构。 3. 压缩数据大小。 4. 使用硬件加速 (FPU/DMA)。 5. 优化代码 (寄存器变量)。 |
对第三板块和第四板块的播客:
📂 第三板块:GPIO、中断与定时器
3.1 GPIO 系统
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 单片机中IO口的作用 | 了解 | 与外部器件实现数据交互、速度匹配、数据传送方式转换,以及增强单片机的负载能力。 |
| GPIO有几种工作模式 | 必问 | 1. 输入:浮空、上拉、下拉、模拟。 2. 输出:推挽、开漏。 3. 复用:复用推挽、复用开漏 (用于外设)。 |
| 推挽输出和开漏输出的区别 | 必问 | 推挽 (Push-Pull):由 PMOS+NMOS 构成。能输出强高/低电平,驱动能力强,适合通用输出。 开漏 (Open-Drain):只有 NMOS (类似 NPN 集电极开路)。输出低电平时接地,输出高电平时高阻态。必须外接上拉电阻才能输出高电平。适合 I2C 总线 (线与逻辑) 和 电平转换 (5V 兼容)。 |
| 引脚的输出速度(翻转速率)选择要注意什么? | 了解 | 需综合考虑噪声控制、功耗和信号失真。速度越快噪声越大、功耗越高。应根据实际需求选择,不必盲目追求最高速。 |
| 什么是上拉/下拉 | 重点 | 上拉:通过电阻接 VCC,确保悬空时为高电平。 下拉:通过电阻接 GND,确保悬空时为低电平。 作用:固定电平,防止引脚悬空浮动导致误触发。 |
| 按键怎么做的?流程什么? | 了解 | GPIO 输入 -> 定时 10ms 扫描 -> 消抖 (计数 次稳态) -> 触发事件 -> 回调/发消息。 |
3.2 中断系统
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 什么是中断 / 中断源 | 必问 | 中断:CPU 暂停当前程序,转去处理突发事件,处理完返回。 中断源:触发中断的事件源 (如 GPIO 外部中断、定时器溢出、串口接收)。 |
| 中断的功能 (资芯电子笔面延伸) | 了解 | 1. 实时处理:响应外界变量变化,请求 CPU 及时处理。 2. 故障处理:针对难以预料的故障 (如掉电),由故障源发出请求,CPU 转去执行故障处理程序。 3. 分时操作:CPU 启动外设后继续工作,外设完成后发中断请求。这样 CPU 可启动多个外设同时工作,大大提高效率。 |
| 中断配置过程 (以外部中断为例) | 必问 | 以外部中断为例子。 1、先设置GPIO口为输入模式,并且时钟使能,GPIO初始化 2、查看中文参考手册,获取GPIO口到底是挂载在哪个EXTI线,初始化该外部中断事件线,设置下降沿触发 3、通过系统配置控制器SYSFLG将GPIO口与该外部中断事件线EXTIx映射连接起来 4、初始化嵌套向量中断控制器NVIC,设置中断源以及该中断的优先级 5、在启动文件中,查看该中断的服务函数名字,编写实现中断服务函数 6、当中断触发之后,执行你要操作的业务,处理完要清除中断标志位 |
| 中断类型 | 了解 | 1. 内核中断 - 复位、NMI、硬错误、内存管理、总线错误、使用错误、SVCall、调试监视、PendSV、SysTick。 2. 外部中断 - EXTI:所有GPIO均可映射到16个外部中断线,支持边沿触发。 3. 外设中断 - 定时器:更新、捕获/比较、触发、刹车。 - 串口:发送完成、接收就绪、帧错误。 - ADC/DAC:转换完成、溢出。 - DMA:传输完成、半传输、错误。 - I2C/SPI:事件、错误。 - 其他:CAN、USB、RTC等。 关键点: - 通过 NVIC 统一管理优先级和使能 - 优先级分抢占优先级和子优先级 - 需在启动文件或CubeMX中配置中断向量表 |
| 外部中断的触发条件 | 了解 | 1. 边沿触发 (上升沿、下降沿)。 2. 电平触发 (高电平、低电平)。 3. 脉冲触发。 4. 脉冲计数触发。 |
| 边沿触发中断和电平触发中断 (详细区别) | 了解 | 边沿触发:检测电平变化,锁存信号 (D触发器记忆)。信号消失后中断仍有效。 电平触发: 1. 即时触发:信号消失中断也消失,易漏掉。 2. 信号锁存:类似边沿,需手动清除。 区别:边沿适合检测变化;电平适合检测状态保持。 |
3.3 定时器与 PWM
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 定时器工作原理 / PWM | 重点 | 原理:计数器 (CNT) 在时钟驱动下计数,与重装载值 (ARR) 比较,相等时溢出产生中断。 PWM:脉冲宽度调制。利用比较寄存器 (CCR) 与 CNT 比较。CNT < CCR 输出有效电平,否则无效。通过改变 CCR 调节占空比,改变 ARR 调节频率。 |
| 在1kHZ下,如何设置50%占空比 | 了解 | 设 ARR = 1000 - 1 (周期),则 CCR = 499 (500)。占空比 = (CCR+1) / (ARR+1)。 |
| 用定时器的方式,写一个输出比例1:1,频率为1kHz的程序 | 了解 | 假设时钟 。 1. 设置预分频器 (PSC) = (得 计数频率)。 2. 设置重装载值 (ARR) = (得 频率)。 3. 设置比较值 (CCR) = (即 个计数)。 4. 配置为 PWM 模式 1,极性高。 此时占空比 = ,即 1:1。 |
| 电机的分类 | 必问 | 一、直流电机 直流侧再按“换相方式”细分 有刷 DC:机械换向器 + 电刷 → 简单、便宜、需维护 无刷 BLDC:电子换向(霍尔/反电动势)→ 高效率、长寿命 步进电机:定子脉冲磁场 → 开环定位,失步风险 伺服电机(DC/AC):= 电机 + 编码器 + 闭环驱动 → 高精度位置/速度/扭矩控制 二、交流电机 交流侧按“转子速度”细分 同步电机:转子 = 永磁或直流励磁,严格同步电网频率 → 功率因数可调,用于发电机、大型压缩机 异步(感应)电机:转子靠滑差感应电流,转速 < 同步速 → 结构最简单,工业电机 90% 占比 |
| 电机如何测试转速 | 重点 | 编码器 |
| 如何使用STM32输出PWM控制12V的电机正反转 | STM32通过两路PWM信号控制L298N: IN1_PWM + IN2_0 正转,IN1_0 + IN2_PWM 反转,IN1_1 + IN2_1 刹车,IN1_0 + IN2_0 停止。 |
|
| 舵机的作用和原理 | 重点 | 作用:角度控制 (0-180°)。 原理:输入 50Hz PWM (周期 20ms)。高电平脉宽 0.5ms ~ 2.5ms 对应 0° ~ 180°。内部闭环电路控制电机停在指定角度。 |
3.4 系统可靠性
| 问题 | 级别 | 详细解答 |
|---|---|---|
| RTC时钟芯片相关的 (配置流程) | 了解 | 1. 使能时钟 (RCC)。 2. 解锁 RTC (写 RTC_CR 的 DBP 位)。3. 配置时钟源 (LSE/LSI)。 4. 初始化 (设置预分频 RTC_PRER 产生 1Hz)。5. 设置时间 (操作 RTC_TR, RTC_DR)。6. 配置闹钟/中断。 7. 上锁 (保护配置)。 |
| 看门狗 (Watchdog) | 重点 | 作用:防止程序死锁。本质是递减计数器,溢出时复位系统。 喂狗:程序需定期重置计数器。 类型:独立看门狗 (IWDG, 独立时钟, 防硬件故障)、窗口看门狗 (WWDG, 必须在窗口期喂, 防程序跑飞)。 |
| 单片机的波形调制主要包括有哪几种? | 了解 | PWM (脉宽调制)、SPWM (正弦脉宽)、PPG、DAC、Σ-Δ、频率调制、相位调制。 |
| 舵机的作用和原理 | 重点 | 作用:角度控制 (0-180°)。 原理:输入 50Hz PWM (周期 20ms)。高电平脉宽 0.5ms ~ 2.5ms 对应 0° ~ 180°。内部闭环电路控制电机停在指定角度。 |
| 按键怎么做的?流程什么? | 了解 | GPIO 输入 -> 定时 10ms 扫描 -> 消抖 (计数 次稳态) -> 触发事件 -> 回调/发消息。 |
| 字符设备、块设备 (特点) | 了解 | 字符设备:按字节读写,顺序访问 (键盘、串口)。 块设备:固定长度块传输 (512K),支持随机访问 (硬盘、U盘),可挂载文件系统。 |
📂 第四板块:通信接口 (UART/IIC/SPI/USB/CAN)
这部分是重中之重,必须分清各协议的时序、线制和应用场景。
4.1 通信基础
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 列出单片机的几种通信外设 | 了解 | UART、SPI、I²C、CAN、USB、SDIO、Ethernet、I²S、QSPI、FlexRay |
| 全双工、半双工、单工区别 | 必问 | 单工:单向 (如收音机)。 半双工:双向但不能同时 (如对讲机、RS485、I2C)。 全双工:双向且同时 (如电话、RS232、SPI)。 |
| 同步与异步的区别 | 必问 | 同步:有共用时钟线 (CLK),收发双方按时钟节拍同步 (SPI, I2C)。 异步:无时钟线,靠约定的波特率和起始/停止位同步 (UART)。 |
| 比特率定义 | 了解 | 一秒钟内在通信网络上传输的 比特数 (bit)。 |
| 常用校验算法 (CRC) | 必问 | CRC (循环冗余校验):基于多项式模 2 除法,计算余数。检错能力强,适合数据块校验。 其他: 奇偶校验 (单bit):使发送内容中1的个数为奇数或者偶数 累加和 :所有数据字节的算术和,模256后取补码 |
| CRC校验 (算法实现) | 必问 | 基于多项式模 2 除法。发送端计算余数附加在末尾,接收端除以多项式余数若为 0 则正确。 代码思路: crc ^= data[i]; 然后循环 8 次,若最高位为 1 则 crc = (crc << 1) ^ POLY; 否则左移。 |
| CRC校验 (C语言实现代码) | 必问 | 详见下方代码块。 |
1 |
|
4.2 串口通信 (UART/Serial)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| UART 帧格式 / 数据包结构 | 必问 | 帧格式:起始位 (0) + 数据位 (8位) + 校验位 (可选) + 停止位 (1)。 数据包 (自定义):帧头 + 命令字 + 长度 + 数据 + 校验和 (CheckSum/CRC) + 帧尾。 |
| 如何自定义通信数据包 | 必问 | 帧头+命令+命令类型(子命令)+数据长度+数据+校验位+帧尾 |
| UART (SCI 和 UART 就是的士和出租车的区别) | 必问 | UART:通用异步收发器 (硬件实体)。 SCI:串行通信接口 (概念统称)。 UART 只是 SCI 的一种实现。缺点:不支持多机主从,速度慢。 |
| TTL vs RS232 vs RS485 | 必问 | TTL:逻辑 0=0V,1=3.3V/5V (板内通信)。 RS232:负逻辑,0=+3~15V,1=-3~-15V (全双工,点对点,15米,易受干扰)。 RS485:差分信号 (A-B),正差=1,负差=0 (半双工,多点组网,1200米,抗干扰强)。 |
| TTL电平/CMOS电平 | 必问 | TTL:高电平 ,低电平 (5V供电)。 CMOS:范围更宽,接近电源轨。 |
| RS-232 (详细引脚与电平) | 必问 | 9针定义:RXD, TXD, GND, DCD(载波), DTR(就绪), DSR, RTS(请求发送), CTS(清除发送), RI(振铃)。 电平:负逻辑。 为 ‘0’, 为 ‘1’。 缺点:共模干扰大,距离短 (15m)。 |
| 如何延长RS485的通信距离 | 重点 | 1. 使用中继器:在总线中间增加 RS485 中继器,增强信号驱动能力。 2. 降低波特率:波特率越低,信号抗干扰能力越强,传输距离越远。 3. 使用屏蔽双绞线:双绞线抵消共模干扰,屏蔽层接地防止电磁干扰。 4. 加终端电阻:在总线首尾各并联一个 120Ω 电阻,匹配阻抗,消除信号反射。 5. 增加线径:使用更粗的导线减少线路阻抗。 |
| RS485的通信距离跟哪些参数有关系 | 重点 | 1. 波特率:成反比。100kbps 时约 1200m;10Mbps 时仅几米。 2. 线缆质量:双绞线的绞距、线径、屏蔽性能。 3. 节点数量:挂载设备越多,负载越重,距离缩短(标准 32 个,特制芯片可达 128/256)。 4. 环境干扰:电磁环境恶劣会缩短有效距离。 5. 驱动能力:485 芯片本身的驱动负载能力。 |
4.3 板级总线 (IIC/SPI)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| IIC 协议详解 | 必问 | 线制:SCL (时钟), SDA (数据)。开漏输出+上拉。 时序: 1. 起始:SCL 高时,SDA 下降沿。 2. 停止:SCL 高时,SDA 上升沿。 3. 数据:SCL 低电平改变数据,SCL 高电平保持数据稳定。 4. 应答 (ACK):第 9 个时钟,接收方拉低 SDA。 特点:半双工、同步、多主从、有地址 (7bit/10bit)、有应答。 |
| IIC 应答信号的电平定义 | 重点 | 0 (低电平):有效应答 (ACK)。 1 (高电平):无效应答 (NACK)。 CPU 发出信号后等待应答,若未收到 (保持高电平),则判断受控单元故障。 |
| IIC如何识别从机设备 / 寻址模式 | 必问 | 通过 设备地址。每个从机有唯一的 7bit 或 10bit 地址。主机发送地址帧,从机匹配后发送 ACK。 |
| IIC 的模式 (单主/多主) | 必问 | 一主多从:最常用,代码量小,无仲裁。 多主多从:总线有 个主机。协议支持,但需打开 MCU 的 Multi-Master 功能位,并处理 “仲裁丢失” 中断。 |
| IIC的数据传输的最高的传输速度 | 了解 | 标准模式:100 Kbps。 快速模式:400 Kbps。 高速模式:3.4 Mbps。 超高速模式:5 Mbps / 10 Mbps。 |
| 软件IIC vs 硬件IIC | 必问 | 硬件:外设控制器实现,速度快,CPU 占用低,引脚固定。 软件:GPIO 模拟时序,灵活性高,可移植性好,但占用 CPU,速度慢。 |
| 软件模拟IIC与硬件IIC的区别 | 必问 | 硬件:速度快、不占 CPU、引脚固定。 软件:GPIO 模拟,速度慢、高 CPU 占用、引脚灵活、易移植。 |
| SPI 协议详解 | 必问 | 线制:SCK, MOSI, MISO, CS (片选)。 特点:全双工、同步、主从、无应答、高速 (Mbps级)。 模式:CPOL (时钟极性) 和 CPHA (时钟相位) 组合成 4 种模式 (0,1,2,3)。常用模式 0 和 3。 |
| 有没有了解过软件SPI | 了解 | 主循环里手动控制 GPIO 拉高拉低 SCK,按位读写 MOSI/MISO。适合对速度要求不高且引脚受限的场景。 |
| IIC 与 SPI 的区别 | 必问 | 1. 线:IIC 两根;SPI 四根。 2. 速:SPI 快;IIC 慢。 3. 选:IIC 用地址;SPI 用片选线。 4. 答:IIC 有 ACK;SPI 无。 5. 工:IIC 半双工;SPI 全双工。 |
4.4 工业与高速总线 (CAN/USB)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| CAN 总线 | 了解 | 特点:差分信号 (CAN_H, CAN_L),半双工,异步,无时钟,多主,抗干扰强。 帧:数据帧、远程帧、错误帧。 仲裁:ID 越小优先级越高。 |
| CAN (CVTE一面延伸 - 网络类型与距离) | 了解 | 1. 闭环总线网络: ● 特点:高速、短距离。 ● 参数:最高速度 1Mbps,最长距离 40m。 2. 开环总线网络: ● 特点:低速、远距离。 ● 参数:最高速度 125Kbps,最远距离 1km。 通讯节点构成:CAN控制器 + CAN收发器 (将信号转换为差分信号)。 |
| USB 协议 | 了解 | 线:VCC, GND, D+, D- (差分)。 三层结构:接口层(数据包) -> 中间层(端点) -> 功能层。 传输:控制 (枚举)、批量 (U盘)、中断 (鼠标)、同步 (摄像头)。 枚举:主机读取设备描述符,分配地址,加载驱动。 端点:数据缓冲区。 |
| USB协议 (端点与管道的详细定义) | 了解 | 端点 (Endpoint): ● 定义:设备端的一个数据缓冲区。 ● 特点:每个端点有固定的传输方式、带宽、最大包长。端点 0 用于初始化。 管道 (Pipe): ● 定义:主机缓冲区与外设端点之间的逻辑连接。 ● 分类:数据流管道 (无结构)、消息管道 (有结构)。 总结:主机通过“管道”与设备的“端点”通信。 |
4.5 无线通信与物联网 (Wireless & IoT)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 无线模块选型 | 重点 | 1. Wi-Fi: ESP8266/ESP32 (UART/SDIO)。 2. 蓝牙: nRF52, CC2640 (BLE)。 3. LoRa: SX1278 (远距离, 低功耗)。 4. ZigBee: CC2530 (组网, 智能家居)。 5. 4G/NB-IoT: SIM7600, BC26 (广域网)。 |
| 有没有了解过哪些无线通信模块 (选型表) | 重点 | 1. UART上网:ESP8266 (WiFi), SIM800C (2G), BC26 (NB-IoT)。 2. 低功耗+速传 (SPI):NRF24L01 (2.4G), SI4463 (433M)。 3. 远距组网:LoRa SX1278 (5km), ZigBee CC2530 (自组网)。 4. 超简对讲:433M ASK (遥控器)。 |
| Lora,NB-IoT的使用 | (需结合具体项目回答,如 LoRa 用于农田无需基站,NB-IoT 用于抄表需插卡)。 | |
| Lora,NB-IoT的使用 | 了解 | LoRa:用于远距离、低功耗、自组网场景 (如农田、山区),需配合 LoRa 网关。 NB-IoT:基于运营商网络,用于广覆盖、低频次数据上传 (如智能水表),需插 SIM 卡。 |
| 有没有了解过蓝牙芯片 / 协议栈 | 必问 | 主流芯片:TI CC2640, Nordic nRF52, 乐鑫 ESP32, 杰理/恒玄 (音频)。 协议栈:基带 -> LMP (链路管理) -> L2CAP (适配) -> SDP (服务发现) -> 应用层 (GATT/GAP)。 |
| ESP8266模块 (概述) | 重点 | 乐鑫推出的低成本 Wi-Fi SOC。集成 TCP/IP 协议栈,支持 AT 指令控制或作为 MCU 独立开发 (SDK/Arduino)。广泛用于 IoT 联网。 |
| ESP8266 模式与配网 | 重点 | 工种模式:STA (客户端), AP (热点), STA+AP (混合)。 配网模式: 1. 硬编码 (写死)。 2. SmartConfig (微信 AirKiss 一键配网)。 3. AP 配网 (手机连模块热点网页配置)。 |
| ESP8266 用的协议 | 了解 | 主要是 TCP/IP 协议栈 (包含 TCP, UDP, HTTP, DNS, FTP)。 |
| 简述LWIP协议 | 必问 | LwIP (Light-weight IP) 是开源轻量级 TCP/IP 栈。 特点:减少 RAM 占用,支持无操作系统运行 (RAW API) 或带系统 (Netconn/Socket API)。 包含:应用层、传输层、网络层 (物理层需硬件配合)。 |
| MQTT 协议 | 必问 | 机制:发布/订阅模式 (Pub/Sub)。 角色:Client (发布/订阅者), Broker (代理服务器)。 特点:轻量、低带宽、长连接、QoS (0/1/2) 消息质量保证。 |
| Mqtt的底层 | 重点 | 基于 TCP/IP 协议,使用 Socket 编程实现报文的构建和发送。位于 OSI 的应用层。 |
对第五板块和第六板块的播客:
📂 第五板块:RTOS
嵌入式 OS 核心,考察任务调度、通信与同步。
5.1 RTOS 基础概念
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 什么是 RTOS | 了解 | 实时操作系统。保证任务在确定时间内完成。内核负责多任务切换、同步与资源管理。 |
| RTOS 任务状态 | 必问 | 1. 运行态 (Running)。 2. 就绪态 (Ready)。 3. 阻塞态 (Blocked, 等待事件)。 4. 挂起态 (Suspended, 手动暂停)。 |
| RTOS任务怎么划分的? | 了解 | 1. 高优:中断外设驱动 (串口/ADC)。 2. 周期:1ms 控制环 > 10ms 检测 > 100ms 人机。 3. 低优:阻塞型慢操作 (网络/SD卡)。 4. 合并:共享资源的功能合并,减少切换。 |
| RTOS 调度策略 | 必问 | 抢占式 (高优先级打断低优先级) + 时间片轮转 (同优先级轮流执行)。 |
| FreeRTOS的任务调度是什么样的 (内核级) | 了解 | 1. TCB:含栈顶指针、优先级、链表节点。 2. 就绪表: pxReadyTasksLists 数组,按优先级索引。3. 调度: SysTick 系统滴答时钟 触发 PendSV,汇编保存 R4-R11 等,加载新任务栈。4. 查找:O(1) 时间找到最高优先级非空链表。 |
| 任务通信机制 (Queue, Sem, Mutex) | 必问 | 1. 队列 (Queue):传递数据 (值拷贝)。FIFO。 2. 信号量 (Semaphore):传递状态 (计数)。二值 (同步) / 计数 (资源管理)。 3. 互斥量 (Mutex):保护临界资源。具有优先级继承机制 (防优先级翻转)。 4. 事件组 (EventGroup):多事件同步 (与/或逻辑)。 5. 任务通知:轻量级,点对点。 |
| FreeRTOS中,消息队列与信号量区别 (本质) | 了解 | 队列:传递数据 (值拷贝),有缓冲区。 信号量:传递状态,是特殊的队列 (长度0/数据大小0),只计数值。 |
| 优先级翻转及解决 | 了解 | 现象:高优先级任务等待低优先级持有的锁,中优先级任务打断低优先级,导致高优先级任务长时间阻塞。 解决:互斥量 (Mutex) 支持优先级继承——当高优先级等待锁时,暂时提升持有锁的低优先级任务的优先级,使其尽快释放锁。 |
5.2 通信与同步 (IPC & Sync)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 任务通信机制 (Queue, Sem, Mutex) | 必问 | 1. 队列 (Queue):传递数据 (值拷贝)。FIFO。 2. 信号量 (Semaphore):传递状态 (计数)。二值 (同步) / 计数 (资源管理)。 3. 互斥量 (Mutex):保护临界资源。具有优先级继承机制 (防优先级翻转)。 4. 事件组 (EventGroup):多事件同步 (与/或逻辑)。 5. 任务通知:轻量级,点对点。 |
| FreeRTOS中,消息队列与信号量区别 (本质) | 了解 | 队列:传递数据 (值拷贝),有缓冲区。 信号量:传递状态,是特殊的队列 (长度0/数据大小0),只计数值。 |
| 优先级翻转及解决 | 了解 | 现象:高优先级任务等待低优先级持有的锁,中优先级任务打断低优先级,导致高优先级任务长时间阻塞。 解决:互斥量 (Mutex) 支持优先级继承——当高优先级等待锁时,暂时提升持有锁的低优先级任务的优先级,使其尽快释放锁。 |
5.3 内存与移植
| 问题 | 级别 | 详细解答 |
|---|---|---|
| FreeRTOS 移植步骤 | 重点 | 1. 获取源码 (Source)。 2. 选移植层 ( portable/GCC/ARM_CM4F)。3. 配置 FreeRTOSConfig.h (堆大小、优先级数、Tick频率)。4. 适配 SysTick (系统滴答时钟) 中断和 SVC/PendSV 中断。5. 创建任务,启动调度器。 |
| FreeRTOS任务堆栈的动态和静态 | 了解 | 动态:运行时 malloc,灵活但有碎片 (configSUPPORT_DYNAMIC_ALLOCATION)。静态:编译时分配数组,安全无碎片,需预估大小 (configSUPPORT_STATIC_ALLOCATION)。 |
| 内存管理 (heap_4) | 必问 | heap_4:最常用。支持内存合并 (解决碎片),支持将不连续内存区映射为堆 (vPortDefineHeapRegions)。 |
| FreeRTOS 内存配置宏 (源码细节) | 了解 | configTOTAL_HEAP_SIZE:堆大小 (仅 heap_1/2/4/5 需要)。configUSE_MALLOC_FAILED_HOOK:分配失败回调 (1开启)。configSUPPORT_STATIC_ALLOCATION:允许静态 API (1开启)。configSUPPORT_DYNAMIC_ALLOCATION:允许动态 API (1开启)。configAPPLICATION_ALLOCATED_HEAP:由用户声明堆数组 (1开启)。 |
| 内存管理 (heap_4) | 必问 | heap_4:最常用。支持内存合并 (解决碎片),支持将不连续内存区映射为堆 (vPortDefineHeapRegions)。 |
| 堆栈溢出检测 | 了解 | 1. 方法1:检查栈顶是否被覆盖 (特殊值)。 2. 方法2:使用 MPU 保护栈区。 3. Hook:定义 vApplicationStackOverflowHook 回调。 |
5.4 内核原理 (Kernel Internals)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| FreeRTOS的任务调度是什么样的 (内核级) | 了解 | 1. TCB:含栈顶指针、优先级、链表节点。 2. 就绪表: pxReadyTasksLists 数组,按优先级索引。3. 调度: SysTick 触发 PendSV,汇编保存 R4-R11 等,加载新任务栈。4. 查找:O(1) 时间找到最高优先级非空链表。 |
| 有没有研究过RTOS的内核源码 | 了解 | (见上表 FreeRTOS 调度原理,提到 TCB、PendSV、List_t 结构、heap_4 算法、临界区开关中断实现)。 |
📂 第六板块:硬件设计 (PCB/ADC/无线)
涉及 PCB 流程、ADC 原理及常用模块选型。
6.1 PCB 设计与工艺
| 问题 | 级别 | 详细解答 |
|---|---|---|
| PCB 设计流程 | 重点 | 原理图设计 (SCH) -> 网表导入 -> PCB 结构定义 (板框) -> 布局 (Layout) -> 布线 (Routing) -> DRC 检查 -> 丝印/铺铜 -> 输出 Gerber 文件。 |
| PCB 加工工艺 | 必问 | 开料 -> 钻孔 -> 沉铜 -> 线路曝光 (光刻) -> 蚀刻 (去除非线路铜) -> 阻焊 (绿油) -> 丝印 -> 表面处理 (沉金/喷锡) -> 成型。 |
| EMC认证 (流程) | 重点 | 需求设计 -> 规格定义 -> 系统设计 -> 阶段评审 -> 测试验证 (EMI干扰/EMS抗扰) -> 问题整改 -> 获得认证 (如 CE)。 |
6.2 模拟电路 (Analog Circuits)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| 请说说三极管和MOS管的区别? | 了解 | 三极管 (BJT):电流控制 (Ib 控 Ic),输入阻抗低,功耗大。 MOS管:电压控制 (Vgs 控 Id),输入阻抗极高,功耗低,适合高速开关。 |
| 什么是adc/dac/pwm? (定义) | 重点 | ADC:模拟转数字 (传感器采集)。 DAC:数字转模拟 (音频播放)。 PWM:脉冲宽度调制 (电机控制)。 |
| ADC 工作原理 | 必问 | 模数转换。过程:采样 -> 保持 -> 量化 -> 编码。 STM32 ADC 是 SAR (逐次逼近型)。精度由位数 (12bit) 决定,参考电压 (Vref) 决定量程。 |
| ADC的转换精度或者分辨率 | 必问 | 分辨率:位数 (如 12位,),决定能区分的最小电压变化。 精度:转换结果与真实值的接近程度。分辨率是精度的前提。 |
6.3 传感器与显示 (Peripherals)
| 问题 | 级别 | 详细解答 |
|---|---|---|
| MPU6050底层实现原理 | 了解 | 内部集成 3 轴陀螺仪 + 3 轴加速度计 + 磁力计。内置 DMP (数字运动处理器) 计算四元数/欧拉角。通过 I2C 读取寄存器数据。 |
| 按下的数字怎么在oled屏显示 (编码过程) | 了解 | 按键值 -> ASCII 码 -> 查 字模数组 (点阵) -> I2C 发送页地址+列地址 -> 写入数据点亮像素。 |
