GPIO简介
1 简介
GPIO 是 General Purpose Input/Output 的缩写,意为通用输入输出。它是指可以在单片机或嵌入式系统中用来与外部设备进行数字通信的引脚。通过 GPIO 引脚,你可以将数字信号输入到系统中,也可以将系统中的数字信号输出到外部设备。GPIO 在嵌入式系统中非常常见,常用于控制 LED 灯、驱动电机、读取传感器数据等。
总结:GPIO就是芯片上的一根干啥都行的引脚。
2 输入输出模式
在单片机或嵌入式系统中使用 GPIO 时,你可以通过软件控制这些引脚的状态,使其处于高电平(1)或低电平(0)。这些引脚通常可以被配置为输入或输出模式。
- 输入模式:当 GPIO 引脚被配置为输入模式时,它们可以读取外部设备发送的数字信号。例如,你可以将传感器连接到一个 GPIO 引脚上,然后通过读取该引脚的状态来获取传感器发送的数据。
- 输出模式:当 GPIO 引脚被配置为输出模式时,它们可以向外部设备发送数字信号。这意味着你可以控制连接到 GPIO 引脚上的外部设备的状态,如打开或关闭 LED 灯、控制电机转动方向等。
3 管脚复用
管脚复用是指在嵌入式系统或集成电路设计中,一个物理引脚可以被设计成多个功能之一的过程。这允许同一个物理引脚在不同的时间点上扮演不同的角色或执行不同的功能,从而实现硬件资源的高度灵活利用。
4 应用举例
如用作按键检测。
按键严格来讲也是个中断。GPIO口默认状态是低电平,按键按下后被拉到高电平,此时系统能够检测到中断,判定为按键按下。
等到按键释放了,GPIO口检测到电压回归低电平,就判定为按键松开了。这种做法是单片机上比较常见的做法。在智能一些的硬件平台上,往往会有独立的硬件按键接口(非GPIO口),在芯片内部加入按键控制器,通过硬件实现按键的去抖、双击和长按判断。
对于单片机,一旦被按键触发之后,内部就开始跑程序,每隔几个毫秒读取一次按键状态,判断按键是否被释放。通过软件实现去抖、双击和长按的功能。
图上的电容,用处是滤除外部干扰,避免被误触发,同时起到一定的按键去抖作用。图上的TVS管,是为了防止静电进入CPU。
按键按下就是按下了,为什么会抖动?
因为按键都是机械式的,两个金属片在接触的瞬间,从微秒级的时间段来看,会存在接触-断开-再接触这样的轻微的抖动。直到两个金属片牢牢的接触到一起之后,抖动才会消失。所谓按键去抖动,就是通过延时来消除掉接触再断开这种异常状态的。
如果GPIO口不够,但是需要做多个按键的检测,也可以把按键配置成为ADC,通过不同按键产生不同的电压,来利用一个ADC口检测到不同的键值。这个做法通常用于手机3.5mm有线耳机上的3个按键的检测。
5 GPIO子系统
gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,读取 GPIO 的值等。
背景:
之前我们控制一个 GPIO 可以直接来操作我们的寄存器,还有一种方法是使用 SOC 厂家实现的配置函数,例如三星的配置函数为 s3c_gpio_cfgpin 等,这样带来的问题就是各家有各家的接口函数与实现方式,不但内核的代码复用率低而且开发者很难记住这么多的函数,如果要使用多种平台的话背函数都是很麻烦的,所以在引入设备树后对 GPIO 子系统进行了大的改造,使用设备树来实现并提供统一的接口。
主要目的:
方便驱动开发者使用 gpio,驱动开发者在设备树中添加 gpio 相关信息,然后就可以在驱动程序中使用 gpio 子系统提供的 API函数来操作 GPIO,Linux 内核向驱动开发者屏蔽掉了 GPIO 的设置过程。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库