首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gpio_key按键驱动

1.gpio_key.c介绍 1.1 功能介绍 Linux内核下的 drivers/input/keyboard/gpio_keys.c实现了一个体系结构无关的GPIO按键驱动,使用此按键驱动,只需在设备树...gpio-key节点添加需要的按键子节点即可。...驱动的实现非常简单,但是较适合于实现独立式按键驱动。 1.2 架构介绍 gpio-keys是基于input架构实现的一个通用GPIO按键驱动。...该驱动基于platform_driver架构,实现了驱动和设备分离,符合Linux设备驱动模型的思想。本文以自己的理解介绍gpio_keys.c驱动实现原理及代码技巧。...从上述代码可看到,gpio_keys.c节点内定义两个按键节点: “key_power”、”key_headset”。每个按键节点包括一个gpio所用到的所有硬件属性。

3.3K30

DRV_05_GPIO按键驱动分析与使用

视频观看 百问网驱动大全 GPIO按键驱动分析与使用 参考资料: Linux 5.x内核 Documentation\devicetree\bindings\input\gpio-keys.txt...设备树示例 2.1 设备树讲解 属性: 必备:compatible = "gpio-keys"; 可选: autorepeat: 表示自动重复,按下按键不松开,驱动会自动重复上报按键值 对于每一个...驱动程序分析 3.1 套路 根据设备树获得硬件信息:哪个GPIO、对于什么按键 分配/设置/注册input_dev结构体 request_irq: 在中断处理函数中确定按键值、上报按键值 有两种...GPIO电平会反复变化,最后才稳定。一般是几十毫秒才会稳定。 如果不处理抖动的话,用户只操作一次按键,会发生多次中断,驱动程序可能会上报多个数据。 怎么处理按键抖动?.../bin 4.2 配置内核 QEMU的内核里已经配置了GPIO按键的设备树,只需要编译出gpio_keys驱动程序即可。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    GPIO按键中断

    按键初始化:GPIO端口时钟使能、AFIO复用功能时钟使能、GPIO引脚设置为下降沿触发中断(PA0, PG15, PC13, PE3); 填充每个按键中断处理函数:读取按键GPIO状态,操作对应LED...灯亮灭; 主函数调用LED和按键初始化后,无需任何操作; 本实验配套代码位于“5_程序源码\6_GPIO按键中断\”。...GPIO端口时钟; 18行:设置为下降沿触发外部中断,即按键按下瞬间触发中断。...可根据需求设置为上升沿触发,即松开按键触发中断,双边缘触发,即按下松开都触发中断; 22~33行:初始化每个按键对应的GPIO,“HAL_GPIO_Init()”里会判断该引脚是否为EXTI模式,如果是则调用...13.4实验效果 本实验对应配套资料的“5_程序源码\6_GPIO按键中断\”。打开工程后,编译,下载。

    2.9K30

    GPIO按键轮询

    12.1关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键按键监测一般有两种:按键扫描和按键中断。...按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。...按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减少GPIO的占用。...如图 12.2.3 为开发板用户按键部分的原理图,四个按键除了所接GPIO引脚不同外,其它一模一样。...按键初始化:GPIO端口时钟使能、GPIO引脚设置为输入(PA0, PG15, PC13, PE3); 封装每个按键处理函数:读取按键GPIO状态,操作对应LED灯亮灭; 主函数轮询按键状态:一直检测是否有按键被按下

    2K20

    OpenHarmony驱动子系统开发—GPIO按键事件中断

    本案例程序是演示GPIO中断接口的基本使用,案例操作结果是通过按键切换开发板上的LED的点亮和熄灭效果。本案例使用的按键根据开发板原理图可以得到,接入的是GPIO5号引脚。...所以本次开发驱动GPIO引脚是GPIO5。...按键和LED灯在开发板的位置如下图红色框框标记所示,按键在上,LED灯在下:GPIO函数使用IoTGpioRegisterIsrFunc()IoTGpioRegisterIsrFunc函数是一个设置GPIO...由于开发板物理按键存在抖动的问题,会在按压一次按键时,多次触发中断回调,所以我们需要在中断回调函数中,进行软件防抖操作,过滤掉一些不必要的操作。...,开发板开始正常工作,此时LED会正常点亮,再按下按键LED会熄灭,再按下按键LED会重新点亮。

    8210

    GPIO输入——按键检测

    今天分享的是GPIO输入——按键检测。 按键检测部分还是比较简单的,与51单片机类似,采用扫描的方法,循环地判断哪个按键按下,然后执行相应的操作。 流程图大致如下: ?...这两种扫描方式的区别在于,单次扫描的状态下,按住按键不放不会有什么影响,而连续扫描状态下,按住按键不放会持续产生作用。...当第二次扫描的时候,如果mode=0(单次扫描),那么flag的值因为保持原来为0,所以不会进入按键处理函数中,而是走向右边第二次判断语句,假设已经松手了,那么也就是此时没有按键按下,flag=1,这为下次的按键检测做好准备...口的状态,通过对各个按键的IO口不断进行扫描,获取是哪个按键按下并且返回值,根据返回值的不同执行相应的处理函数。...扫描方式有单次扫描和连续扫描,其实也就是有选择性地进入按键处理函数。

    1.7K30

    Linux通用GPIO驱动写法与应用

    说明 在Linux中,可以对GPIO进行相关的控制,具体的做法就是利用字符设备驱动程序对相关的gpio进行控制。由于操作系统的限制,在Linux上又无法直接在应用程序的层面上对底层的硬件进行操作。...本文主要通过一个点亮红外灯的实例,再次理解Linux下的应用程序与驱动程序的交互,同时加深驱动程序编写流程的理解。...但是需要完成的工作量较大,既要理解驱动又要熟悉Linux应用编程。下面来介绍这种方式。 3.1 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。...这个宏表示当配置了TFM_V2_GPIO宏时,tfmv2_gpio.c将会编译成驱动,内核启动时,该驱动自动加载。 下图是Linux启动后自动加载的tfm_v2的gpio驱动。 ?...通过这次的总结,对Linux驱动的内核层与应用层要区分清楚,同时也加深对驱动程序编写流程的理解。

    9.6K43

    物联网-GPIO输入—按键检测

    GPIO(General Purpose Input/Output)输入在按键检测中起着关键作用。以下是使用GPIO输入进行按键检测的一般步骤:初始化GPIO:首先,需要配置GPIO引脚作为输入。...使能GPIO端口时钟:在大多数微控制器中,需要使能(即启用)GPIO端口的时钟,以便能够访问和控制该端口上的引脚。读取引脚状态:一旦GPIO引脚被配置为输入,就可以读取其状态了。...此外,为了通过LED灯的亮灭状态来间接完成按键检测,可以配置一个LED灯连接的GPIO引脚作为输出。当检测到按键按下时,将LED灯对应的引脚设置为高电平(或低电平,取决于电路设计),从而点亮LED灯。...图 6.1.1 按键抖动说明图从按键的原理图可知,这些按键在没有被按下的时候,GPIO 引脚的输入状态为高电平(按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为低电平(按键所在的电路导通...(); /*初始化按键*/ Key_GPIO_Config(); /* 轮询按键状态,若按键按下则反转LED */ while(1) { if(ledSwitch == 0){ LED1

    33300

    Linux驱动实践:如何编写【 GPIO 】设备的驱动程序?

    目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...编写驱动程序 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。...创建驱动目录和驱动程序 $ cd linux-4.15/drivers/ $ mkdir mygpio_driver $ cd mygpio_driver $ touch mygpio.c mygpio.c...> #include #include // GPIO 硬件相关宏定义 #define MYGPIO_HW_ENABLE // 设备名称...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中的 udev 服务,自动在 /dev 目录下创建了设备节点。

    5.1K30

    驱动GPIO操作总结

    设备驱动程序是软件概念和硬件电路之间的一个抽象层,软件操作硬件的关键就是对寄存器的操作。笔者使用的S5PV210是IO与内存统一编址的,在裸机中直接操作IO端口的物理地址,而在驱动中必须使用虚拟地址。...考虑到GPIO作为硬件资源,存在着被多个驱动使用,还有复用的问题,所以内核提供了GPIO驱动gpiolib框架来统一管控GPIO资源,gpiolib在内核中作为一个驱动所实现。...,相关宏定义在linux/gpio.h中 label: 名称 返回值: 成功返回0,失败返回负值 gpio_free 释放GPIO /* linux/gpio.h */ void gpio_free(unsigned...gpio) gpio: gpio编号,相关宏定义在linux/gpio.h中 gpio_direction_input 设置GPIO为输入模式 /* linux/gpio.h */ int gpio_direction_input.../* linux/gpio.h */ int gpio_direction_output(unsigned gpio, int value) gpio: gpio编号,相关宏定义在linux/gpio.h

    94920

    【STM32】GPIO输入—按键检测

    GPIO初始化函数 3.主函数 参考文献 点此下载完整工程文件 2.1硬件设计 弹性按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一 下子断开,使用按键时会产生如图带波纹信号...2.2.1编程要点 使能 GPIO端口时钟; 初始化 GPIO目标引脚为输入模式(引脚默认电平受按键电路影响,浮空/上拉/下拉均没有区别); 编写简单测试程序,检测按键的状态,实现按键控制 LED灯。...2.2.2代码分析 1.按键引脚宏定义 同样,在编写按键驱动时,也要考虑更改硬件环境的情况。...#endif 2.按键 GPIO初始化函数 #include "bsp_key.h" #include "delay.h" void KEY_Init() { GPIO_InitTypeDef.../按键处理函数 //返回按键值 //mode:0,不支持连续按;1,支持连续按; //0,没有任何按键按下 //1,KEY0按下 //2,KEY1按下 //3,KEY2按下 //4,WKUP按下 WK_UP

    93220

    高通GPIO驱动(DTS方式)

    gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态; sysfs文件系统的建立可以参照下面的博客...2.1 直接操作GPIO: 因为GPIO一般都是平台设备驱动,一般设备树挂载的节点都可以在&soc下: 1 device_node { 2 ... 3...gpio_name = ; //gpio_99 4 ... 5 } 驱动代码: 1      int gpio_99 = of_get_named_gpio_flags...linux内核中的GPIO系统之(2):pin control subsystem Linux内核中的GPIO系统之(3):pin controller driver代码分析 linux内核中的GPIO...系统之(4):pinctrl驱动的理解和总结 linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合 DTS代码: 1 device_node

    4.7K40

    【STM32学习记录2】GPIO输入—按键检测

    2.按键 GPIO初始化函数 3.主函数 参考文献 点此下载完整工程文件 2.1硬件设计 弹性按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一 下子断开,使用按键时会产生如图带波纹信号...2.2.1编程要点 使能 GPIO端口时钟; 初始化 GPIO目标引脚为输入模式(引脚默认电平受按键电路影响,浮空/上拉/下拉均没有区别); 编写简单测试程序,检测按键的状态,实现按键控制 LED灯。...2.2.2代码分析 1.按键引脚宏定义 同样,在编写按键驱动时,也要考虑更改硬件环境的情况。...#endif 2.按键 GPIO初始化函数 #include "bsp_key.h" #include "delay.h" void KEY_Init() { GPIO_InitTypeDef.../按键处理函数 //返回按键值 //mode:0,不支持连续按;1,支持连续按; //0,没有任何按键按下 //1,KEY0按下 //2,KEY1按下 //3,KEY2按下 //4,WKUP按下 WK_UP

    89910
    领券