GPIO (通用I/O)

简介

GPIO 提供具有 16 位 I/O 接口,在 ET6001 提供了 6 组 GPIO IP (GPIOA~GPIOF) ,理论可同时提供 84 根GPIO 信号输入或者输出使用。

每个 I/O 都有独立的输出值寄存器和输出方向控制 bit,通过 set 和 clr 操作进行配置,不会影响已用通道的配置。

内置 IOMUX 模块,主要用于实现 IO 功能的复用,GPIO IP IO 与其他 IP 输出的 I/O 信号经 IOMUX 模块复用配置后,被选输出信号再与芯片 Pin 连接。

功能概述

  • 支持输入输出方向选择。 默认为输入模式,输出驱动电路不使能。每个 Port 可以独立设置输入输出方向;

  • 支持 IO 功能复用选择

  • 支持输入状态选择 (浮空,上拉,下拉)

  • 支持驱动能力选择(超低、低、中、高)

  • 支持外部去毛刺滤波时钟输入,每个 GPIO 管脚可以独立设置;

  • 支持高、低电平毛刺滤波,可滤除毛刺宽度受外部输入的去毛刺滤波时钟周期决定;

  • 支持输入信号中断产生模式选择,支持边沿触发和电平触发。

  • 支持屏蔽访问功能,允许在单个传输中读取或写入单个位或多个位。这样可以避免基于软件的读取-修改-写入操作;

  • 支持使用地址值的位屏蔽;

  • 允许通过读寄存器方式来读取 I/O 端口电平的数字信号。

GPIO 输入输出

GPIO 每个引脚通过 OUTENSET/OUTENCLR(set-clr 寄存器对)切换输入/输出方向,默认复位为输入。 输入方向下,引脚电平经过上拉/下拉、施密特整形和可选去抖后,反映到 DATA 寄存器,用 GPIO_readPin 读取; 输出方向下,先用 GPIO_writePin 把值写入 DATAOUT 输出锁存,再经输出使能驱动到引脚。

配置流程如下:

  1. 初始化结构体 调用 GPIO_initPadConfigStruct() 将结构体参数配置为默认值

  2. 配置引脚 根据需求修改结构体参数, 调用 GPIO_setPadConfig() 传入配置引脚及结构体参数

  3. 配置复用功能模式 调用 GPIO_setPinConfig() 传入引脚及模式

  4. 选择输入/输出模式(GOIO功能时) 调用 GPIO_setPortDirectionMode() 传入引脚及模式(GPIO_DIR_INGPIO_DIR_OUT)

  5. 读取/写引脚电平(GOIO功能时)

IOMUX配置参数说明

IOC_Init_TypeDef 结构体参数说明:

  • ds:驱动能力选择

    • IOC_DS_LEVEL_0:默认驱动能力等级(default)

    • IOC_DS_LEVEL_1:中等驱动能力等级

    • IOC_DS_LEVEL_2:强驱动能力等级

    • IOC_DS_LEVEL_3:最强驱动能力等级

  • pull:上拉下拉选择

    • IOC_PULL_NONE:无上拉下拉

    • IOC_PULL_UP:上拉

    • IOC_PULL_DOWN:下拉(default)

  • scht:施密特触发使能

    • IOC_SCHT_DISABLE:不使能(default)

    • IOC_SCHT_ENABLE:使能

  • dir:输入输出方向选择

    • IOC_DIR_IN_OUT:输入和输出(default)

    • IOC_DIR_OUT:仅输出

GPIO端口名称说明

芯片可用的 GPIO口名称包含在 GPIO_PinNumber 枚举类型中。

管脚名称与GPIO端口不是顺序对应的,对应关系如下表:

GPIO端口

GPIO管脚

GPIOA_0

GPIO47

GPIOA_1

GPIO48

GPIOA_2

GPIO51

GPIOA_3

GPIO50

GPIOA_4

GPIO28

GPIOA_5

GPIO46

GPIOA_6

GPIO49

GPIOA_7

GPIO76

GPIOA_8

GPIO77

GPIOA_9

GPIO66

GPIOA_10

GPIO52

GPIOA_11

GPIO53

GPIOA_12

GPIO54

GPIOA_13

GPIO67

GPIOA_14

GPIO78

GPIOA_15

GPIO79

GPIOB_0

GPIO63

GPIOB_1

GPIO68

GPIOB_2

GPIO69

GPIOB_3

GPIO70

GPIOB_4

GPIO8

GPIOB_5

GPIO4

GPIOB_6

GPIO3

GPIOB_7

GPIO2

GPIOB_8

GPIO1

GPIOB_9

GPIO0

GPIOB_10

