GPIO配置与中断控制全解析

GPIO 配置模式

输出模式

  • 开漏输出:输出端为开漏结构,需外接上拉电阻实现高电平输出,适合总线通信(如I²C)。
  • 推挽输出:直接输出高/低电平,驱动能力强,常用于普通数字信号输出。
  • 复用开漏/推挽:引脚复用为外设功能(如串口、定时器)时的开漏或推挽模式。

输入模式

  • 上拉/下拉输入:内部电阻将引脚默认拉至高/低电平,避免悬空干扰。
  • 浮空输入:引脚悬空,需外部电路确保稳定电平,抗干扰能力弱。
  • 模拟输入:引脚连接ADC,读取模拟信号(如传感器电压)。

独立按键检测

硬件连接

按键一端接地,另一端接GPIO引脚,并配置为上拉输入模式(默认高电平)。

软件逻辑

检测引脚电平变化:

c 复制代码
if (GPIO_ReadPin(KEY_PIN) == LOW) {  
    delay_ms(10);  // 消抖  
    if (GPIO_ReadPin(KEY_PIN) == LOW) {  
        // 按键按下处理  
    }  
}  

中断处理流程

触发条件

  • 外部中断:引脚电平跳变(下降沿/低电平)。
  • 定时器中断:计数器溢出触发。

配置步骤

  1. 使能中断 :设置IE寄存器(如EA=1开启总中断,EX0=1允许外部中断0)。
  2. 选择触发方式 :TCON寄存器设置(如IT0=1为下降沿触发)。
  3. 编写中断服务函数
c 复制代码
void EXTI0_IRQHandler() {  
    // 清除中断标志  
    // 执行处理逻辑  
}  

定时器应用

初始化步骤

  1. 设置模式 :TMOD寄存器配置(如M1=0, M0=1为16位定时器模式)。
  2. 赋初值 :计算定时时长,写入TH0/TL0(如50ms定时需初值TH0=0x3C, TL0=0xB0)。
  3. 启动定时器 :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。
  • 无源蜂鸣器频率决定音调,占空比影响音量。
相关推荐
fie888915 小时前
基于51单片机的航模遥控器6通道接收机程序
单片机·嵌入式硬件·51单片机
bu_shuo15 小时前
嵌入式硬件工程师VS单板硬件工程师
嵌入式硬件·电子工程师·单板硬件
llilian_1615 小时前
选择北斗导航卫星信号模拟器注意事项总结 北斗导航卫星模拟器 北斗导航信号模拟器
功能测试·单片机·嵌入式硬件·测试工具·51单片机·硬件工程
Yyq1302086968216 小时前
MH2457,‌国产 32 位屏驱 MCU‌芯片,支持‌1080P 高清显示‌与‌以太网通信‌,广泛应用于两轮车仪表盘及工控屏等领域
单片机·嵌入式硬件
爱分享的阿Q16 小时前
STM32现代化AI开发环境搭建:从Keil到VSCode+AI的范式转移
人工智能·vscode·stm32
爱吃程序猿的喵16 小时前
南邮计科电工电子实验B《RLC串联谐振电路》实验报告
单片机·嵌入式硬件
独小乐16 小时前
009.中断实践之实现按键测试|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
XINVRY-FPGA17 小时前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
bubiyoushang88819 小时前
利用STM32实现Modbus通信(RTU从机方案)
stm32·单片机·嵌入式硬件
cmpxr_19 小时前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式