当前位置: 首页 > news >正文

嵌入式 - 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);
}

http://www.dtcms.com/a/391796.html

相关文章:

  • 一款商用的基于SpringBoot+VUE的出货单智能比对系统
  • systemctl 在启动服务时的 常用参数
  • 【MySQL】SQL性能分析
  • 【软件测试Linux】详细Linux介绍和各种命令的场景应用
  • 【MySQL】使用C/C++链接mysql数据库
  • 【复现】【充换电站】考虑用户充电负荷-最优分时电价互动的光储充换电站优化模型
  • 多光谱相机按不同分类的几种类型
  • Linux中select、poll 和 epoll的作用
  • JavaScript原型链全面解析
  • mysql相关优化
  • electron-forge踩坑记录
  • 00-基于django+vue3+ts的前后端分离RBAC权限管理系统
  • Go语言-->切片
  • 《Java网络编程》第二章:Stream流
  • 速卖通“AI全站推”上新!跨境卖家如何利用 AI 做营销
  • Apple Developer Program注册被拒原因分析与技术性申诉指南
  • 卷积神经网络从入门到经典模型详解
  • C#超市商品管理系统入门级实现
  • 自注意力机制Self-Attention (二)
  • InternVLA-N1——规划-执行双系统下的VLN基础模型:具备学习型的潜在规划能力,可部署在轮式、四足、双足人形上
  • 睡眠PSG数据集技术
  • 【AI落地应用实战】利用亚马逊云科技 Step Functions 集成现有系统快速实现个性化邮件触达
  • 手机备忘录待办APP工具评测
  • 总线错误(Bus Error)是什么?
  • 《Java网络编程》第三章:Internet地址
  • 【软件项目验收:第三方软件测评报告合规性和有效性审核,辨别真假软件测评报告书】
  • 变邻域含变惯性权重策略的自适应离散粒子群算法
  • cocos通过碰撞collider进行道具获取 或者出发事件
  • 自动化测试可行性分析
  • 三轴云台之抗干扰设计篇