单片机答辩

一、时钟树

1.1 基础时钟源

1.1.1 三种振荡器

1. RC振荡器

  • **无需外部电路,需要电源;**成本低、精度低、启动快

2. 无源晶体振荡器

  • 需要外部电路 (匹配电容+芯片内部电路),无需单独供电;成本中、精度高、启动速度中

3. 有源晶体振荡器

  • 无需外部电路,需要单独供电;成本高、精度高、启动速度中

1.1.2 四种时钟源

1. HSI(内部高速时钟)

  • 来源:内部 16MHz RC 振荡器

  • 用途:直接做系统时钟,或作为 PLL 输入

  • 优点:成本低(无需外部元件)、启动速度快

  • 缺点:精度不如外部晶振(即使校准后)

  • 自带,快但不准

2. HSE(外部高速时钟)

  • 来源:外部有源晶振或无源晶振

  • 用途:直接做系统时钟,或作为 PLL 输入

  • 优点:精度高

  • 缺点:需要外部元件,成本高,启动慢

  • 外接,准但启动慢

3. LSI(内部低速时钟)

  • 来源:内部 RC 振荡器,约 32kHz

  • 用途:独立看门狗(IWDG)、RTC(低精度场景)

  • 特点:功耗极低,可在停机和待机模式下保持运行

  • 缺点:精度差,频率随温度波动

  • 自带低速,省电但不准

4. LSE(外部低速时钟)

  • 来源:外部 32.768kHz 晶振或陶瓷谐振器

  • 用途:RTC(实时时钟/日历)、其他定时功能

  • 优点:功耗低、精度高

  • 缺点:需要外部晶振

  • 外接晶振,准又省电

1.2 SYSCLK(系统时钟)

1.2.1 SYSCLK含义

SYSCLK 是系统时钟 ,也就是 CPU、内存、总线(AHB/APB)等核心部件的工作时钟,决定了处理器执行指令的速度。

1.3 外设时钟

