GPIO 配置模式
输出模式
- 开漏输出:输出端为开漏结构,需外接上拉电阻实现高电平输出,适合总线通信(如I²C)。
- 推挽输出:直接输出高/低电平,驱动能力强,常用于普通数字信号输出。
- 复用开漏/推挽:引脚复用为外设功能(如串口、定时器)时的开漏或推挽模式。
输入模式
- 上拉/下拉输入:内部电阻将引脚默认拉至高/低电平,避免悬空干扰。
- 浮空输入:引脚悬空,需外部电路确保稳定电平,抗干扰能力弱。
- 模拟输入:引脚连接ADC,读取模拟信号(如传感器电压)。
独立按键检测
硬件连接
按键一端接地,另一端接GPIO引脚,并配置为上拉输入模式(默认高电平)。
软件逻辑
检测引脚电平变化:
c
if (GPIO_ReadPin(KEY_PIN) == LOW) {
delay_ms(10); // 消抖
if (GPIO_ReadPin(KEY_PIN) == LOW) {
// 按键按下处理
}
}

中断处理流程
触发条件
- 外部中断:引脚电平跳变(下降沿/低电平)。
- 定时器中断:计数器溢出触发。
配置步骤
- 使能中断 :设置IE寄存器(如
EA=1开启总中断,EX0=1允许外部中断0)。 - 选择触发方式 :TCON寄存器设置(如
IT0=1为下降沿触发)。 - 编写中断服务函数:
c
void EXTI0_IRQHandler() {
// 清除中断标志
// 执行处理逻辑
}



定时器应用
初始化步骤
- 设置模式 :TMOD寄存器配置(如
M1=0, M0=1为16位定时器模式)。 - 赋初值 :计算定时时长,写入TH0/TL0(如50ms定时需初值
TH0=0x3C, TL0=0xB0)。 - 启动定时器 :TCON寄存器置
TR0=1。
中断服务例程
c
void Timer0_IRQHandler() {
TH0 = 0x3C; // 重装初值
TL0 = 0xB0;
// 定时任务处理
}



PWM 控制蜂鸣器
参数计算
- 周期:由定时器溢出频率决定(如1kHz方波需定时器1ms中断一次)。
- 占空比调节:通过改变高电平时间控制音量。

无源蜂鸣器驱动
c
while (1) {
GPIO_WritePin(BUZZER_PIN, HIGH);
delay_us(500); // 50%占空比
GPIO_WritePin(BUZZER_PIN, LOW);
delay_us(500);
}

注意事项
- 有源蜂鸣器仅需电平控制,无需PWM。
- 无源蜂鸣器频率决定音调,占空比影响音量。