时钟树系统
DMA原理
DMA(直接存储器访问)控制器是一种允许外设与存储器之间直接传输数据的硬件模块,无需 CPU 逐字节参与搬运。其核心原理是:当外设准备好数据后,DMA 控制器向 CPU 申请总线控制权,获得授权后代替 CPU 完成数据读写,传输结束后再通过中断通知 CPU 处理。
DMA的中断和空闲中断
中断相关函数:HAL_UART_Transmit_DMA
回调函数:void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
空闲中断:HAL_UARTEx_ReceiveToIdle_DMA
关闭过半中断:__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
回调:void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
TIM控制器
TIM(Timer,定时器)控制器是单片机中用于计时、计数、产生 PWM 波形和捕获输入信号的核心外设。其基本原理是:定时器内部有一个计数器,在时钟源驱动下按设定频率递增或递减,当计数值与预设的比较寄存器值相等时,就会触发相应事件,如更新中断、输出翻转或输入捕获。
典型的定时器工作流程:
- 时钟配置:选择定时器的时钟源并设置预分频系数,决定计数频率。
- 计数模式:配置为向上计数、向下计数或中心对齐模式,决定计数方向。
- 比较输出:设置自动重装载值和比较值,产生周期性的 PWM 波形或定时中断。
- 输入捕获:通过捕获通道记录外部信号的跳变时刻,用于测量频率或脉宽。
通过这种方式,TIM 控制器既能实现精确的延时和周期性任务调度,也能驱动电机、控制 LED 亮度,并测量外部信号的频率与占空比。
ADC控制器
ADC(Analog-to-Digital Converter,模数转换器)控制器是单片机中用于将连续模拟电压信号转换为离散数字量的核心外设。其基本原理是:通过采样保持电路在某一时刻捕获模拟电压,再经过量化与编码,将电压值映射为对应的二进制数字,供 CPU 或 DMA 读取处理。
二分查找式逼近是逐次逼近型 ADC内部的核心转换思想。它不直接比较所有可能的数字量,而是通过“折半猜测 + 逐位确认”的方式,用 N 次比较完成 N 位精度的转换。
初始化:先将最高位(第 7 位)置 1,其余位清零,得到一个猜测值 1000 0000(即满量程的一半)。比较判断:将猜测值对应的模拟电压与输入电压比较,若输入更大,则保留该位为 1;否则将该位清零。逐位逼近:接着对下一位重复“置 1 → 比较 → 决定保留或清零”的过程,从最高位一直处理到最低位。得到结果:经过 8 次比较后,所有位都已确定,最终组合出的数字量即为转换结果。
UART电平标准
UART 只定义数据帧格式,不规定电气特性,实际通信需借助不同电平标准承载信号,常见有 TTL、CMOS、RS232、RS485 四种。
TTL 电平
单片机内部最常用,供电 5V 或 3.3V。输出高电平不低于 2.4V,低电平不高于 0.4V。信号幅度小、速率高,但抗干扰弱,适合板级短距离通信。
CMOS 电平
与 TTL 类似,阈值与电源电压相关。以 3.3V 供电为例,输出高电平接近 3.3V,低电平接近 0V。功耗低、噪声容限大,现代 MCU 的 GPIO 多采用 CMOS 工艺。
RS232 电平
采用负逻辑双极性电平:逻辑 1 对应 -3V 到 -15V,逻辑 0 对应 +3V 到 +15V。与 TTL/CMOS 不兼容,需电平转换芯片(如 MAX3232)。全双工点对点,距离 15 米以内,常用于调试串口。
RS485 电平
采用差分信号,A、B 压差大于 +200mV 为逻辑 1,小于 -200mV 为逻辑 0。抗干扰强,距离可达 1200 米,支持多点组网(最多 32 节点)。半双工,常用于工业总线。
四种电平对比
| 标准 | 信号方式 | 逻辑电平 | 通信方式 | 典型距离 | 典型应用 |
|---|---|---|---|---|---|
| TTL | 单端 | 0V / 3.3V 或 5V | 全双工 | 板级短距离 | 单片机间通信 |
| CMOS | 单端 | 0V / 电源电压 | 全双工 | 板级短距离 | 现代 MCU GPIO |
| RS232 | 单端 | ±3V 到 ±15V | 全双工 | 15 米以内 | 调试串口、设备配置 |
| RS485 | 差分 | A-B 压差 ±200mV | 半双工 | 1200 米 | 工业总线、多点组网 |
实际开发中,单片机内部常用 TTL/CMOS 电平,与外设或上位机通信时再按距离、速率和组网需求选择电平转换方案。