1.3.1 HCLK(AHB 总线时钟

1 HCLK含义

HCLK (High-speed Clock )是 AHB 总线时钟 ,由 SYSCLK(系统时钟)经过 AHB Prescaler(AHB预分频器) 分频后得到,为 AHB 总线上的高速外设提供时钟。

分频器把系统时钟分配成不同的时钟域,然后输出给不同的模块使用(不同模块的最大时钟频率不一样)

2 HCLK 提供时钟的模块

模块 说明
DMA 直接存储器访问,高速数据传输
Cortex System Timer 系统滴答定时器,常用于操作系统心跳
FCLK 处理器自由运行时钟,休眠时仍保持运行
APB1 低速外设总线,最大42MHz
APB2 高速外设总线,最大84MHz
PTP 精确时间协议,用于网络时钟同步(以太网IEEE 1588)

1.3.2 外设控制器时钟

1 外设时钟来源

总线 最大频率 一句话作用 典型外设
AHB 168MHz 给高速核心模块提供时钟 DMA、GPIO、CRC、Flash、SRAM
APB1 42MHz 给低速外设提供时钟 USART2/3/4/5、I2C1/2/3、SPI2/3、CAN、DAC、PWR
APB2 84MHz 给高速外设提供时钟 USART1、SPI1、ADC1/2/3、TIM1/8/9/10/11、SYSCFG

外设用哪条总线,就由哪条总线的时钟驱动,各总线频率不同,满足不同外设的速度需求。

当 APB1 预分频器分频系数 APB1大于 1 时,定时器时钟会自动 乘以 2 ,让定时器获得比总线更高的时钟,以提高 PWM 精度和计时分辨率。


2 一条总线上挂多个外设的含义

  • 同一条总线上的外设共享同一个时钟源

  • 如果该总线的时钟被关闭,上面挂载的所有外设都会停止工作

  • 每个外设可以独立控制自己的时钟使能(在RCC寄存器中配置)


1.4 RTC 时钟源

RTC(实时时钟)的输入时钟可以由以下三种来源提供,通过 RTC Clock Mux(RTC时钟选择器) 选择:

时钟源 类型 典型频率 说明
LSE 外部低速晶振 32.768kHz 精度高,功耗低,RTC首选
LSI 内部低速RC ~32kHz 精度低,省电但不准
HSE(分频后) 外部高速晶振 4~26MHz(分频后得到1MHz以内) 需要外接晶振,分频后给RTC用

二、UART控制器原理

2.1 定义

2.1.1 串口通讯

串口通讯是一种串行 传输方式,即数据一位一位地按顺序进行发送和接收。在嵌入式系统中,它通常由UART控制器 硬件实现。由于接线少、协议简单,它广泛用于嵌入式系统、传感器、单片机与外围设备之间的数据交换。


串行 vs 并行方式

特性 串行通讯 并行通讯
传输方式 一位接一位,通过 1 条数据线 传输 多位同时(如 8 位),通过 多条数据线 传输
硬件成本 低(只需 2-3 根线:TX、RX、GND) 高(需要多根数据线 + 控制线)
传输速度 单比特速率高(可达几 Mbps 以上),总体吞吐量可很高 理论上多条线同时传,吞吐量高,但易受信号干扰和线间延迟影响
传输距离 长(RS-232/RS-485 可到十几米甚至千米) 短(通常不到 1 米,易受串扰和时钟偏移限制)
抗干扰能力 较强(差分形式的 RS-422/485 更强) 较弱(多条线同时翻转,串扰明显)
典型应用 单片机调试、GPS、蓝牙模块、工业总线 老式打印机、并口存储器、芯片间短距高速总线(如并口 LCD)
  • 串口:省线、抗干扰、适合远距离或简单连接。

  • 并口:一次传多位,短距离内吞吐量高,但连线多、不宜长距离。

2.1.2 波特率

  • 码元指传输线上的一个信号变化(在串口里就是一个电平位宽)

  • 波特率 :1秒内传输的码元个数(单位:Baud)

  • 比特率 :1秒内传输的比特个数(单位:bps)

  • 通用公式:比特率 = 波特率 × 每个码元对应的二进制位数

  • 在普通串口(UART)中 :每个码元携带 1个bit(高低电平的信息) ,因此 波特率 = 比特率(数值上相等)

两个设备的波特率需一致,不然会造成数据丢失

比特率的计算

USARTDIV 的小数部分存入 BRR 寄存器时:

  • 16倍采样(OVER8=0) :小数实际值 × 16,取整数存入(4位,精度 1/16)

  • 8倍采样(OVER8=1) :小数实际值 × 8,取整数存入(3位,精度 1/8)

  • 小数乘以16(或8),是为了算出这个小数相当于多少个1/16(或1/8)刻度,结果取整存入寄存器。

2.1.3 数据帧

1 一帧完整的数据帧组成

组成部分 说明
起始位 低电平开始,表示一帧数据的开始
数据位 通常为 8 位(也可选 9 位),实际传输的有效数据
校验位 可选(奇校验/偶校验),用于简单错误检测
停止位 高电平结束,常见为 1 位(也可选 0.5、1.5、2 位)

2 数据位与校验位的关系

  • 配置为 8 位数据位(从低位开始传) + 启用校验 → 实际有效数据只有 7 位,1 位被校验位占用

  • 配置为 9 位数据位 → 通常是为了使用校验位

  • 常用模式:8N1(8 位数据 + 无校验 + 1 位停止位)

串口一帧数据由起始位(低电平开始)、数据位(常用8位)、可选校验位(奇/偶校验,占用数据位)、停止位(高电平结束,常用1位)组成。

3 奇偶校验规则

校验类型 规则
奇校验 一帧数据中高电平个数为 奇数
偶校验 一帧数据中高电平个数为 偶数

发送方根据要发送的数据计算出校验位(奇或偶)并附加在帧中发送;接收方收到数据后,用同样的规则重新计算校验位,如果与接收到的校验位不一致,则判定该帧数据传输过程中发生了错误。

弊端:校验位只能检测单比特错误 ,不能纠正错误,也不能检测偶数个比特错误。

2.2 串口收发流程

2.2.1 DR 寄存器

在许多串口控制器(如 STM32)中,TDRRDR 实际上是共用同一个地址的 DR(数据寄存器)

  • 写 DR → 数据进入 TDR(发送)

  • 读 DR → 数据来自 RDR(接收)

DR 是程序与串口控制器之间唯一的"数据接口"

DR 寄存器作为程序与串口硬件之间的缓冲,避免了直接操作慢速移位寄存器导致的时序耦合,让 CPU 能以字节/字为单位一次性读写数据,而硬件独立完成逐位收发。


2.2.2 发送流程

步骤 操作 说明
1 将数据写入内存 准备要发送的数据
2 程序将内存数据写入 DR 寄存器 DR 自动将数据送入 TDR
3 TDR 数据自动转入发送移位寄存器(从低位开始) 硬件自动完成
4 移位寄存器将数据从 TX 引脚逐位发出 串行输出

2.2.3 接收流程

步骤 操作 说明
1 RX 引脚接收数据 逐位进入接收移位寄存器
2 接收移位寄存器接收完整一帧 硬件自动完成
3 数据自动转入 RDR 寄存器 硬件自动完成,RDR 可通过 DR 读取
4 程序读取 DR 寄存器(从高位开始读) 实际读到的是 RDR 的数据
5 将数据存入内存使用 程序处理收到的数据

2.3 硬件流控

2.3.1 硬件流控含义

一种通过物理信号线 自动控制数据传输的机制,用于协调两个设备之间的数据流动,防止数据丢失或溢出

2.3.2 硬件流控 vs 软件流控

对比项 硬件流控 (RTS/CTS) 软件流控 (XON/XOFF)
实现方式 物理信号线 在数据流中插入特殊字节
响应速度 实时 需要解析数据,较慢
占用数据带宽 不占用 特殊字节可能干扰二进制数据
额外接线 需要2根额外信号线 无需额外接线

2.3.3 实际应用

nCTS表示低电平的时候信号有效

  • nRTS 是本设备的"接收通知":告诉对方"我能收/不能收"

  • nCTS 是本设备的"发送许可":告诉本设备"对方允许我发/禁止我发"

信号线 方向(本设备) 连接对象 本设备中的作用 有效电平
TX 输出 对方的 RX 发送数据 数据信号
RX 输入 对方的 TX 接收数据 数据信号
nRTS 输出 对方的 nCTS 告诉对方:我是否准备好接收 低电平=准备好
nCTS 输入 对方的 nRTS 判断对方是否允许我发送 低电平=允许发送

2.5 RCC

1 作用

前面的检验(协议头、长度、结束位)只能验证数据格式的"完整性"和"边界",而CRC校验能验证数据内容的"正确性",防止数据在传输中发生比特错误(比如0变1)而格式却碰巧正确。

2 原理

每个传感器自带的原理不同,比如PM2.5是数据位相加,接收的时候会得到数据位和校验位;

传感器发送的 "数据位"固定规则(如累加和、异或、CRC )计算出一个 "校验位" 一并发出;接收端用 同样的规则 重新计算收到的数据位,若结果 ≠ 收到的校验位,则说明传输或数据出错。

3 与奇偶校验的区别

奇偶校验是"简陋版",只能发现奇数个错误;CRC是"加强版",能发现几乎所有错误,工业标准都在用它。

1.6 电平标准

1 三种常见电平标准对比

标准 逻辑 0 电平 逻辑 1 电平 特点
TTL 0V ~ 0.8V 2.4V ~ 5V 短距离(<1m),板级通信
RS232 +3V ~ +15V -3V ~ -15V 长距离(约15m),负逻辑
RS485 A-B:-2V ~ -6V A-B:+2V ~ +6V 超长距离(1200m),差分抗干扰

TTL和RS232都是一对一,RS485一对多,但是单向的而且同一时刻只能选一个设备进行通信

2 转换芯片与常用接口

电平标准 转换芯片(TTL ↔ 标准) 常用接口
TTL 不需要转换 排针、杜邦线
RS232 MAX232、SP3232、MAX3232 DB9(9针)、DB25
RS485 MAX485、SP3485、MAX13487 接线端子(A/B)、RJ45

3 Modbus 协议

项目 内容
定义 一种基于串行通信的工业通信协议
目的 为工业现场提供通用的通信标准
功能 实现不同设备之间的数据交换和控制
一帧结构 地址域 + 功能码 + 数据 + 差错校验
地址域 1字节,1~247,标识目标设备
功能码 操作类型(如 0x03 读寄存器、0x06 写寄存器)
数据域 寄存器地址、数量或具体数据内容
差错校验 RTU模式用CRC,ASCII模式用LRC
通讯机制 应答机制(主机请求 → 从机响应)

三、DMA控制器原理

3.1 介绍

1 概念

  • DMA 是一种无需 CPU 干预即可在外设与存储器之间直接传输数据的机制,通过减少 CPU 开销来提升大量数据传输时的系统性能。
  • CPU只需要一开始对DMA进行配置:指定从哪个寄存器到哪个外部设备
  • DAM搬完后会自动向CPU发送消息,通知CPU搬完了

2 DMA 的仲裁器

  • STM32F407 有 2 个 DMA 控制器
  • 每个控制器有 8 个数据流
  • 每个数据流 有 8 个通道
  • 1 个数据流每次只能搬运 1 个通道的数据
项目 说明
作用 管理多个 DMA 通道对系统总线的竞争访问,协调传输顺序
软件优先级(4级) 很高 > 高 > 中 > 低(在 DMA_CCRx 寄存器中设置)
硬件优先级 当软件优先级相同时,通道编号越小,优先级越高

3 DMA事务

操作 说明
从源地址读取数据 通过 DMA_SxPAR(外设地址)或 DMA_SxM0AR(存储器地址)寻址,从源端读取数据
向目的地址写入数据 通过 DMA_SxPAR 或 DMA_SxM0AR 寻址,将读取的数据写入目的端
传输计数器递减 每次完整传输完成后,DMA_SxNDTR 计数器减1,记录剩余待传输的数据项数目

3.2 DMA传输

1 DMA 传输方向配置

DIR1:0 传输模式 源地址 目标地址
00 外设 → 存储器 DMA_SxPAR(外设地址) DMA_SxM0AR(存储器地址)
01 存储器 → 外设 DMA_SxM0AR(存储器地址) DMA_SxPAR(外设地址)
10 存储器 → 存储器 DMA_SxM0AR(源存储器地址) DMA_SxM0AR(目标存储器地址)
  • 通过 DMA_SxCR 寄存器的 DIR1:0选择传输方向

2 FIFO

FIFO 大小

每个数据流都有一个独立的 4 字(16 字节)FIFO。

工作流程

  • 启用 FIFO 后,源地址中的数据不会直接由 DMA 搬运到目标地址。
  • 数据先从源地址读取,存入 FIFO 缓冲区中。
  • 当 FIFO 中积累的数据达到预设的阈值时,DMA 才会将数据从 FIFO 中取出,写入到目标地址。

核心特点

FIFO 起到了缓冲作用,可以将多个小数据量合并为一次突发传输,提高总线利用效率。

3.3 指针增量

控制位说明

DMA_SxCR 寄存器中的 PINC 位控制外设地址指针是否递增MINC 位控制存储器地址指针是否递增。


递增模式

  • 当设置为增量模式时,每次传输完成后,下一次传输的地址 = 前一次地址 + 增量值。
  • 增量值由数据宽度决定:字节(8位)时加1,半字(16位)时加2,字(32位)时加4。

常量模式

当设置为保持常量时,每次传输都使用同一个内存地址,反复从同一位置读取数据或写入同一位置。


典型应用

递增模式适合传输数组或连续内存块。

常量模式适合反复读写同一个外设寄存器(如 ADC 数据寄存器)。

3.4 数据宽度

  • 数据宽度通过 DMA_SxCR 寄存器的 PSIZE(外设数据宽度)和 MSIZE(存储器数据宽度)位配置。

直接模式

  • 直接模式下,源和目标的传输数据宽度必须相等。
  • 宽度由 DMA_SxCR 中的 PSIZE 位定义,MSIZE 位在此模式下无效。

FIFO 模式

  • 使用内部 FIFO 时,FIFO 进行数据对齐和打包;源和目标的数据宽度可以通过 PSIZE 和 MSIZE 位分别编程,支持 8 位、16 位或 32 位,两者可以不同。

宽度不等时的传输计数

  • 当 PSIZE 和 MSIZE 不相等时,DMA_SxNDTR 寄存器中配置的传输数据项数目,其数据宽度等于外设总线的宽度(由 PSIZE 位定义)。
  • 举例:PSIZE 配置为半字(16位),则实际传输的字节数 = 2 × NDT(NDT 为 DMA_SxNDTR 中的计数值)。

四、ADC控制原理

4.1 介绍

1 定义

ADC的作用是将连续变化的模拟信号(如电压)转换为离散的数字信号,供微处理器读取和处理。

2 工作流程

  • 采样:以固定时间间隔(采样周期T)采集连续模拟信号,将其在时间上离散化。采样频率Fs=1/T,根据奈奎斯特定理,Fs > 2倍信号最高频率时,原始信号可完全恢复。采样频率越高,信号损失越小。

  • 量化 :将采样后幅值连续的信号进行分级,用离散的等级值代替连续的幅值 。量化方式有只舍不入和四舍五入两种,量化间隔越小精度越高,量化过程必然存在量化误差(大小为一个量化间隔)。

  • 编码:将量化后的等级值转换为二进制数字信号输出,供微处理器读取和处理。

3 量化中的参数

  • 参考电压(VREF) :ADC量化的基准,由 VREF+​(正参考电压)和 VREF−​(负参考电压)共同决定。VREF+范围 1.8V ~ VDDA,VREF−​ 通常接地(VSSA)。量化间隔 =(VREF+−VREF−)/2的(分辨率位数)次方。 STM32的参考电压通常为3.3V。

  • 分辨率 :决定将参考电压划分的份数,用位数表示(如8位、10位、12位),通过 ADC_CR1.RES 位配置。**分辨率越高,量化间隔越小,能测量的最小电压就越小,精度越高。**例如:10位分辨率将电压分成1024份,量化间隔 = 参考电压 / 2^10。

4.2 常见的 ADC 类型

1 并联比较型

工作原理

参考电压 VREF经电阻串(R1~R8)分出多个等间隔的比较电平,输入电压 VIN同时与所有比较电平进行比较,比较结果经编码器直接输出二进制数字(D0,D1...)。

主要优缺点:

  • 优点:转换速度极快,结构简单。

  • 缺点 :分辨率提高时比较器和电阻数量会指数级增加(2的N次方的电阻;2的N次方−1 个比较器 ),功耗大、成本高、芯片面积大,因此通常只用于低分辨率(≤8位)、超高速的场合。

2 逐次逼近型

二分算法

逐次逼近型ADC采用二分搜索算法:先比较输入电压与参考电压的1/2,若输入大于1/2参考电压则保留该位为1并累加1/4参考电压继续比较 ,否则该位清零并比较1/4参考电压,以此类推逐次逼近。比较次数等于分辨率位数,N位ADC需比较N次,最终累加值即为转换结果。

电路结构

控制电路逐位产生数字码,经D/A转换器生成模拟电压与输入电压 VINVIN​ 比较,根据比较结果逐次确定每一位的取值,最终逼近得到数字输出 D2 D0。

4.3 寄存器工作原理

4.3.1 输入通道

ADC通道是模拟信号输入到ADC控制器的单个输入路径 ,一个ADC控制器可具有多个通道。

  • 外部通道(16个)连接外部GPIO引脚;
  • 内部通道(仅ADC1有,共3个):
  • 通道16连接温度传感器
  • 通道17连接内部参考电压
  • 通道18连接VBAT(电池/电源采集)
  • 模拟电压输入范围为 VREF−≤VIN≤VREF+。

4.3.2 转换序列

转换序列是指多个ADC通道以任意顺序进行转换 时的长度 (需要转换的通道个数)和顺序(通道转换的先后次序)配置。

转换序列有两种:规则序列和注入序列

1 规则序列

规则序列(最多16个通道):从规则序列1(SQ1)到规则序列16(SQ16),按SQ1→SQ16依次转换。配置方法:

  1. 通过 ADC_SQR1.L 位设置序列长度(长度)

  2. 通过 ADC_SQRx.SQRn 位添加转换通道(顺序严格按照从SQ1往后):

    • ADC_SQR3 :存放 SQ1~SQ6(转换的最前面 6 个)

    • ADC_SQR2 :存放 SQ7~SQ12

    • ADC_SQR1 :存放 SQ13~SQ16(转换的最后 4 个)

2 注入序列

注入序列长度最大为4(JSQ1~JSQ4),转换顺序与长度配置相关,转换始终从 JSQ4(编号最大)开始,向 JSQ1(编号最小)方向反向进行终点始终是JSQ4,起点随长度增加而前移。

配置方法:

  1. 通过 ADC_JSQR.IL 位设置注入序列长度

  2. 通过 ADC_JSQR.ISQx 位添加转换通道(把要放入的通道放入ISQX里 ,这样就能按照序列长度的顺序来一次读取通道)(ISQ4对应JSQ4,ISQ3对应JSQ3,以此类推)

注入序列主要用于两种场景,通过 ADC_CR1.JAUTO 位选择模式:

  • 自动注入JAUTO=1):规则序列转换完成后自动转换注入序列 ,无需软件或外部触发,但必须禁止注入通道外部触发。适用于规则序列长度不足

  • 触发注入JAUTO=0):通过外部事件或软件触发启动,可打断正在进行的规则序列,转换完成后自动恢复规则序列。适用于需要临时插入高优先级转换

