再来看左边部分,左上方部分为一全局数组,记录各个GPIO的描述符,即对应左下方的gpio_desc结构体,其中gpio_chip指向硬件层的GPIO,flags为一标志位,用来指示当前GPIO是否已经占用,当用gpio_request申请GPIO资源时,flags位就会置位,当调用gpio_free释放GPIO资源时,flags就会清零。label是一个字符串指针,用来作说明。 在软...
GPIO 子系统有两套接口:基于描述符的(descriptor-based)、老的(legacy)。前者的函数都有前缀 “gpiod_”,它使用 gpio_desc 结构体来表示一个引脚;后者的函数都有前缀 “gpio_”,它使用一个整数来表示一个引脚。 要操作一个引脚,首先要 get 引脚,然后设置方向,读值、写值。 建议使用“devm_”版本的相关函数。
1.void GPIO_DeInit(GPIO_TypeDef* GPIOx) 该函数是用来关闭GPIOx时钟的,函数的参数为结构体指针类型,需要注意的是函数的第一句: assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); 1. 它的作用就是判断你传入的参数是否正确,参数的值就是外设GPIOx对应的地址 很显然当没有定义USE_FULL_ASSERT时,它是无作用的。
前者的函数都有前缀 “gpiod_”,它使用 gpio_desc结构体来表示一个引脚;后者的函数都有前缀 “gpio_”,它使用一个整数来表示一个引脚。 要操作一个引脚,首先要 get 引脚,然后设置方向,读值、写值。 建议使用“devm_”版本的相关函数。有前缀“devm_”的含义是“设备资源管理”(Managed Device Resource),这是...
desc_to_gpio() gpio_to_desc() desc_to_gpio: 函数原型:int desc_to_gpio(const struct gpio_desc *desc) 源码路径:drivers\gpio\gpiolib.c 通过引脚 gpio_desc 结构体指针 获取引脚 GPIO 号。 gpio:GPIO number。 gpio_to_desc: 函数原型:struct gpio_desc *gpio_to_desc(unsigned gpio) ...
GPIO 子系统有两套接口:基于描述符的(descriptor-based)、老的(legacy)。前者的函数都有前缀 “gpiod_”,它使用 gpio_desc 结构体来表示一个引脚;后者的函数都有前缀 “gpio_”,它使用一个整数来表示一个引脚。 要操作一个引脚,首先要 get 引脚,然后设置方向,读值、写值。
node:节点结构体指针 propname:键值对中的键的名称 index:索引号 dflags: GPIOD_ASIS //没有实际含义 GPIOD_IN:设置gpio引脚为输入模式 GPIOD_OUT_LOW:设置gpio引脚输出低电平 GPIOD_OUT_HIGH:设置gpio引脚输出高电平 label:NULL 返回值: 成功返回struct gpio_desc *结构体指针 ...
GPIO子系统有两套接口:基于描述符的(descriptor-based)、老的(legacy)。前者的函数都有前缀“gpiod_”,它使用gpio_desc结构体来表示一个引脚;后者的函数都有前缀“gpio_”,它使用一个整数来表示一个引脚。 要操作一个引脚,首先要get引脚,然后设置方向,读值、写值。
第103行,pinctrl_desc结构体用来描述PIN控制器,PIN控制器用于配置SOC的PIN复用功能和电气特性。 第107行,这个stm32_gpio_bank结构体,是用来注册GPIO驱动。到后面GPIO子系统再说。 pinctrl_desc结构体内容如下所示: pinctrl_desc结构体 第134-136行,这三个“_ops”结构体指针非常重要!因为这三个结构体就是PIN控制...
GPIO 子系统有两套接口:基于描述符的(descriptor-based)、老的(legacy)。前者的函数都有前缀 “gpiod_”,它使用 gpio_desc 结构体来表示一个引脚;后者的函数都有前缀 “gpio_”,它使用一个整数来表示一个引脚。 要操作一个引脚,首先要 get 引脚,然后设置方向,读值、写值。