GPIO40

GPIOB_11

GPIO23

GPIOB_12

GPIO41

GPIOB_13

GPIO22

GPIOB_14

GPIO7

GPIOB_15

GPIO44

GPIOC_0

GPIO5

GPIOC_1

GPIO9

GPIOC_2

GPIO61

GPIOC_3

GPIO59

GPIOC_4

GPIO10

GPIOC_5

GPIO34

GPIOC_6

GPIO15

GPIOC_7

GPIO14

GPIOC_8

GPIO6

GPIOC_9

GPIO30

GPIOC_10

GPIO31

GPIOC_11

GPIO29

GPIOC_12

GPIO72

GPIOC_13

GPIO74

GPIOC_14

GPIO73

GPIOC_15

GPIO75

GPIOD_0

GPIO64

GPIOD_1

GPIO80

GPIOD_2

GPIO55

GPIOD_3

GPIO60

GPIOD_4

GPIO20

GPIOD_5

GPIO21

GPIOD_6

GPIO13

GPIOD_7

GPIO12

GPIOD_8

GPIO11

GPIOD_9

GPIO33

GPIOD_10

GPIO16

GPIOD_11

GPIO17

GPIOD_12

GPIO25

GPIOD_13

GPIO26

GPIOD_14

GPIO27

GPIOD_15

GPIO37

GPIOE_0

GPIO35

GPIOE_1

GPIO43

GPIOE_2

GPIO56

GPIOE_3

GPIO57

GPIOE_4

GPIO58

GPIOE_5

GPIO39

GPIOE_6

GPIO42

GPIOE_7

GPIO65

GPIOE_8

GPIO62

GPIOE_9

GPIO83

GPIOE_10

GPIO84

GPIOE_11

GPIO85

GPIOE_12

GPIO71

GPIOE_13

GPIO82

GPIOE_14

GPIO81

GPIOE_15

GPIO45

GPIOF_0

SWCLK

GPIOF_1

SWDIO

GPIOF_2

GPIO32

GPIOF_3

GPIO24

另外,在代码中,每个 GPIO口枚举值由两个部分组成:端口名称(高4bit)和引脚号(低4bit)。端口名称由字母 A-F 组成,表示 GPIOA 到 GPIOF 端口。引脚号是一个十六进制数字,表示该端口的引脚编号。

例如: GPIO0  = 0x19 : GPIO0对应GPIOB 端口的PIN9 引脚

GPIO16 = 0x3a : GPIO16对应GPIOD 端口的PIN10 引脚

IOMUX Function Mode模式选择

每个 GPIO口的引脚都可以配置为不同的功能模式。功能模式由 GPIO_setPinConfig() 函数调用配置。

GPIO_setPinConfig(pin_number, mode);

该函数的参数 mode 表示引脚的功能模式, 具体的定义在 et6x_pinmap.h 文件中。 例如:

#define GPIO10_MODE_GPIO10          (0)                                        //GPIOC_4
#define GPIO10_MODE_SRPWM5_A        (1)                                        //GPIOC_4
#define GPIO10_MODE_SRPWM2_A        (4)                                        //GPIOC_4
#define GPIO10_MODE_EQEP0_A         (5)                                        //GPIOC_4
#define GPIO10_MODE_UART1_TX        (6)                                        //GPIOC_4
#define GPIO10_MODE_SPIM0_MISO      (7)                                        //GPIOC_4
#define GPIO10_MODE_I2C0_SDA        (9)                                        //GPIOC_4

GPIO 中断

GPIO 中断用于在引脚电平发生变化(或维持某电平)时,通过中断的方式通知 CPU,避免软件轮询占用 CPU 资源。

功能概述

  • 支持输入信号中断产生模式选择,支持**边沿触发** 和**电平触发** ;

  • 支持中断极性选择: - 边沿触发下选择**上升沿 / 下降沿** ; - 电平触发下选择**高电平 / 低电平** ;

  • 每个 GPIO 引脚可独立使能/失能中断;

  • 提供组合中断和独立中断两种中断源;

  • 中断标志位支持软件查询与软件清除。

备注

一个 GPIO IP 提供 16 个 I/O 通道,每路 I/O 通道单独输出 1bit 中断 GPIOE 直接发送 16bit 中断以及合并后的中断给 CPU 作为中断源,GPIOA~D、F 只发送合并后的中断给 CPU。

中断源与中断号

  • 每一组 GPIO 端口有一个合并的中断请求,任一使能中断的引脚触发都会进入对应端口的组合中断处理函数。

  • GPIOE 端口的每个引脚(GPIOE_0 ~ GPIOE_15,对应枚举 GPIO66 ~ GPIO81)另有独立的中断号,可直接将单个引脚映射到独立的中断处理函数。

