嵌入式 - GPIO
一、GPIO 概述
1、概念 :
GPIO 是嵌入式系统中用于与外部设备交互的通用接口
2、功能:
- 数字输入:读取外部信号,如按键状态、传感器数据等
- 数字输出:控制外设工作,如LED、BEEP、继电器等
- 模拟功能:部分引脚支持ADC/DAC,用于模拟信号的采集与生成
3、工作模式
输入模式
输入模式 | 特点 | 补充 |
上拉输入 | 引脚内部连接上拉电阻 | 默认状态稳定(高电平),外部信号可拉低 上拉电阻越小,驱动能力越强,功耗越高 |
下拉输入 | 引脚内部连接下拉电阻 | 默认低电平,外部信号可将其拉高 |
浮空输入 | 引脚内部不连接上拉或下拉电阻 | 电平完全由外部电路决定 引脚处于高阻抗状态,易受电磁干扰 |
模拟输入 | 引脚直接连接ADC模块 用于采集模拟信 | 数字输入功能禁用,抗干扰能力强 |
输出模式
输出模式 | 特点 | 补充 |
推挽输出 | 互补的MOS关交替导通 可输出强高/低电平 | 驱动能力强,电平切换快 不支持线与功能 |
开漏输出 | 仅N-MOS管工作,输出低电平或高阻态 | 输出高电平依赖于外部上拉电路 支持线与功能 |
IO多路复用
概述:在复杂SOC中,对于一个引脚,可能有多种功能,同一时刻只能使用一种,需要进行交叉复用功能设置
二、GPIO应用示例
1、GPIO初始化
相关参数定义
//存放GPIO工作模式
typedef enum {
gpio_input, //输入模式
gpio_output //输出模式
}gpio_dir_t;
//初始化GPIO引脚状态
typedef struct {
gpio_dir_t dir;
int def_val; //引脚默认电平
}gpio_pin_t;
typedef struct {
uint32_t DR; //引脚输入/输出电平值
uint32_t GDIR; //引脚输入输出方向
uint32_t PSR; //实时电平状态值(只读)
uint32_t ICR1; //IO中断位1
uint32_t ICR2; //IO中断位2
uint32_t IMR; //中断使能位:1使能,0禁用
IO uint32_t ISR; //中断标志位
IO uint32_t EDGE_SEL; //边沿选择位
} GPIO_Type;
初始化函数
功能:
初始化GPIO
参数:
*gpio:GPIO组指针
pin:引脚数
*data:初始化引脚状态结构体指针
void gpio_init(GPIO_Type *gpio, int pin, gpio_pin_t *data)
{if (data->dir == gpio_output){ //判断GPIO工作模式gpio->GDIR |= (1 << pin);if(data->def_val == 1){gpio->DR |= (1 << pin);}else{gpio->DR &= ~(1 << pin);}}else{gpio->GDIR &= ~(1 << pin);}
}
2、操作led
示例代码:
void led_init(void)
{//IO复用配置到GPIOIOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0); //电气特性配置 IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0x10B0);gpio_pin_t io_3;io_3.dir = gpio_output;io_3.def_val = 1;gpio_init(GPIO1, 3, &io_3);
}//点亮LED
void led_on(void)
{GPIO->DR &= ~(1 << 3);
}//熄灭LED
void led_off(void)
{GPIO->DR |= (1 << 3);
}