gpio相关的一些结构体和操作函数

本文探讨了芯片GPIO的相关结构体,如gpio_config_t,用于描述GPIO的配置细节。内容涉及GPIO配置如何影响其功能,并提及每个GPIO组的寄存器起始地址,揭示了GPIO配置与功能实现的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个芯片的gpio一般都会有如下一些结构体,用来描述该gpio所具备的所有功能, 以及如何配置一个gpio:

1. gpio_config_t --- 一个gpio的配置,这个结构体通常用来表示一个gpio的具体配置

/* Configuration parameters for one GPIO pin.*/
typedef struct
{       
    gpio_mode_t         mode;           /* Defines mode (SOFTWARE or Alternate). */
    gpio_direction_t    direction;      /* Define pin direction (in SOFTWARE mode only). */
    gpio_trig_t         trig;           /* Interrupt trigger (in SOFTWARE mode only) */
    gpio_debounce_t     debounce;       /* Debounce logic control for pin (in SOFTWARE mode only) */
} gpio_config_t;
2. gpio_mode_t,  --- gpio 的工作模式:

/* Defines pin assignment(Software mode or Alternate mode) */
typedef enum
{
    GPIO_MODE_LEAVE_UNCHANGED,      /* Parameter will be ignored by the function. */
    GPIO_MODE_SOFTWARE,             /* Pin connected to GPIO (SW controlled) */
    GPIO_MODE_ALT_FUNCTION_A,       /* Pin connected to alternate function 1 (HW periph 1) */
    GPIO_MODE_ALT_FUNCTION_B,       /* Pin connected to alternate function 2 (HW periph 2) */
    GPIO_MODE_ALT_FUNCTION_C        /* Pin connected to alternate function 3 (HW periph 3) */
} gpio_mode_t;
3. gpio_direction_t --- 该gpio的输入输出方向

/* Defines GPIO pin direction */
typedef enum
{
    GPIO_DIR_LEAVE_UNCHANGED,       /* Parameter will be ignored by the function. */
    GPIO_DIR_INPUT,                 /* GPIO set as input */
    GPIO_DIR_OUTPUT                 /* GPIO set as output */
} gpio_direction_t;
4. gpio_trig_t --- 该gpio的中断触发方式:

/* Interrupt trigger mode */
typedef enum
{
    GPIO_TRIG_LEAVE_UNCHANGED,      /* Parameter will be ignored by the function */
    GPIO_TRIG_DISABLE,              /* Triggers no IT */
    GPIO_TRIG_RISING_EDGE,          /* Triggers an IT on a rising edge */
    GPIO_TRIG_FALLING_EDGE,         /* Triggers an IT on a falling edge */
    GPIO_TRIG_BOTH_EDGES           /* Triggers an IT on a rising and a falling edge */
//    GPIO_TRIG_HIGH_LEVEL,           /* Triggers an IT on a high level */
//    GPIO_TRIG_LOW_LEVEL             /* Triggers an IT on a low level */
} gpio_trig_t;
5. gpio_debounce_t ---去偶功能使用情况

<think>好的,用户问的是GPIO_InitStructGPIO_InitStructure的区别。首先,我需要确认这两个名称的来源用途。根据引用[2][3],GPIO_InitStructure是一个结构体变量,用于存储GPIO的配置参数,比如引脚、模式、速度等。而GPIO_InitStruct出现在函数GPIO_Init的参数中,是结构体指针,指向配置信息。 用户可能混淆了变量名参数名。在STM32的标准库中,函数GPIO_Init的参数是GPIO_InitStruct,这是一个指针,接收初始化配置。而GPIO_InitStructure是用户自定义的结构体变量名,可以随意命名,比如改为GPIO_Config,但通常大家用GPIO_InitStructure作为变量名,然后传给GPIO_Init函数。因此,两者的区别在于一个是变量名,另一个是函数参数名,本质都是GPIO_InitTypeDef结构体类型。 需要注意用户是否误以为这两个是不同的结构体类型,但实际上只是命名习惯不同。需要明确说明变量名可以自定义,而函数参数是固定的。同时,用户可能想了解如何正确使用这些结构体进行初始化配置,确保他们不会在代码中混淆名称。此外,可能需提醒用户遵循库函数的调用规范,避免因命名错误导致编译问题。</think>在STM32标准外设库中,`GPIO_InitStruct`与`GPIO_InitStructure`的区别主要体现在**命名规范使用场景**上,它们的本质都是`GPIO_InitTypeDef`结构体类型[^2][^3]。 ### 核心区别解析 | 名称 | 性质 | 作用域 | 应用场景 | |---------------------|--------------------------|-----------------------|-----------------------------| | `GPIO_InitStruct` | **函数形参名** | 在GPIO_Init()函数定义中 | 接收用户配置的结构体指针 | | `GPIO_InitStructure`| **用户自定义变量名** | 在用户代码中 | 存储具体GPIO配置参数的实例 | ### 详细说明 1. **GPIO_InitStruct** 是库函数`GPIO_Init()`的第二个形参名称,其类型为`GPIO_InitTypeDef*`指针。该参数用于接收用户定义的结构体实例地址,指向包含GPIO配置信息的内存区域[^3]。 ```c void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); ``` 2. **GPIO_InitStructure** 是开发者自定义的结构体变量名(可任意命名),通过填充其成员变量实现具体配置: ```c GPIO_InitTypeDef GPIO_InitStructure; // 声明结构体实例 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // 配置引脚号 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 设置输出模式 ``` ### 典型使用流程 ```c // 1. 声明结构体变量(变量名可自定义) GPIO_InitTypeDef myGPIO_Config; // 2. 配置结构体成员 myGPIO_Config.GPIO_Pin = GPIO_Pin_5; myGPIO_Config.GPIO_Mode = GPIO_Mode_OUT; // 3. 通过GPIO_Init()函数传递地址 GPIO_Init(GPIOA, &myGPIO_Config); // 这里myGPIO_Config对应形参GPIO_InitStruct ``` ### 关键结论 - **命名自由性**:用户代码中结构体变量名可自定义(如`GPIO_Config`, `myPinSettings`等),但需保证与`GPIO_Init()`函数调用时传递的指针一致[^2] - **参数固定性**:`GPIO_InitStruct`是库函数内部定义的形参名称,用户不可修改 - **内存关系**:用户定义的结构体变量通过指针传递给`GPIO_Init()`,库函数通过`GPIO_InitStruct`形参访问配置数据[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值