GPIO 组合中断号

中断号

对应 GPIO 端口

覆盖引脚(端口内序号)

GPIOA_COMBINT_IRQn

GPIOA

GPIOA_0 ~ GPIOA_15

GPIOB_COMBINT_IRQn

GPIOB

GPIOB_0 ~ GPIOB_15

GPIOC_COMBINT_IRQn

GPIOC

GPIOC_0 ~ GPIOC_15

GPIOD_COMBINT_IRQn

GPIOD

GPIOD_0 ~ GPIOD_15

GPIOE_COMBINT_IRQn

GPIOE

GPIOE_0 ~ GPIOE_15

GPIOF_COMBINT_IRQn

GPIOF

GPIOF_0 ~ GPIOF_3(仅 4 引脚)

GPIOE 独立中断号

中断号

对应引脚

GPIOE_0_IRQn ~ GPIOE_15_IRQn

GPIOE 端口 PIN0 ~ PIN15(GPIO66 ~ GPIO81)

API 说明

中断配置函数:

GPIO 中断配置函数

函数

功能

GPIO_setInterruptType()

配置指定引脚的中断模式与极性

GPIO_enableInterrupt()

使能指定引脚中断

GPIO_disableInterrupt()

失能指定引脚中断

GPIO_clearInterruptStatus()

清除指定引脚中断标志

GPIO_getInterruptStatus()

查询指定引脚中断标志状态

配置结构体与枚举:

typedef enum
{
    GPIO_INT_TYPE_LEVEL = 0x00,      /*!< 电平触发 */
    GPIO_INT_TYPE_EDGE  = 0x01       /*!< 边沿触发 */
} GPIO_INT_TYPE_TypeDef;

typedef enum
{
    GPIO_INT_POL_HIGH_RISING = 0x00, /*!< 高电平触发 / 上升沿触发 */
    GPIO_INT_POL_LOW_FALLING = 0x01  /*!< 低电平触发 / 下降沿触发 */
} GPIO_INT_POL_TypeDef;

typedef struct
{
    GPIO_INT_TYPE_TypeDef mode;      /*!< 中断模式:电平或边沿 */
    GPIO_INT_POL_TypeDef  polarity;  /*!< 中断极性:高/低电平,上升/下降沿 */
} GPIO_INT_Config_TypeDef;

软件配置过程

以按键触发 GPIO 边沿中断为例,完整配置可归结为 5 步

  • 步骤 1:初始化中断基础 :在 main() 开头初始化中断向量表,处理函数经 Interrupt_register() 注册到该表后才能被触发;全局中断上电默认使能。

  • 步骤 2:配置引脚为输入 :中断检测的是引脚**输入** 电平,需完成 pad、IOMUX 复用、方向三步配置。

  • 步骤 3:配置中断触发方式 :通过 GPIO_setInterruptType() 配置模式(边沿/电平)与极性(上升/下降、高/低),以下为**下降沿触发** 。

  • 步骤 4:注册中断处理函数 :调用 Interrupt_register() 绑定中断号与处理函数。KEY_PIN (GPIO2)属于 GPIOB 端口,绑定 GPIOB 组合中断 ;GPIOE 端口引脚可用逐引脚独立中断号。优先级可选,用 NVIC_SetPriority 设置(默认 16 级,数值越小优先级越高)。

  • 步骤 5:使能中断 :两级使能缺一不可:先 GPIO_enableInterrupt() 使能引脚中断(写 INTENSET 对应位),再 Interrupt_enable() 使能 NVIC 层中断。

中断处理函数

处理函数内先 GPIO_getInterruptStatus() 判断来源,执行业务,最后 GPIO_clearInterruptStatus() 清标志。边沿触发必须软件清标志 ,否则该引脚不会再触发新中断;电平触发在电平恢复后标志自动清除。

GPIO MASK ACCESS功能

GPIO 输出口对每个引脚都有一路独立的输出锁存。要单独更新其中某一位,常规做法是”读-改-写(Read-Modify-Write)”:先把整个端口的输出寄存器读回来,在寄存器里修改目标位,再整体写回。这个流程,不是原子的 ——读与写之间存在时间窗口,一旦被中断打断,或与另一条执行流(ISR、其他任务)同时操作同一端口,就可能发生”后写覆盖先写”而丢失更新。 ET6x 通过”屏蔽访问”机制解决该问题。

  • 支持屏蔽访问功能,允许在单个传输中读取或写入单个位或多个位,避免基于软件的读取-修改-写入操作;

  • 支持使用地址值的位屏蔽。

