期末复习知识点总纲
覆盖 12 章全部考点,基于 STM32F103 标准库与 HAL 库。⭐ 为高频考点,点击章节名跳转深入讲义。
📌使用说明
本页是期末复习总纲,按课程章节组织。复习策略:
① 必背关键词:每章开头的词必须能解释
② 重点知识:理解每个重点的参考答案
③ 高频问法:掌握答题套路
④ 综合题库:自测检验掌握度
1CH1 嵌入式系统概述 → 讲义
必背关键词:嵌入式系统定义;MCU vs MPU;ARM/DSP/FPGA区别;交叉编译;Harvard vs Von Neumann;硬实时 vs 软实时。
核心重点
- 嵌入式系统定义【填空】⭐:以应用为中心、计算机技术为基础,软硬件可裁剪的专用计算机系统。
- MCU vs MPU【选择】⭐:MCU(微控制器)=CPU+存储+外设集成在单芯片,强调控制;MPU(微处理器)=仅CPU,需外接存储/外设,强调计算。
- ARM/DSP/FPGA【简答】:ARM=通用嵌入式处理器;DSP=数字信号处理器(乘累加MAC);FPGA=可编程硬件逻辑。
- 硬实时 vs 软实时【选择】⭐:硬实时=超时即灾难(汽车ABS);软实时=超时可容忍(视频播放)。
- 交叉编译【填空】:在宿主机(Host)上编译,在目标机(Target)上运行。宿主机和目标机体系结构不同。
- 哈佛 vs 冯诺依曼【选择】:哈佛结构=程序存储与数据存储分离,可同时取指和取数(Cortex-M3);冯诺依曼=指令数据共享总线。
高频问法:① MCU和MPU的区别?② 什么是交叉编译?→ 宿主机编译,目标机运行。③ 硬实时举例?→ ABS、心脏起搏器。④ 嵌入式系统的特点?→ 专用、可裁剪、实时性、低功耗。
2CH2 ARM Cortex-M3 与 STM32 ⭐ → 讲义
必背关键词:RISC vs CISC;三级流水线;Cortex-M3(Thumb-2);NVIC嵌套向量中断;位带操作;AHB/APB总线;STM32F103时钟树(72MHz)。
核心重点
- RISC vs CISC【选择】⭐:RISC=精简指令集(ARM),等长指令、流水线友好、寄存器多;CISC=复杂指令集(x86),变长指令、微码实现。
- 三级流水线【填空】⭐:取指(Fetch) → 译码(Decode) → 执行(Execute)。PC = 当前执行指令地址 + 4(Thumb) / +8(ARM)。
- Cortex-M3特点【简答】:32位ARMv7-M架构;只支持Thumb-2指令集;内置NVIC;支持位带(Bit-Band)操作;哈佛结构。
- STM32F103时钟【填空】⭐:HSE外部高速晶振8MHz → 经PLL 9倍频 → SYSCLK=72MHz;AHB=72MHz;APB2=72MHz;APB1=36MHz(最大)。
- 总线架构【选择】:AHB=高性能总线(DMA/Flash/SRAM);APB2=高速外设(GPIO/USART1/SPI1/TIM1);APB1=低速外设(USART2-5/SPI2-3/TIM2-7/I2C/CAN)。
- 位带操作【填空】:将外设/SRAM区的每个位映射为位带别名区的一个字(32位),实现原子性位操作。
高频问法:① STM32F103主频多少?→ 72MHz。② APB1最大频率?→ 36MHz。③ 三级流水线是哪三级?④ Cortex-M3支持ARM指令集吗?→ 不支持,只支持Thumb-2。⑤ 位带操作的作用?→ 原子性位操作。
3CH3 STM32 与开发环境 → 讲义
必背关键词:STM32命名规范;三种开发方式(寄存器/标准库/HAL);Keil MDK工具链;CMSIS标准;标准外设库结构。
核心重点
- STM32命名【填空】⭐:STM32 F(通用) 103(增强型) C(48脚) 8(64K Flash) T(LQFP) 6(工业级-40~85°C)。
- 三种开发方式【选择】⭐:① 寄存器=直接操作,效率最高但难维护;② 标准外设库(SPL)=ST官方封装函数;③ HAL库=硬件抽象层+CubeMX代码生成。
- CMSIS【填空】:Cortex微控制器软件接口标准(ARM制定),统一了Cortex-M系列的软件接口。
- 标准库关键文件【选择】:stm32f10x.h=寄存器地址映射;system_stm32f10x.c=时钟配置(SystemInit);startup_stm32f10x_md.s=启动文件(中断向量表+Reset_Handler)。
- HAL库特点【简答】:基于回调机制(Callback);结合CubeMX图形化配置;可移植性强;Handle句柄管理外设。
高频问法:① STM32F103C8T6各字母含义?② 标准库和HAL库区别?→ 标准库=直接封装寄存器;HAL=硬件抽象+回调+CubeMX。③ CMSIS是谁制定的?→ ARM。④ startup文件作用?→ 中断向量表+堆栈初始化+调用SystemInit+跳转main。
4CH4 最小系统与嵌入式C ⭐ → 讲义
必背关键词:最小系统四要素(电源/时钟/复位/调试);BOOT启动模式;volatile/extern/static/const关键字;指针与地址。
核心重点
- 最小系统四要素【填空】⭐:电源(3.3V/VDD/VSS/VDDA) + 时钟(HSE 8MHz/LSE 32.768kHz) + 复位(NRST低有效) + 调试(SWD/JTAG)。
- BOOT启动模式【选择/填空】⭐:
BOOT1 BOOT0 启动区域 x 0 主闪存(Flash) ← 正常运行 0 1 系统存储器(ISP下载) 1 1 内置SRAM(调试) - volatile关键字【简答】⭐:告诉编译器该变量可能被外部(中断/硬件)修改,禁止优化,每次必须从内存重新读取。
- static关键字【选择】:局部变量前=延长生命周期(仅初始化一次);全局变量/函数前=限制作用域为本文件。
- extern关键字【填空】:声明变量/函数在其他文件中定义,用于跨文件访问。
- const关键字【选择】:修饰变量为只读,存储在Flash(ROM)中,节省RAM。
- 指针操作寄存器【填空】⭐:
*(volatile unsigned int*)0x40010C0C = 0xFF;直接操作地址 0x40010C0C 的寄存器。
高频问法:① BOOT0=0时从哪启动?→ 主Flash。② volatile用在什么场景?→ 中断标志、硬件寄存器、多线程共享变量。③ static修饰局部变量的效果?→ 延长生命周期,只初始化一次。④ 如何用指针直接操作外设寄存器?
5CH5 通用输入输出 GPIO ⭐ → 讲义
必背关键词:GPIO 8种模式;推挽 vs 开漏;上拉/下拉/浮空输入;ODR/IDR/BSRR寄存器;RCC时钟使能。
核心重点
- GPIO 8种工作模式【填空/选择】⭐:
输入4种:浮空输入(GPIO_Mode_IN_FLOATING)、上拉输入(GPIO_Mode_IPU)、下拉输入(GPIO_Mode_IPD)、模拟输入(GPIO_Mode_AIN → ADC使用)。
输出4种:推挽输出(GPIO_Mode_Out_PP)、开漏输出(GPIO_Mode_Out_OD)、复用推挽(GPIO_Mode_AF_PP)、复用开漏(GPIO_Mode_AF_OD)。 - 推挽 vs 开漏【简答】⭐:
特性 推挽 开漏 驱动 能输出高和低 只能拉低,高需外接上拉 驱动能力 强(25mA) 弱(需外接上拉) 典型应用 LED驱动/通用输出 I2C总线/电平转换 - 关键寄存器【填空】⭐:CRL/CRH=配置模式和速度;IDR=输入数据(只读);ODR=输出数据(读写);BSRR=位设置/复位(原子操作)。
- RCC时钟使能【填空】⭐:使用GPIO前必须先使能对应APB2时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); - GPIO速度【选择】:2MHz(低速)、10MHz(中速)、50MHz(高速)。速度越高EMI越大。
- 标准库初始化流程【简答】⭐:① 使能时钟(RCC) → ② 定义GPIO_InitTypeDef结构体 → ③ 配置引脚/模式/速度 → ④ 调用GPIO_Init()。
高频问法:① 推挽和开漏区别?② LED一般用什么模式?→ 推挽输出。③ I2C为什么用开漏?→ 线与逻辑+电平转换。④ BSRR和ODR区别?→ BSRR原子操作不会被中断打断。⑤ 使用GPIO前第一步?→ 使能RCC时钟。
6CH6 中断 ⭐ → 讲义
必背关键词:NVIC嵌套向量中断控制器;中断优先级(抢占+响应);EXTI外部中断;AFIO复用;中断服务函数ISR;中断标志清除。
核心重点
- NVIC优先级【填空/选择】⭐:STM32使用4位优先级(0-15),分为抢占优先级(可嵌套)和响应优先级(同抢占时先响应)。数值越小优先级越高。
- 优先级分组【选择】⭐:
分组 抢占位:响应位 说明 Group 0 0:4 无抢占,16级响应 Group 2 2:2 4级抢占,4级响应(常用) Group 4 4:0 16级抢占,无响应 - EXTI外部中断【简答】⭐:支持16条外部中断线(EXTI0~15),每条对应PA~PG同一编号引脚(通过AFIO选择)。触发方式:上升沿/下降沿/双边沿。
- EXTI与NVIC关系【选择】:EXTI0~4各有独立中断通道;EXTI5~9共享一个;EXTI10~15共享一个。
- 中断服务函数【填空】⭐:函数名必须与启动文件中中断向量表一致(如EXTI0_IRQHandler);函数内必须清除中断标志,否则重复进入中断。
- 中断配置流程(标准库)【简答】⭐:① 使能AFIO时钟 → ② GPIO配置为输入 → ③ AFIO映射到EXTI线 → ④ 配置EXTI(触发方式) → ⑤ 配置NVIC(优先级) → ⑥ 编写ISR并清除标志。
高频问法:① 抢占优先级和响应优先级区别?→ 抢占可嵌套,响应决定同抢占的先后。② EXTI5~9为什么共享中断?→ 中断通道有限。③ 中断服务函数不清标志会怎样?→ 反复进入中断。④ PA0和PB0能同时使用外部中断吗?→ 不能,EXTI0只能选一个。
7CH7 串口通信 UART ⭐ → 讲义
必背关键词:USART/UART;异步通信;波特率(bps);帧格式(起始+数据+校验+停止);查询/中断/DMA三种收发方式。
核心重点
- USART vs UART【选择】:USART=通用同步/异步收发器(支持同步+异步);UART=仅异步。STM32有USART1(APB2)、USART2/3(APB1)。
- 帧格式【填空】⭐:1位起始位(低) + 8/9位数据位 + 可选校验位(奇/偶) + 1/1.5/2位停止位(高)。空闲状态为高电平。
- 波特率计算【填空】⭐:USART1挂在APB2(72MHz)上:波特率 = fCLK / (16 × USARTDIV)。如USARTDIV=39.0625 → 波特率=72M/(16×39.0625)=115200。
- 三种收发方式对比【选择】⭐:
方式 特点 CPU占用 查询(轮询) 死等标志位 最高(阻塞) 中断 有数据时触发 中等 DMA 硬件搬运 最低 - 关键标志位【填空】:TXE=发送数据寄存器空(可写入);TC=发送完成;RXNE=接收数据寄存器非空(可读取)。
- printf重定向【简答】⭐:重写fputc()函数,将字符发送到USART,即可使用printf通过串口输出。需开启MicroLIB。
高频问法:① 串口空闲状态是高还是低?→ 高电平。② 如何实现printf串口输出?→ 重写fputc + MicroLIB。③ 查询、中断、DMA哪个CPU占用最低?→ DMA。④ USART1挂在哪条总线?→ APB2(72MHz)。⑤ TXE和TC的区别?→ TXE=移入移位寄存器后空,TC=完全发送完。
8CH8 直接存储器访问 DMA → 讲义
必背关键词:DMA(Direct Memory Access);存储器→存储器/外设→存储器/存储器→外设;Normal vs Circular模式;通道优先级;DMA传输计数器。
核心重点
- DMA原理【简答】⭐:无需CPU参与,在外设与存储器或存储器之间直接传输数据,大幅降低CPU负荷。
- STM32F103 DMA资源【填空】:DMA1=7个通道;DMA2=5个通道。每个通道对应固定外设请求(如DMA1_CH4=USART1_TX)。
- 三种传输方向【选择】:① 外设→存储器(ADC采集);② 存储器→外设(串口发送);③ 存储器→存储器(数据复制,仅DMA2支持或M2M模式)。
- Normal vs Circular【选择】⭐:
模式 行为 典型应用 Normal 传完停止,计数器归0 一次性发送 Circular 传完自动重载,循环传输 ADC连续采集 - DMA优先级【选择】:软件优先级4级(Very High/High/Medium/Low);软件相同时按通道编号越小优先级越高。
- DMA配置要素【填空】:源地址、目标地址、传输方向、数据宽度(Byte/HalfWord/Word)、传输数量、模式(Normal/Circular)、优先级。
高频问法:① DMA的意义?→ 不占CPU即可传输数据。② Normal和Circular区别?③ ADC连续采集应用什么模式?→ Circular。④ DMA1有几个通道?→ 7个。
9CH9 定时器 Timer ⭐ → 讲义
必背关键词:高级定时器(TIM1/8);通用定时器(TIM2-5);基本定时器(TIM6/7);PSC/ARR/CCR;定时公式;PWM生成;输入捕获。
核心重点
- 定时器分类【选择】⭐:
类型 编号 功能 高级 TIM1/TIM8 PWM+互补输出+死区+刹车 通用 TIM2~TIM5 定时+PWM+输入捕获+编码器 基本 TIM6/TIM7 仅定时(触发DAC) - 定时公式【填空】⭐⭐:T = (ARR+1) × (PSC+1) / FCLK。例:FCLK=72MHz,PSC=7199,ARR=9999 → T=(10000×7200)/72000000 = 1秒。
- 计数模式【选择】:向上计数(0→ARR,最常用);向下计数(ARR→0);中央对齐(0→ARR→0,生成对称PWM)。
- PWM生成【填空】⭐:频率=FCLK/[(ARR+1)×(PSC+1)];占空比=CCR/(ARR+1)×100%。
PWM模式1:CNT < CCR时输出有效;PWM模式2:CNT < CCR时输出无效。 - 输入捕获【简答】⭐:捕获外部信号的跳变沿时刻,锁存计数器值到CCR。可测量脉冲宽度、频率、占空比。
- 关键寄存器【填空】:PSC=预分频器;ARR=自动重装载值(溢出周期);CNT=当前计数值;CCR=捕获/比较值(PWM阈值)。
高频问法:① 定时1秒如何配置?→ PSC=7199,ARR=9999,72MHz。② PWM占空比公式?→ CCR/(ARR+1)。③ 通用定时器和高级定时器区别?→ 高级多互补输出和死区。④ 中央对齐模式的PWM有什么特点?→ 对称波形。⑤ 输入捕获可以测什么?→ 频率、脉宽、占空比。
10CH10 模数转换器 ADC ⭐ → 讲义
必背关键词:12位逐次逼近型ADC;转换公式;规则通道/注入通道;单次/连续/扫描模式;ADC校准。
核心重点
- ADC基本参数【填空】⭐:STM32F103 ADC为12位逐次逼近型(SAR),分辨率4096级(0~4095),最快转换时间1μs(ADC时钟14MHz时)。
- 转换公式【填空】⭐⭐:数字值 = Vin / Vref × 4095;反推电压:Vin = 数字值 / 4095 × Vref。Vref一般=3.3V。
- 规则通道 vs 注入通道【选择】⭐:规则通道=正常转换序列(最多16个),转换结果存DR(1个,需DMA);注入通道=高优先级(最多4个),各有独立数据寄存器,可打断规则转换。
- 转换模式【选择】⭐:
模式 说明 单次 转换一次后停止 连续 自动重复转换 扫描 按序列依次转换多个通道 连续+扫描 循环扫描所有通道(常用) - ADC时钟【填空】:ADC时钟由APB2经预分频得到(2/4/6/8分频),最大不超过14MHz。72MHz/6=12MHz(常用)。
- ADC校准【填空】:每次上电后需执行校准(Calibration),消除电容组失配误差。标准库:ADC_ResetCalibration → ADC_StartCalibration。
- 多通道采集【简答】⭐:多通道用扫描模式+DMA,规则通道只有1个DR寄存器,不用DMA会覆盖。
高频问法:① 12位ADC分辨率多少?→ 4096级(0~4095)。② 3.3V参考下1.65V对应数字值?→ 1.65/3.3×4095≈2048。③ 为什么多通道需DMA?→ 规则通道只有1个DR。④ ADC最大时钟?→ 14MHz。⑤ 注入通道和规则通道区别?→ 注入可打断规则,有独立寄存器。
11CH11 从模块到项目 → 讲义
必背关键词:模块化设计;.h/.c分离;防重复包含;驱动层/应用层分层;代码规范(命名/注释/缩进)。
核心重点
- 模块化设计原则【简答】:高内聚低耦合;.h文件放声明(函数原型/宏/类型),.c文件放实现;每个外设模块独立(.h+.c)。
- 头文件防重复包含【填空】⭐:
#ifndef __MODULE_H/#define __MODULE_H/ ... /#endif(条件编译守卫)。 - 分层架构【简答】:硬件层(寄存器) → 驱动层(BSP封装GPIO/UART等) → 中间层(协议/算法) → 应用层(业务逻辑/main)。
- 全局变量管理【简答】:尽量少用全局变量;必须用时在.c文件中定义,在.h文件中用extern声明。
- 调试技巧【选择】:串口调试(printf输出);LED指示(快速判断执行位置);断点调试(Keil仿真);逻辑分析仪(时序分析)。
高频问法:① 头文件防重复包含怎么写?② .h和.c分离的原则?③ 嵌入式分层架构有哪几层?④ 全局变量如何跨文件使用?→ .c定义 + .h用extern声明。
12CH12 嵌入式操作系统 FreeRTOS ⭐ → 讲义
必背关键词:RTOS实时操作系统;任务(Task);优先级(数值越大越高 — 与NVIC相反!);任务状态(就绪/运行/阻塞/挂起);信号量/队列/互斥量;优先级反转与优先级继承。
核心重点
- RTOS vs 裸机【简答】⭐:裸机=前后台系统(main循环+中断),无法多任务并发;RTOS=抢占式多任务调度,响应实时性更好。
- FreeRTOS优先级【填空】⭐⭐:数值越大优先级越高(与NVIC正好相反!)。0=空闲任务(最低),configMAX_PRIORITIES-1=最高。
- 任务四种状态【选择】⭐:就绪(Ready)=等待调度;运行(Running)=正在执行;阻塞(Blocked)=等待事件/延时;挂起(Suspended)=被vTaskSuspend暂停。
- 任务创建【填空】:
xTaskCreate(函数指针, 名字, 堆栈大小, 参数, 优先级, 句柄);之后调用vTaskStartScheduler()启动调度器。 - 任务间通信【选择】⭐:
机制 用途 队列(Queue) 传递数据(FIFO) 信号量(Semaphore) 同步/资源计数 互斥量(Mutex) 互斥访问(支持优先级继承) 事件组(EventGroup) 多事件同步 任务通知(Notification) 轻量级(无需创建对象) - 优先级反转与继承【简答】⭐⭐:优先级反转=高优先级任务被低优先级间接阻塞(中优先级抢占了持锁的低优先级)。解决:使用Mutex互斥量,支持优先级继承(临时提升持锁任务优先级)。
- vTaskDelay vs vTaskDelayUntil【选择】:vTaskDelay=相对延时(从调用时刻起);vTaskDelayUntil=绝对延时(精确周期,不受执行时间影响)。
- 临界区【填空】:进入临界区taskENTER_CRITICAL(),退出taskEXIT_CRITICAL(),期间禁止任务调度和中断。
高频问法:① FreeRTOS优先级和NVIC优先级方向一样吗?→ 相反!FreeRTOS数大=高,NVIC数小=高。② 什么是优先级反转?怎么解决?→ 互斥量+优先级继承。③ 信号量和互斥量区别?→ 互斥量支持优先级继承,有归还者限制。④ vTaskDelay和vTaskDelayUntil区别?⑤ 任务通知比队列快在哪?→ 不需创建内核对象,直接写任务TCB。
🎯自测(点击展开)
MCU和MPU的区别?
MCU(微控制器)=CPU+存储+外设集成在单芯片,强调控制,如STM32;MPU(微处理器)=仅CPU,需外接存储和外设,强调计算,如ARM Cortex-A系列。
STM32F103主频是多少?时钟链路?
主频72MHz。HSE外部8MHz晶振 → PLL 9倍频 → SYSCLK=72MHz。AHB=72MHz,APB2=72MHz,APB1=36MHz(最大)。
BOOT0=0时从哪里启动?
从主闪存(Flash)启动,这是正常运行模式。BOOT0=1且BOOT1=0时从系统存储器启动(ISP下载)。
volatile关键字的作用?
告诉编译器变量可能被外部修改(中断/硬件),禁止优化,每次必须从内存重新读取。常用于:中断标志、外设寄存器、多任务共享变量。
推挽输出和开漏输出的区别?
推挽:能输出高低电平,驱动能力强(25mA),用于LED/通用输出。开漏:只能拉低,高电平需外接上拉电阻,用于I2C/电平转换/线与逻辑。
NVIC抢占优先级和响应优先级的区别?
抢占优先级:可嵌套打断当前中断。响应优先级:同抢占时决定先响应谁。数值越小优先级越高。
定时1秒如何配置(72MHz)?
T=(ARR+1)×(PSC+1)/72MHz=1s。取PSC=7199, ARR=9999,则T=7200×10000/72000000=1秒。
PWM占空比公式?
占空比 = CCR/(ARR+1) × 100%。改变CCR可调节占空比,改变ARR+PSC可调节频率。
12位ADC的分辨率和转换公式?
分辨率4096级(0~4095)。数字值=Vin/Vref×4095。反推:Vin=数字值/4095×Vref。Vref一般=3.3V。
多通道ADC采集为什么需要DMA?
规则通道只有1个数据寄存器DR,多通道扫描时后一个通道数据会覆盖前一个,必须用DMA及时搬运每个通道的转换结果。
FreeRTOS优先级和NVIC优先级方向一样吗?
相反!FreeRTOS:数值越大优先级越高(0=空闲最低)。NVIC:数值越小优先级越高(0=最高优先级)。
什么是优先级反转?如何解决?
优先级反转:高优先级任务被低优先级间接阻塞(因为中优先级抢占了持锁的低优先级)。解决方案:使用互斥量(Mutex),它支持优先级继承——临时将持锁低优先级任务提升到等待者的优先级。
📝综合题库
选择题点选即时判分;填空题输入后"检查"或"显示答案"。
已答 0/0答对 0正确率 —
已答 0/0答对 0