4.3.3 转换触发源

ADC转换启动方式分为软件触发事件触发两种,规则序列和注入序列各有独立的触发配置。

软件触发:

  • 规则序列:向 ADC_CR2.SWSTART 写1触发,转换开始后硬件自动清零

  • 注入序列:向 ADC_CR2.JSWSTART 写1触发,转换开始后硬件自动清零

  • 前提:ADC控制器需先使能(向 ADC_CR2.ADON 写1上电)

事件触发:

  • 通过外部事件(定时器捕获、EXTI中断线等)触发转换

  • 规则序列:ADC_CR2.EXTEN 选择触发极性,ADC_CR2.EXTESEL 选择事件源

  • 注入序列:ADC_CR2.JEXTEN 选择触发极性,ADC_CR2.JEXTESEL 选择事件源

  • 支持上升沿、下降沿或双边沿触发

4.3.4 转换时间

1 ADC时钟来源

  • ADCCLK(模拟电路时钟) :来自APB2经可编程预分频器分频(2/4/6/8分频),通过ADC_CCR.ADCPRE位配置,最大频率36MHz,决定采样和转换时间。

  • 数字接口时钟:用于寄存器读写访问,等于APB2时钟频率。

2 采样时间配置

  • 每个通道可独立设置采样周期数

  • ADC_SMPR2:设置通道0~9

  • ADC_SMPR1:设置通道10~18