即:硬件提供一组”地址即掩码”的寄存器,一次 store 指令即可原子地更新一个或多个位,无需软件先读原值。

功能概述

  • 支持屏蔽访问,单个传输 内写入单个位或多个位,避免软件读-改-写;

  • 使用**地址值的位** 作为使能掩码,数据提供新值,掩码与数据解耦;

  • 端口 16 位拆分为 低字节 (GPIO_Pin0~7)与 高字节 (GPIO_Pin8~15)两套掩码寄存器,逐位对应;

  • 一次写入可同时**置位与清零** ,混合更新多位,掩码为 0 的位原样保持;

  • 单条 store 指令完成,硬件级原子,不受中断/多任务干扰。

备注

SET/CLR 寄存器对”写 1 生效、写 0 忽略”,只能统一置位或统一清零; 掩码寄存器把”门”(改哪些位)编码进地址,既能置位也能清零,还能一次混合改多个位。

掩码操作原理

地址即掩码

  • 掩码区从端口基址 + 0x400 开始,元素步长 4 字节(uint32_t )。硬件取地址的 bits[9:2] 作使能掩码:

地址    = 端口基址 + 0x400 + 4 × n
掩码    = (地址 >> 2) & 0xFF
        = (0x400 >> 2) & 0xFF ⊕ (n & 0xFF)
        = 0 ⊕ n
        = n

0x400 的那个 1 位于 bit10,恰好在 bits[9:2] 窗口之外,因此基址对掩码 零贡献 ,掩码纯净地等于下标 n。而元素步长 4 字节使下标在存入地址时左移 2 位(×4),硬件取 bits[9:2] 时右移 2 位(>>2),两者相互抵消——下标原封不动还原成掩码。

以 GPIOA(基址 0x40210000)写 bit3 为例:

下标、地址、掩码的对应关系

环节

数值

1 所在位

数组下标 n

0x08

bit3

地址(0x400 + 4n)

0x40210420(0x400 + 0x20)

bit5(×4 左移)

硬件取 bits[9:2](>>2)

0x08

bit3(还原)

掩码与数据解耦

  • 下标(地址) = “开哪几个门”,声明本次要改动哪几位;

  • 数据 = “门里的值改成什么”,为 1 置位、为 0 清零;

  • 掩码为 0 的位,硬件按影子值 原样保持 ,不读不写。

因此置位与清零操作,地址完全相同 ,仅数据不同:

库函数

GPIO 掩码/原子相关函数

函数

功能

GPIO_writePinAtomic()

原子地写单个引脚电平

GPIO_togglePinAtomic()

原子地翻转单个引脚电平

GPIO_setPortPinsMasked()

按掩码一次写入多个位,置位/清零独立指定

GPIO 输入滤波

GPIO 引脚作为输入时,机械触点、外部环境干扰等常会在信号上叠加短暂的毛刺与抖动。若不做处理,这些毛刺可能导致:

  • 读到错误的电平值;

  • 触发错误的边沿中断;

  • 软件轮询时采到不稳定的状态。

IO 输入滤波由 两套相互独立的硬件 组成,分别作用于不同的输入路径:

  1. GPIO 去抖(Debounce / Qualification) :位于 GPIO 模块内部,作用于 GPIO 数字输入路径 (数据寄存器读取、GPIO 中断)。每个管脚独立配置,为 C2000 等器件所没有的独立去抖硬件。

  2. Input XBAR 输入滤波窗口(Filter Window) :位于 Input XBAR 模块,作用于 GPIO 信号 进入 XBAR、再通往各外设(PWM 跳闸、CLB、外部中断等)的路径。每 8 个 GPIO 端口共享一组 窗口配置,结构与 C2000 的采样窗口限定一致。

GPIO 去抖用于滤除输入引脚上的毛刺,使 GPIO 数据寄存器读取值和 GPIO 中断源电平稳定。 去抖采样由**专门的去抖时钟 GPIO_GFCLK** 驱动,而不是 CPU 系统时钟。可滤除的毛刺宽度由 去抖时钟周期决定。

每个 GPIO 端口(GPIOA~F)拥有独立的去抖时钟分频器,每个管脚可以独立使能去抖并选择滤波模式。

硬件结构

                      CRG->GPIO_GFCLK[port]  (去抖时钟,prescaler+1 分频)
                              │
                              ▼
外部引脚 ──► [IN_POLARITY: 输入反相(可选)] ──► [去抖核心] ──► GPIO 数据寄存器 / 中断
                                                  ▲
                    BOTHEDGE_DB_MODE ──────────────┘    (决定单边/双边滤波)

