一、GPIO 通用输入输出
GPIO:General Purpose Input/Output,通用目的输入输出,是单片机和外部硬件交互最基础的方式。
GPIO 模式
-
输入模式:检测引脚电平变化,用于按键检测、外部信号采集
- STM32:上拉输入、下拉输入、浮空输入、模拟输入
-
输出模式:输出高低电平控制外设
- STM32:推挽输出、开漏输出、复用推挽输出、复用开漏输出
按键原理:按键按下后引脚与 GND 短路,引脚变为低电平。
二、定时器(51 单片机)
作用:实现精准定时、延时,产生时序、PWM 方波。 51 定时器为16 位自增计数器 ,最大计数范围:
0 ~ 65535。
核心工作流程
-
给定时器寄存器赋初值
TH0、TL0(TH 高 8 位,TL 低 8 位) -
打开定时器,计数器按照固定频率向上自增
cnt++ -
计数到
65535 + 1→ 定时器溢出,向 CPU 发起中断请求 -
从初值计数到溢出的时间,由计数速率、初值大小共同决定
机器周期计算
51 单片机机器周期 = 系统晶振频率 ÷ 12
-
晶振
12MHz:12M /12 = 1MHz,机器周期 = \\boldsymbol{1\\mu s -
晶振
11.0592MHz:11.0592M /12 = 0.9216MHz,机器周期 ≈ \\boldsymbol{1.1\\mu s
定时计算公式 计数次数 = 需要定时的时间 ÷ 机器周期 定时器初值 =
65535 − 计数次数
示例:1ms 定时
-
12MHz 晶振:1ms =1000μs,计数次数 = 1000;初值 =
65535‑1000 = 64535 -
11.0592MHz:计数次数 = 909;初值 =
65535‑909 = 64626
定时器模式:
16 位定时器模式;
8 位自动重装模式(多用于串口波特率生成)
三、中断
中断概念
CPU 正在执行任务,被外部紧急事件打断;暂停当前任务,执行紧急事件;处理完毕后回到原来代码继续执行。
-
中断源:可以打断 CPU 运行的事件来源。
-
51 单片机 5 个中断源:外部中断 0 (P3.2)、外部中断 1 (P3.3)、定时器 0、定时器 1、串口中断。
- 外部中断:引脚电平变化触发中断。
中断优先级 & 中断嵌套
-
中断优先级:多个中断同时到来,优先执行优先级更高的中断。
-
中断嵌套:处理一个中断的过程中,响应另一个中断;51 最多允许嵌套两层。
完整中断处理流程
-
中断源发出中断请求
-
判断:CPU 总中断开关 + 该中断的子开关是否打开(
IE寄存器) -
判断中断优先级
-
保护现场(保存寄存器)
-
执行中断服务函数
-
恢复现场,返回原来程序继续运行
中断向量:相当于标号 / 数组下标,CPU 依靠中断向量找到对应的中断服务函数。
IE寄存器:51 中断控制寄存器,EA(bit7)是 CPU 总中断开关。
四、PWM 脉冲宽度调制
PWM:脉冲宽度调制,引脚周期性输出高低电平方波。
-
PWM 周期:一个完整方波的总时间(从一个上升沿到下一个上升沿)
-
占空比 :一个周期内,高电平时间占整个周期的百分比
用途:屏幕背光亮度调节、电机调速、驱动蜂鸣器发声。
五、蜂鸣器
-
有源蜂鸣器:内部自带振荡源,通电直接发出固定频率声音。
-
无源蜂鸣器:内部无振荡源,通电不会响;需要外部输入一定频率方波(定时器 + PWM)才能发声。