3 总转换时间计算公式

分辨率 转换时间
12位 Tconv = 采样周期数 + 12个ADCCLK周期
10位 Tconv = 采样周期数 + 10个ADCCLK周期
8位 Tconv = 采样周期数 + 8个ADCCLK周期
6位 Tconv = 采样周期数 + 6个ADCCLK周期

4.3.5 扫描模式

ADC扫描模式与非扫描模式总结:

  • 非扫描模式ADC_CR1.SCAN=0):仅按序列中的第一个通道进行单通道转换,即使序列长度大于1也无效。

  • 扫描模式ADC_CR1.SCAN=1):按序列中预设的顺序对多个通道轮流进行转换 ,适用于多通道采集场景。(注入序列的触发注入会自动转化到非扫描模式)

  • 使用规则:序列长度=1时用非扫描模式,序列长度>1时必须使能扫描模式才能实现多通道转换。

4.3.6 连续与单次

  • 单次转换模式 :ADC按序列长度完成一次序列转换后自动停止,需要重新触发才能再次转换。

  • 连续转换模式 :ADC按序列长度完成一次序列转换后,自动回到序列头开始新一轮转换,循环进行。

  • 注意 :注入序列无法使用连续转换模式 ,也不支持 CONT 位配置。即使使能 JAUTO 自动注入,也只是让注入序列在每次规则转换完成后额外执行一次,并非注入序列自身的连续循环。