涉及寄存器:

  • CRG->GPIO_GFCLK[6].GPIO_GFCLK_DIV :每个端口独立的去抖时钟分频器,11 bit, prescaler + 1 分频 ,取值 0~2047。

  • GPIOx->DEBOUNCE_MODE :每管脚 1 bit,使能该管脚去抖。

  • GPIOx->BOTHEDGE_DB_MODE :每管脚 1 bit,使能双边沿去抖。

  • GPIOx->IN_POLARITY :每管脚 1 bit,单边沿去抖时的滤波极性 (”GPIO Input inverted mode”,硬件通过输入反相实现单极性滤波)。

去抖核心的工作逻辑

去抖核心在每个 GPIO_GFCLK 周期采样一次输入,只有电平**持续稳定超过一个滤波窗口** 才更新 输出。窗口内的采样次数由硬件固定,软件只能通过去抖时钟分频间接控制窗口宽度。

边沿的识别 :比较相邻两次采样值,前后两拍不同即视为一次”变化”事件。

滤波的启动 :一旦检测到输入变化,计数器清零并开始重新累积;只要中途再次变化,计数器 重新清零,因此撑不满窗口的毛刺不会反映到输出。

三种滤波模式:

  • BOTHEDGE_DB_MODE = 1双边沿去抖 。上升沿与下降沿都要先确认稳定超过窗口才放行, 高低两种毛刺均被滤除,正常信号的两个边沿都被延迟一个窗口。

  • BOTHEDGE_DB_MODE = 0 + IN_POLARITY = 1GPIO_DB_POL_HIGH ):只滤高电平毛刺 。 上升沿去抖(延迟一个窗口),下降沿直通(无延迟)。适合平时为低、偶发正脉冲干扰、 且需要快速响应拉低的信号。

  • BOTHEDGE_DB_MODE = 0 + IN_POLARITY = 0GPIO_DB_POL_LOW ):只滤低电平毛刺 。 下降沿去抖(延迟一个窗口),上升沿直通(无延迟)。适合平时为高、偶发负脉冲干扰、 且需要快速响应拉高的信号。

软件配置流程

GPIO 去抖按以下流程配置:

  1. 调用 GPIO_setQualificationPeriod() 配置去抖时钟分频:

/* GPIOA 端口去抖时钟分频为 prescaler+1,prescaler 最大 2047 */
GPIO_setQualificationPeriod(GPIOA, prescaler);
  1. 调用 GPIO_setQualificationConfig() 选择滤波模式:

GPIO_DB_Init_TypeDef db_config;
db_config.mode     = GPIO_DB_EDGE_SINGLE;   /* 或 GPIO_DB_EDGE_DOUBLE */
db_config.polarity = GPIO_DB_POL_HIGH;      /* 或 GPIO_DB_POL_LOW */
GPIO_setQualificationConfig(GPIO48, &db_config);
  1. 调用 GPIO_enableQualification() / GPIO_disableQualification() 使能 / 关闭去抖。

GPIO_enableQualification(GPIO48);

备注

GPIO_DB_EDGE_DOUBLE 模式下 polarity 字段不生效,双边沿同时滤波。

Input XBAR 输入滤波窗口(Filter Window)

功能概述

Input XBAR 的输入均来自 GPIO,GPIO 信号在进入 XBAR 后先经过**极性选择、信号同步、接口滤波** , 再进行信号输出选择。输入滤波窗口用于抗干扰,滤除进入 XBAR 的 GPIO 信号上的毛刺。

每 8 个 GPIO 端口共享一组窗口配置值 ,滤波使能按单个输入通道独立配置。

硬件结构

  • 滤波时钟由 AHB 时钟分频得到:filter clk = AHB_CLK / 2 / filter_dly

  • filter_dly 取值范围 0~1023(10 bit),为每个滤波窗口组的窗口宽度参数。

  • 窗口分组枚举 XBAR_INXB_FILTERWND_GRP_Def,每组对应 8 个 GPIO 引脚, 具体引脚对应关系见该枚举定义中的映射表。

  • 对应寄存器为 XBAR->INXB_FLTWID0/1/... ,每个 32 bit 寄存器容纳 3 组(每组 10 bit) 窗口配置。

软件配置流程

  1. 调用 XBAR_INXB_setInputFilterWnd() 设置某 GPIO 组的滤波窗口宽度:

/* GPIOA 组0(GPIO47 所在 8 引脚组)窗口宽度为 filter_dly,
  滤波时钟 = AHB_CLK / 2 / filter_dly */
XBAR_INXB_setInputFilterWnd(INXB_FILTERWND_GPIOA_GRP0, filter_dly);

注意

该参数对同组内所有输入通道同时生效。

  1. 调用 XBAR_INXB_initInputChannel() 对输入通道配置滤波使能与极性:

XBAR_INXB_InCfg_TypeDef in_cfg;
in_cfg.inFilterEn  = ENABLE;   /* 使能该输入通道滤波 */
in_cfg.inInvertEn  = DISABLE;  /* 输入极性,默认不取反 */
XBAR_INXB_initInputChannel(&in_cfg, &in_ch_mask);
  1. 后续按 Input XBAR 常规流程配置输出通道并使能(参考 xbar 章节)。

备注

inFilterEn 为每个输入通道独立的滤波使能开关;若不使能,则该通道输入 不经过滤波窗口,直接同步后进入输出选择。

备注

  1. 毛刺宽度与窗口 :GPIO 去抖可滤除的毛刺宽度由去抖时钟(分频后)周期决定; Input XBAR 滤波窗口宽度由 filter_dly 决定(滤波时钟 = AHB_CLK/2/filter_dly)。 配置时应使窗口宽度大于被滤毛刺宽度,并保证小于正常信号的最小脉冲宽度, 否则正常信号也会被滤除或延迟。

  2. 边沿延迟 :被滤波的边沿都会引入约一个窗口的延迟;选择单极性滤波可以让 另一方向边沿直通(零延迟),用于需要快速响应的一侧。

  3. 复位行为 :去抖与滤波默认关闭,输入仅做同步。

应用示例

API Reference

Header File

Functions

void GPIO_initPadConfigStruct(IOC_Init_TypeDef *cfg)

Fill param to IOC_Init_TypeDef struct to default value.

参数:

cfg – point to IOC_Init_TypeDef struct to initial

DRV_Status GPIO_setPadConfig(GPIO_PinNumber pin_number, IOC_Init_TypeDef *cfg)

IOC configure for PAD attribute.

参数:
  • pin_number – The number enumerated in the enumeration type

  • cfg – pin initial param such as mode, ds, dir, pull, scht .

返回:

DRV_Status

DRV_Status GPIO_setPinConfig(GPIO_PinNumber pin_number, uint8_t mode)

IOC configure for Pin AF Mode.

参数:
  • pin_number – The number enumerated in the enumeration type

  • mode – functional mode ,available mappings are supplied in ex6x_pinmap.h

返回:

DRV_Status

DRV_Status GPIO_resetPort(GPIO_Type *GPIOx)

reset GPIO Module to default value

参数:

GPIOx – Select the GPIO port [GPIOA~GPIOF]

返回:

DRV_Status

DRV_Status GPIO_setPortDirectionMode(GPIO_PinNumber pin_number, GPIO_DIR_TypeDef dir)

Set GPIO Group direction to Output.

参数:
  • pin_number – The number enumerated in the enumeration type

  • dir – This parameter can be GPIO_DIR_IN_OUT or GPIO_DIR_OUT

返回:

DRV_Status

FlagStatus GPIO_readPin(GPIO_PinNumber pin_number)

Read Bit Value on a GPIO pin.

参数:

pin_number – The number enumerated in the enumeration type

返回:

FlagStatus

DRV_Status GPIO_writePin(GPIO_PinNumber pin_number, FlagStatus bitval)

Write Bit value to GPIO pin.

参数:
  • pin_number – GPIO pin number

  • bitval – SET or RESET value

返回:

DRV_Status

DRV_Status GPIO_togglePin(GPIO_PinNumber pin_number)

Toggle pin output state base on current pin state.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

DRV_Status GPIO_togglePinAtomic(GPIO_PinNumber pin_number)

Toggle pin output state with atomic access operation.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

uint16_t GPIO_getPortPins(GPIO_Type *GPIOx)

Read GPIO value on a Port.

参数:

GPIOx – Select the GPIO portSelect the GPIO port [GPIOA~GPIOF]

返回:

uint16_t

DRV_Status GPIO_setPortPins(GPIO_Type *GPIOx, uint16_t portval)

Write GPIO value to Port.

参数:
  • GPIOx – Select the GPIO portSelect the GPIO port [GPIOA~GPIOF]

  • portval – value write to GPIO port

返回:

DRV_Status

DRV_Status GPIO_setPortPinsMasked(GPIO_Type *GPIOx, uint16_t bits_set_mask, uint16_t bits_clr_mask)

Set GPIO port with Masked access operation.

参数:
  • GPIOx – Select the GPIO port [GPIOA~GPIOF]

  • bits_set_mask – Bits Mask to Set for example 0x8070 GPIOx_4/5/6/15 set to 1

  • bits_clr_mask – Bits Msk to Clear for example 0x1007 GPIOx_0/1/2/12 set to 0