4.3.7 数据存储

  • 规则数据寄存器(ADC_DR) :只有1个,16位有效长度,规则序列中所有通道共用一个数据寄存器,后一次转换结果会覆盖前一次,需及时读取。

  • 注入数据寄存器(ADC_JDRx) :共4个(ADC_JDR1~ADC_JDR4),16位有效长度,与注入序列转换顺序一一对应:ADC_JDR1存储第一个转换结果,ADC_JDR2存储第二个,以此类推,不会被覆盖。

数据对齐

数据对齐指ADC转换结果在数据寄存器中的存储方式,分为左对齐右对齐 两种,通过 ADC_CR2.ALIGN 位控制(0=右对齐,1=左对齐)一般右对齐。

  • 6位分辨率 :按**字节(8位)**对齐,存储在寄存器低8位或高8位

  • 8位、10位、12位分辨率 :按**半字(16位)**对齐,存储在寄存器低16位或高16位

五、TIM控制器原理

5.1 基本定时器

STM32F4xx 系列的基本定时器有 TIM6TIM7,两者相互独立,不共享资源。

基本定时器组成

1 时钟源

基本定时器(TIM6/TIM7)的时钟源(CK_INT)来源于 APB1 总线时钟

2 预分频器(PSC)

对定时器输入时钟(CK_INT)进行分频,降低频率,实现更灵活的时间控制。