返回:

DRV_Status

DRV_Status GPIO_writePinAtomic(GPIO_PinNumber pin_number, FlagStatus bitval)

write GPIO pin with atomic access operation

参数:
  • pin_number – GPIO pin number

  • bitval – SET or RESET value

返回:

DRV_Status

DRV_Status GPIO_setInterruptType(GPIO_PinNumber pin_number, GPIO_INT_Config_TypeDef *int_config)

configure GPIO Interrupt type and polarity

参数:
  • pin_number – The number enumerated in the enumeration type

  • int_config – param for interrupt type and polarity

返回:

DRV_Status

DRV_Status GPIO_enableInterrupt(GPIO_PinNumber pin_number)

Enable GPIO Interrupt.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

DRV_Status GPIO_disableInterrupt(GPIO_PinNumber pin_number)

Disable GPIO Interrupt.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

DRV_Status GPIO_clearInterruptStatus(GPIO_PinNumber pin_number)

Clear GPIO Interrupt Status.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

ITStatus GPIO_getInterruptStatus(GPIO_PinNumber pin_number)

Get GPIO Pin Interrupt Status.

参数:

pin_number – The number enumerated in the enumeration type

返回:

ITStatus

DRV_Status GPIO_setQualificationConfig(GPIO_PinNumber pin_number, GPIO_DB_Init_TypeDef *db_config)

Configure GPIO Debounce Initial param.

参数:
  • pin_number – The number enumerated in the enumeration type

  • db_config

返回:

DRV_Status

DRV_Status GPIO_enableQualification(GPIO_PinNumber pin_number)

Enable GPIO Debounce function.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

DRV_Status GPIO_disableQualification(GPIO_PinNumber pin_number)

Disable GPIO Debounce function.

参数:

pin_number – The number enumerated in the enumeration type

返回:

DRV_Status

DRV_Status GPIO_setQualificationPeriod(GPIO_Type *GPIOx, uint16_t prescaler)

Configure GPIO gclk prescaler.

参数:
  • GPIOx – Select the GPIO port [GPIOA~GPIOF]

  • prescaler – (prescaler + 1) div for GPIO GFCLK, max 2047

返回:

DRV_Status

static void GPIO_setPinHigh(GPIO_PinNumber pin_number)

Sets the specified GPIO pin to high.

参数:

pin_number – The number enumerated in the enumeration type

static void GPIO_setPinLow(GPIO_PinNumber pin_number)

Clears the specified GPIO pin to low.

参数:

pin_number – The number enumerated in the enumeration type

Structures

struct IOC_Init_TypeDef

IOC init struct definition.

Public Members

IOC_DS_LEVEL_TypeDef ds

Pad drive strength level

IOC_PULL_MODE_TypeDef pull

Pad pull up/down ctrl

IOC_SCHT_MODE_TypeDef scht

Pad schmitt trigger enable

IOC_DIR_TypeDef dir

Pad input enable

struct GPIO_INT_Config_TypeDef

GPIO interrupt configure.

Public Members

GPIO_INT_TYPE_TypeDef mode

Pin interrupt mode: level or edge

GPIO_INT_POL_TypeDef polarity

Pin interrupt polarity: high/low; rasing/falling

struct GPIO_DB_Init_TypeDef

GPIO Debounce configure.

Public Members

GPIO_DB_MODE_TypeDef mode

GPIO debounce mode: single edge or double edge

GPIO_DB_POL_TypeDef polarity

GPIO debounce polarity: high or low

Macros

GPIO_BASE

GPIO DIR enumeration.

GPIO_PIN_00

GPIO Pin mask define.

GPIO pin 0

GPIO_PIN_01

GPIO pin 1

GPIO_PIN_02

GPIO pin 2

GPIO_PIN_03

GPIO pin 3

GPIO_PIN_04

GPIO pin 4

GPIO_PIN_05

GPIO pin 5

GPIO_PIN_06

GPIO pin 6

GPIO_PIN_07

GPIO pin 7

GPIO_PIN_08

GPIO pin 8

GPIO_PIN_09

GPIO pin 9

GPIO_PIN_10

GPIO pin 10

GPIO_PIN_11

GPIO pin 11

GPIO_PIN_12

GPIO pin 12

GPIO_PIN_13

GPIO pin 13

GPIO_PIN_14

GPIO pin 14

GPIO_PIN_15

GPIO pin 15

GPIO_PIN_ALL

GPIO pin all

Enumerations

enum GPIO_PinNumber

Pin Definition Enumeration Bits 4 ~ 7 represent the group, and bits 0 ~ 3 represent the number.

Values:

enumerator GPIO0
enumerator GPIO1
enumerator GPIO2
enumerator GPIO3
enumerator GPIO4
enumerator GPIO5
enumerator GPIO6
enumerator GPIO7
enumerator GPIO8
enumerator GPIO9
enumerator GPIO10
enumerator GPIO11
enumerator GPIO12
enumerator GPIO13
enumerator GPIO14
enumerator GPIO15
enumerator GPIO16
enumerator GPIO17
enumerator GPIO20
enumerator GPIO21
enumerator GPIO22
enumerator GPIO23
enumerator GPIO24
enumerator GPIO25
enumerator GPIO26
enumerator GPIO27
enumerator GPIO28
enumerator GPIO29
enumerator GPIO30
enumerator GPIO31
enumerator GPIO32
enumerator GPIO33
enumerator GPIO34
enumerator GPIO35
enumerator GPIO37
enumerator GPIO39
enumerator GPIO40
enumerator GPIO41
enumerator GPIO42
enumerator GPIO43
enumerator GPIO44
enumerator GPIO45
enumerator GPIO46
enumerator GPIO47
enumerator GPIO48
enumerator GPIO49
enumerator GPIO50
enumerator GPIO51
enumerator GPIO52
enumerator GPIO53
enumerator GPIO54
enumerator GPIO55
enumerator GPIO56
enumerator GPIO57
enumerator GPIO58
enumerator GPIO59
enumerator GPIO60
enumerator GPIO61
enumerator GPIO62
enumerator GPIO63
enumerator GPIO64
enumerator GPIO65
enumerator GPIO66
enumerator GPIO67
enumerator GPIO68
enumerator GPIO69
enumerator GPIO70
enumerator GPIO71
enumerator GPIO72
enumerator GPIO73
enumerator GPIO74
enumerator GPIO75
enumerator GPIO76
enumerator GPIO77
enumerator GPIO78
enumerator GPIO79
enumerator GPIO80
enumerator GPIO81
enumerator GPIO82
enumerator GPIO83
enumerator GPIO84
enumerator GPIO85
enum GPIO_DIR_TypeDef

Values:

enumerator GPIO_DIR_IN

GPIO Dir Input Only

enumerator GPIO_DIR_OUT

GPIO Dir Output Only

enum GPIO_INT_TYPE_TypeDef

GPIO Interrupt type enumeration.

Values:

enumerator GPIO_INT_TYPE_LEVEL

GPIO Interrupt type level

enumerator GPIO_INT_TYPE_EDGE

GPIO Interrupt type edge

enum GPIO_INT_POL_TypeDef

GPIO Interrupt polarity enumeration.

Values:

enumerator GPIO_INT_POL_HIGH_RISING

GPIO Interrupt polarity high level or rising edge

enumerator GPIO_INT_POL_LOW_FALLING

GPIO Interrupt polarity low level or falling edge

enum GPIO_DB_MODE_TypeDef

GPIO Debounce mode enumeration.

Values:

enumerator GPIO_DB_EDGE_SINGLE

GPIO debounce single edge filter

enumerator GPIO_DB_EDGE_DOUBLE

GPIO debounce double edge filter

enum GPIO_DB_POL_TypeDef

GPIO Debounce single edge polarity enumeration.

Values:

enumerator GPIO_DB_POL_HIGH

GPIO debounce high level glitch filter

enumerator GPIO_DB_POL_LOW

GPIO debounce low level glitch filter

enum IOC_DS_LEVEL_TypeDef

IO Drive Strength enumeration.

Values:

enumerator IOC_DS_LEVEL_0

IO drive strength level very low

enumerator IOC_DS_LEVEL_1

IO drive strength level low

enumerator IOC_DS_LEVEL_2

IO drive strength level medium

enumerator IOC_DS_LEVEL_3

IO drive strength level High

enum IOC_PULL_MODE_TypeDef

IO pull-up pull-down configure enumeration.

Values:

enumerator IOC_PULL_NONE

IO pull none

enumerator IOC_PULL_DOWN

IO pull down

enumerator IOC_PULL_UP

IO pull up

enum IOC_SCHT_MODE_TypeDef

IO schmitt trigger enable.

Values:

enumerator IOC_SCHT_DISABLE

IO schmitt trigger disable

enumerator IOC_SCHT_ENABLE

IO schmitt trigger enable

enum IOC_DIR_TypeDef

IOC DIR enumeration.

Values:

enumerator IOC_DIR_IN_OUT

GPIO Dir Input and Out

enumerator IOC_DIR_OUT

GPIO Dir Output Only