3 计数器

项目 说明
时钟来源 预分频器输出 CK_CNT
计数模式 仅支持递增计数(基本定时器)
计数寄存器 TIMx_CNT
启动条件 TIMx_CR1 寄存器中的 CEN 位置 1
启动延迟 CEN 置 1 后,一个时钟周期后计数器才真正开始
计数范围 从 0 → 自动重载值(TIMx_ARR)(实际计数要减一,因为从0开始
上溢事件 计到 ARR 后,下一时钟回到 0 并产生上溢事件

TIMx_CNT存放计数器的值;TIMx_ARR存放的是用户设计的目标值

时序图

CNT_EN计数器使能信号,CEN 置 1 后一个时钟周期有效,高电平期间计数器正常工作。

4 自动重载器

项目 说明
作用 控制计数器的最大计数值,决定溢出时间
寄存器 TIMx_ARR(预装载寄存器)
影子寄存器 实际生效的寄存器,预装载寄存器的值在更新事件时传入
溢出条件 TIMx_CNT = TIMx_ARR
溢出后 CNT 自动清零,产生更新事件(UEV)
预装载生效方式 由 TIMx_CR1 寄存器的 ARPE 位控制
ARPE = 0 或后为1;写入 ARR 后立即生效(直接进影子寄存器)
ARPE = 1 或后为0;写入 ARR 后,等**下一次更新事件(UEV)**时才生效
更新事件产生条件 计数器上溢 且 TIMx_CR1 寄存器中的 UDIS 位 = 0
软件更新 也可通过软件产生更新事件

5 UEV 事件产生

项目 说明
UEV来源1 计数器上溢(CNT = ARR)
UEV来源2 软件手动触发(TIMx_EGR 寄存器的 UG 位置 1)
允许产生条件 TIMx_CR1 寄存器中的 UDIS = 0
禁止产生条件 TIMx_CR1 寄存器中的 UDIS = 1
UDIS = 0 时 上述两种来源都能正常产生 UEV
UDIS = 1 时 上述两种来源都无法产生 UEV

5.2 通用定时器

5.2.1 TIM2 到 TIM5

1 主要特性

计数器

  • 位宽

    • TIM3、TIM4:16 位

    • TIM2、TIM5:32 位

  • 计数模式:递增、递减、递增/递减(中心对齐)

预分频器

  • 16 位可编程

  • 分频系数:1 ~ 65536

  • 支持运行时修改

独立通道(最多 4 个)

每个通道可用于:

  • 输入捕获

  • 输出比较

  • PWM 生成(边沿对齐 / 中心对齐)

  • 单脉冲模式输出

同步电路

  • 可用外部信号控制定时器

  • 支持多个定时器互连

中断 / DMA 触发事件

  • 更新事件:计数器上溢/下溢、软件/硬件初始化

  • 触发事件:启动、停止、初始化、计数

  • 输入捕获事件

  • 输出比较事件

2 通用定时器内部结构

组成部分 主要作用 核心组成
1. 时钟源 提供定时器的工作时钟,决定计数频率 内部时钟、外部时钟模式1/2、内部触发输入
2. 控制器 控制定时器的启动、停止、复位及触发信号处理 触发控制器、从模式控制器
3. 时基单元 设定定时的时间基准,是定时的核心 预分频器(PSC)、自动重载寄存器(ARR)、计数器(CNT)
4. 输入控制 处理外部输入信号,为输入捕获做准备 输入滤波器、边沿检测器、通道映射
5. 输入捕获/输出比较 测量外部波形或产生内部波形(PWM/比较输出) 4个独立的捕获/比较通道(含CCR寄存器)
6. 输出控制 将输出信号按需求配置后输出到芯片引脚 输出使能、极性选择、输出模式控制器
时钟源 说明
内部时钟(CK_INT) 来自 RCC 的定时器总线时钟(APB1/APB2),最常用
外部时钟模式1 TI1 / TI2 (通道输入引脚)输入外部时钟信号 支持单沿计数(Tl1FP1/Tl2FP2) (仅上升沿或仅下降沿) 支持双沿计数(Tl1F_ED)(上升沿和下降沿均计数)
外部时钟模式2 ETR(外部触发输入引脚)输入外部时钟信号
内部触发输入(ITR) 来自其他定时器的输出,用于定时器级联同步

3 具体设置

类别 知识点 说明
时钟源选择 选择内部时钟的条件 TIMx_SMCR.SMS = 000 且 TIMx_SMCR.ECE = 0
从模式控制寄存器 TIMx_SMCR SMS 位:从模式选择,设为 000 时禁止从模式 ECE 位:外部时钟使能,设为 0 时禁止外部时钟
预分频器 实际分频系数 TIMx_PSC + 1
计数模式 CMS=00 边沿对齐模式,DIR 可控(0=递增,1=递减)
CMS=01 中心对齐模式1,DIR 只读(仅在下降段(递减)产生中断
CMS=10 中心对齐模式2,DIR 只读(仅上升段(递增)产生中断
CMS=11 中心对齐模式3,DIR 只读**(上升段和下降段都产生中断)**
切换限制 模式切换限制 CEN=1 时,不能从边沿对齐切换为中心对齐
DIR 只读条件 中心对齐模式或编码器模式下,DIR 为只读
自动重载 ARPE=0 TIMx_ARR 不缓冲,立即生效
ARPE=1 TIMx_ARR 缓冲,更新事件时才生效

5.2.2 通用定时器内部结构对比

组成部分 TIM2~TIM5 TIM9 / TIM12 TIM10/11/13/14
1. 时钟源 内部时钟 + 外部时钟模式1/2 + 内部触发输入 内部时钟 + 外部时钟模式1/2 + 内部触发输入 仅内部时钟
2. 控制器 完整(触发控制器 + 从模式控制器) 完整(触发控制器 + 从模式控制器) 简化(仅触发控制器)
3. 时基单元 16位或32位计数器,支持递增/递减/中央对齐 16位计数器,仅支持递增 16位计数器,仅支持递增
4. 输入控制 4通道,含滤波器、边沿检测、预分频器 2通道,含滤波器、边沿检测、预分频器 1通道,含滤波器、边沿检测、预分频器
5. 输入捕获/输出比较 4个独立通道 2个独立通道 1个独立通道
6. 输出控制 支持边沿对齐和中心对齐 仅支持边沿对齐 仅支持边沿对齐

5.3 三种计数方式

对比项 递增计数 递减计数 中央对齐计数
计数方向 从 0 递增到 ARR 从 ARR 递减到 0 先递增到 ARR,再递减到 0
更新事件产生时机 计数器达到 ARR 时 计数器达到 0 时 递增到 ARR 递减到 0 时(两次)
计数器周期 ARR + 1 ARR + 1 ARR × 2
PWM 对齐方式 边沿对齐(左对齐或右对齐) 边沿对齐 中心对齐
适用定时器 所有通用定时器 TIM2~TIM5(部分支持) TIM9~TIM14 仅递增 TIM2~TIM5 TIM9~TIM14 不支持
典型应用场景 基本 PWM、简单定时 特殊波形、反向 PWM 电机控制、需要对称波形的场景

设备要求信号是中心对称的信号的时候用中心对齐模式

中央对齐计数时序图

六、PWM控制原理

6.1 PWM输出比较(递增计数)

1 工作原理

设置关键寄存器:

  • ARR(自动重载寄存器):计数器累加的最大值

  • 比较值(CCR):与当前计数值进行比较的阈值

  • CNT(计数器寄存器):计数器当前计数的值

工作过程

  • CNT 从 0 开始递增

  • 当 CNT < 比较值时,输出高电平

  • 当 CNT ≥ 比较值时,输出低电平

  • 当 CNT 计数到 ARR 时,清零并重新从 0 开始

  • 所以一个周期就为CNT的值从0开始加,加到ARR,这个过程中与比较值比较的结果

结论

  • ARR 决定 PWM 周期(一个周期 = CNT 从 0 加到 ARR 的时间)

  • 比较值决定 PWM 占空比(高电平时间 = 比较值 × 每个计数步长的时间)

下面是PWM的时序图

2 PWM输出比较内部结构

条件 说明
完成对预装载寄存器的写入 用户通过 CCR1H/CCR1L 成功写入比较值
通道配置为输出模式 CC1S1:0 设置为输出模式(非输入捕获)
OC1PE 决定传输时机 OC1PE=0 时立即传输;OC1PE=1 时等待更新事件(UEV)

CCR1H 和 CCR1L 是两个 8 位寄存器,合起来组成一个 16 位的捕获/比较寄存器 1(CCR1),用于存放与计数器 CNT 比较的数值(输出模式)。

写入比较值的过程

  • 用户通过总线写入 CCR1H 和 CCR1L 时,写控制逻辑会产生一个 "write_in_progress" 的内部状态信号,
  • write_in_progress 的高电平表示正在写入,其下降沿才代表写入成功;
  • 未写入时信号一直为低电平且无下降沿,通过检测边沿而非电平来区分"从未写入"和"写入已完成"。。

3 PWM输出控制内部结构

类别 项目 说明
输入信号 OCREF_CLR 当ETRF(TIMx_SMCR 配置的外部触发信号)检测到高电平时,强制清零 OC1REF,实现逐周期电流管理(如刹车或过流保护)
CNT > CCR1 来自时基单元(CNT 与 CCR1 比较结果),判断当前计数值是否大于比较值,用于决定输出电平
CNT = CCR1 来自时基单元(CNT 与 CCR1 比较结果),判断当前计数值是否等于比较值,用于产生匹配事件
控制参数 OC1M2:0 来自 TIMx_CCMR1,决定当 CNT 与 CCR1 判断时 OC1REF 的行为(置高、置低、翻转或强制固定电平)
输出信号 OC1REF 输出模式控制器产生的中间参考信号,决定 PWM 或比较输出的原始波形形态,再经输出控制单元送到芯片引脚

CC1P 位(来自 TIMx_CCER)用于选择输出极性;选择高/低电平有效

CC1E是输出使能

相关推荐
WIZnet1 小时前
W55RP20-EVB-MKR MicroPython 实战(13):MQTT 协议与阿里云 IoT 平台对接
单片机·udp·wiznet
WIZnet2 小时前
W55RP20-EVB-MKR MicroPython 实战(15):MQTT协议与ThingSpeak平台对接
单片机·嵌入式硬件·wiznet
LCG元16 小时前
STM32实战:基于STM32F103的家用新风系统智能控制器(空气质量监测+PID调速)
stm32·单片机·嵌入式硬件
LCG元16 小时前
STM32实战:基于STM32F103的多通道工业数据采集与监控系统(Modbus RTU+上位机)
stm32·单片机·嵌入式硬件
资深流水灯工程师17 小时前
STM32 单片机 USB 通讯原理与 HAL 库实战详解
stm32·单片机·嵌入式硬件
资深流水灯工程师17 小时前
STM32 I2C 通讯原理与三种实现模式详解
stm32·单片机·嵌入式硬件
zlinear数据采集卡17 小时前
电源纹波杀手:LDO线性稳压电路的“降噪哲学”——基于ZLinear数据采集卡的深度解析
单片机·嵌入式硬件·fpga开发·硬件架构
资深流水灯工程师17 小时前
STM32 USART 通讯原理与三种模式详解
stm32·单片机·嵌入式硬件
资深流水灯工程师17 小时前
STM32 单片机 SPI 通讯原理详解
stm32·单片机·嵌入式硬件