CH32F207固件库函数说明——GPIO

CH32F207固件库函数说明——GPIO

1. 相关结构体&宏定义

1.1 GPIO_TypeDef *

typedef struct
{
  __IO uint32_t CFGLR;	//GPIO 配置寄存器低位
  __IO uint32_t CFGHR;	//GPIO 配置寄存器高位
  __IO uint32_t INDR;	//端口输入寄存器
  __IO uint32_t OUTDR;	//端口输出寄存器
  __IO uint32_t BSHR;	//端口复位/置位寄存器
  __IO uint32_t BCR;	//端口复位寄存器
  __IO uint32_t LCKR;	//配置锁定寄存器
} GPIO_TypeDef;

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE)

GPIO_TypeDef 定义了GPIO的所有寄存器,并已经预定义GPIOx[A…G]端口,对于GPIO_TypeDef *的参数,直接使用GPIOx即可。如需访问寄存器可使用GPIOx->指向寄存器


1.2 GPIOx寄存器

不建议直接读写寄存器,最好使用GPIO相关库函数


1.2.1 CFGLR

GPIO 配置寄存器低位,配置0-7引脚的输入输出模式。寄存器共32位,每4位配置一个引脚,低两位控制输出速度或输入模式,高两位控制具体输入输出模式,以Pin_0为例:

CFGLR[3:2]CFGLR[1:0]
CNF0.1CNF0.0MODE0.1MODE0.0

MODE:默认值为00b

描述
00输入模式
01输出模式,最大速度10MHz
10输出模式,最大速度2MHz
11输出模式,最大速度50MHz

CNF:默认值为01b

MODE描述
0000模拟输入
01浮空输入
10带有上下拉
11保留
>0000通用推挽输出
01通用开漏输出
10复用功能推挽输出
11复用功能开漏输出

示例程序:

//配置GPIOA.6为通用推挽输出,最大速度为50MHz
const uint32_t PP = 0b0011;				//MODE=11(输出50MHz);CNF=00(输出模式下表示通用推挽输出)
//GPIOA->CFGLR |= (PP << (n * 4));		//n表示引脚位数(0...7)
GPIOA->CFGLR |= (PP << (6 * 4));		//n = 6,即GPIOA.6配置为通用推挽输出,最大速度为50MHz

//配置GPIOA.2为上下拉输入
const uint32_t IPUD = 0b1000;			//MODE=00(输入模式);CNF=10(输入模式下表示带有上下拉)
//GPIOA->CFGLR |= (IPUD << (n * 4));	//n表示引脚位数(0...7)
GPIOA->CFGLR |= (IPUD << (2 * 4));		//n = 2,即GPIOA.2配置为上下拉输入


1.2.2 CFGHR

GPIO 配置寄存器高位,配置8-15引脚的输入输出模式。寄存器共32位,每4位配置一个引脚,低两位控制输出速度或输入模式,高两位控制具体输入输出模式,以Pin_8为例:

CFGHR[3:2]CFGHR[1:0]
CNF8.1CNF8.0MODE8.1MODE8.0

MODE:默认值为00b

描述
00输入模式
01输出模式,最大速度10MHz
10输出模式,最大速度2MHz
11输出模式,最大速度50MHz

CNF:默认值为01b

MODE描述
0000模拟输入
01浮空输入
10带有上下拉
11保留
>0000通用推挽输出
01通用开漏输出
10复用功能推挽输出
11复用功能开漏输出

示例程序:

//配置GPIOA.10为复用推挽输出,最大速度为10MHz
const uint32_t AF_PP = 0b1001;			//MODE=01(输出10MHz);CNF=10(输出模式下表示复用推挽输出)
//GPIOA->CFGHR |= (AF_PP << (n * 4));	//n+8表示引脚位数(0...7)
GPIOA->CFGHR |= (AF_PP << (2 * 4));		//n = 2, n + 8 = 10,即GPIOA.10配置为复用推挽输出,最大速度为10MHz

//配置GPIOA.13为模拟输入
const uint32_t AIN = 0b0000;			//MODE=00(输入模式);CNF=00(输入模式下表示模拟输入)
//GPIOA->CFGHR |= (AIN << (n * 4));		//n+8表示引脚位数(0...7)
GPIOA->CFGHR |= (AIN << (5 * 4));		//n = 5,n + 8 = 15,即GPIOA.15配置为模拟输入


1.2.3 INDR

端口输入寄存器。高16位无效,低16位只读并只能以 16 位形式读出。读出的值就是对应位的高低状态。

示例程序:

//读取GPIOA的所有输入状态
uint16_t GPIOA_PortValue= GPIOA->INDR;

//读取GPIOA.8的输入状态
uint8_t GPIOA_8 = (GPIOA->INDR >> 8) & 0x1;


1.2.4 OUTDR

端口输出寄存器。高16位无效,低16位只能以16位的形式操作,IO口对外输出这些寄存器的值。
对于带有上下拉的输入模式:
0:下拉输入;
1:上拉输入。

示例程序:

//


1.2.5 BSHR

端口复位/置位寄存器。高16位控制端口的复位,低16位控制端口的置位。若同时置位和复位均为1,则置位有效,对应引脚置位。只能以32位的形式操作。

示例程序:

//


1.2.6 BCR

端口复位寄存器。高16位无效,低16位只能以16位的形式操作,对这些位置位会清除对应的OUTDR
位,写 0 不产生影响。

示例程序:

//通过端口复位寄存器复位GPIOA的所有引脚
GPIOA->BCR = 0xFFFF;


1.2.7 LCKR

配置锁定寄存器。
高15位无效。

LCKR.16位为锁定键,它可以通过特定的序列写入实现锁定,但它可以随时读出。它读出为 0 时表示未锁定生效,读出 1 时表示锁定生效,

低16位为1时表示锁定对应端口的配置。只能在 LCKK 未锁定前改变这些位。锁定的配置指的是配置寄存器 GPIOx_CFGLR 和GPIOx_CFGHR。

锁定键的写入顺序:写1-写0-写1-读0(-读1)最后一步非必要,但可以确认锁定键已激活。在写入序列时任何错误都不会使激活锁定,且在写入序列时,不能更改 LCK[15:0]的值。锁定生效后,只有在下次复位后才能更改端口的配置。

示例程序:

/*********************************************************************
 * @fn      GPIOA_Pin0_LockConfig
 *
 * @brief   GPIOA.0引脚配置锁存寄存器.
 *
 * @return  none
 */
void GPIOA_Pin0_LockConfig()
{
    uint32_t tmp = 0x00010000;
    
    tmp |= GPIO_Pin_0;			//tmp = 0x00010001;tmp记录锁存的引脚为Pin_0
    GPIOA->LCKR = tmp;			//LCKR.16 = tmp.16 = 1; 锁存序列写1
    GPIOA->LCKR =  GPIO_Pin_0;	//LCKE.16 = 0;			锁存系列写0
    GPIOA->LCKR = tmp;			//LCKR.16 = tmp.16 = 1; 锁存序列写1
    tmp = GPIOA->LCKR;			//tmp = 0x00000001;		锁存序列读0
    tmp = GPIOA->LCKR;			//tmp = 0x00010001;		锁存序列读1
    //至此GPIOA.0状态锁存,如需更改GPIOA.0的状态应先解锁
    //GPIOA->LCKR = 0;
}



2. 枚举类型(enum)

以下是CH32F207系列GPIO外设将使用到的枚举类型说明。


2.1 GPIOSpeed_TypeDef

GPIO引脚工作在输出模式(寄存器GPIOx_CFGLR,MODEx>00b)时的最大速度

参数说明
GPIO_Speed_10MHz10MHz
GPIO_Speed_2MHz2MHz
GPIO_Speed_50MHz50MHz


2.2 GPIOMode_TypeDef

GPIO引脚工作模式

参数说明
GPIO_Mode_AIN模拟输入
GPIO_Mode_IN_FLOATING浮空输入
GPIO_Mode_IPD下拉输入
GPIO_Mode_IPU上拉输入
GPIO_Mode_Out_OD通用开漏输出
GPIO_Mode_Out_PP通用推挽输出
GPIO_Mode_AF_OD复用功能开漏输出
GPIO_Mode_AF_PP复用功能推挽输出


2.3 BitAction

位状态

参数说明
Bit_RESET复位
Bit_SET置位



3. 结构体(struct)

以下是CH32F207系列GPIO外设将使用到的结构体类型说明。


3.1 GPIO_InitTypeDef

用于初始化GPIO工作模式和输出速度

数据类型数据名说明
uint16_tGPIO_Pin指定要配置的 GPIO 引脚。此参数可以是GPIO_pins_define的任意值
GPIOSpeed_TypeDefGPIO_Speed指定所选引脚的输出速度。此参数的值可以是GPIOSpeed_TypeDef的任意值
GPIOMode_TypeDefGPIO_Mode指定所选引脚的工作模式。此参数的值可以是GPIOMode_TypeDef的任意值



4. 宏定义(#define)

以下是CH32F207系列GPIO外设将使用到的预定义说明。


4.1 GPIO_pins_define

常量名说明
GPIO_Pin_0GPIOx.0
GPIO_Pin_1GPIOx.1
GPIO_Pin_2GPIOx.2
GPIO_Pin_3GPIOx.3
GPIO_Pin_4GPIOx.4
GPIO_Pin_5GPIOx.5
GPIO_Pin_6GPIOx.6
GPIO_Pin_7GPIOx.7
GPIO_Pin_8GPIOx.8
GPIO_Pin_9GPIOx.9
GPIO_Pin_10GPIOx.10
GPIO_Pin_11GPIOx.11
GPIO_Pin_12GPIOx.12
GPIO_Pin_13GPIOx.13
GPIO_Pin_14GPIOx.14
GPIO_Pin_15GPIOx.15
GPIO_Pin_AllGPIOx_All_pin


4.2 GPIO_Remap_define

重映射引脚定义

常量名说明重映射默认映射
GPIO_Remap_SPI1SPI1的重映射NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5NSS/PA4, SCK/PA5, MISO/PA6, MOSI/PA7
GPIO_Remap_I2C1I2C1的重映射SCL/PB6,SDA/PB7SCL/PB8,SDA/PB9
GPIO_Remap_USART1USART1 映射配置低位(配合 GPIO_Remap_USART1_HighBit 使用)见下表见下表
GPIO_Remap_USART2USART2 的重映射位CTS/PD3, RTS/PD4, TX/PD5 ,PX/PD6, CK/PD7CTS/PA0, RTS/PA1, TX/PA2 ,PX/PA3, CK/PA4
GPIO_PartialRemap_USART3USART3 的重映射位(部分映射)TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14TX/PB10,RX/PB11,CK/PB12,CTS/PB13,RTS/PB14
GPIO_FullRemap_USART3USART3 的重映射位(完全映射)TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12同上
GPIO_PartialRemap_TIM1定时器1的重映射 (部分映射)ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15
GPIO_FullRemap_TIM1定时器1的重映射 (完全映射)ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12同上
GPIO_PartialRemap1_TIM2定时器 2 的重映射(部分映射1)ETR/PA15, CH1/PA15, CH2/PB3, CH3/PA2, CH4/PA3ETR/PA0, CH1/PA0, CH2/PA1, CH3/PA2, CH4/PA3
GPIO_PartialRemap2_TIM2定时器 2 的重映射(部分映射2)ETR/PA0, CH1/PA0, CH2/PA1, CH3/PB10, CH4/PB11同上
GPIO_FullRemap_TIM2定时器 2 的重映射(完全映射)ETR/PA15, CH1/PA15, CH2/PB3, CH3/PB10, CH4/PB11同上
GPIO_PartialRemap_TIM3定时器 3的重映射(部分映射)CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1
GPIO_FullRemap_TIM3定时器 3的重映射(完全映射)CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9同上
GPIO_Remap_TIM4定时器 4的重映射CH1/PD12, CH2/PD13, CH3/PD14, CH4/PD15CH1/PB6, CH2/PB7, CH3/PB8, CH4/PB9
GPIO_Remap1_CAN1CAN1 复用功能重映射_1CAN1_RX/PB8, CAN1_TX/PB9CAN1_RX/PA11, CAN1_TX/PA12
GPIO_Remap2_CAN1CAN1 复用功能重映射_2CAN1_RX/PD0, CAN1_TX/PD1同上
GPIO_Remap_PD01引脚 PD0&PD1 重映射引脚作为GPIO使用引脚作为晶振引脚使用
GPIO_Remap_TIM5CH4_LSI定时器 5 通道的重映射定时器 5 通道 4 映射至 LSI 内部时钟定时器 5 通道 4 的重映射
GPIO_Remap_ADC1_ETRGINJADC1 外部触发注入转换的重映射ADC1 外部触发注入转换与 TIM8_CH4 相连ADC1 外部触发注入转换与 EXTI15 相连
GPIO_Remap_ADC1_ETRGREGADC1 外部触发规则转换的重映射ADC1 外部触发规则转换与 TIM8_TRGO 相连ADC1 外部触发规则转换与 EXTI11 相连
GPIO_Remap_ADC2_ETRGINJADC1 外部触发规则转换的重映射ADC2 外部触发注入转换与 TIM8_CH4 相连ADC2 外部触发注入转换与 EXTI15 相连
GPIO_Remap_ADC2_ETRGREGADC2 外部触发规则转换的重映射ADC2 外部触发规则转换与 TIM8_TRGO 相连ADC2 外部触发规则转换与 EXTI11 相连
GPIO_Remap_ETH以太网的重映射RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5, RXD2/PB0, RXD3/PB1
GPIO_Remap_CAN2CAN2 重映射CAN2_RX/PB5, CAN2_TX/PB6CAN2_RX/PB12, CAN2_TX/PB13
GPIO_Remap_MII_RMII_SELMII 或 RMII 选择。配置内部的以太网 MAC 适用外部的 MII 接口还是 RMII 接口的收发器(PHY)配置以太网的 MAC 使用外部 RMII 接口的收发器(PHY)配置以太网的 MAC 使用外部 MII 接口的收发器(PHY)
GPIO_Remap_SWJ_Disable这些位用以配置 SW 功能和跟踪功能的 IO 口。SWD(SDI)是访问内核的调试接口。系统复位后总是作为 SWD 端口。关闭 SWD(SDI), 作为 GPIO 功能启用 SWD(SDI)
GPIO_Remap_SPI3SPI3 重映射NSS/PA4, SCK/PC10, MISO/PC11, MOSI/PC12NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5
GPIO_Remap_TIM2ITR1_PTP_SOFTIM2 内部触发 1 重映射在内部连接 TIM2_ITR1 至全速 USB OTG 的SOF 输出在内部连接 TIM2_ITR1 至以太网的 PTP 输出
GPIO_Remap_PTP_PPS以太网的 PTP PPS 重映射PTP PPS 输出到 PB5 引脚PTP PPS 不输出到 PB5 引脚
GPIO_Remap_TIM8TIM8 的重映射ETR/PA0, CH1/PB6, CH2/PB7, CH3/PB8, CH4/PC13, BKIN/PB9, CH1N/PA13, CH2N/PA14, CH3N/PA15ETR/PA0, CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1
GPIO_PartialRemap_TIM9TIM9 的重映射(部分映射)ETR/PA2, CH1/PA2, CH2/PA3, CH3/PA4, CH4/PC14, BKIN/PA1, CH1N/PB0, CH2N/PB1, CH3N/PB2ETR/PA2, CH1/PA2, CH2/PA3, CH3/PA4, CH4/PC4, BKIN/PC5, CH1N/PC0, CH2N/PC1, CH3N/PC2
GPIO_FullRemap_TIM9TIM9 的重映射(完全映射)ETR/PD9, CH1/PD9, CH2/PD11, CH3/PD13, CH4/PD15, BKIN/PD14, CH1N/PD8, CH2N/PD10, CH3N/PD12同上
GPIO_PartialRemap_TIM10TIM10 的重映射(部分映射)ETR/PB11, CH1/PB3, CH2/PB4, CH3/PB5, CH4/PC15, BKIN/PB10, CH1N/PA5, CH2N/PA6, CH3N/PA7ETR/PC10, CH1/PB8, CH2/PB9, CH3/PC3, CH4/PC11, BKIN/PC12, CH1N/PA12, CH2N/PA13, CH3N/PA14
GPIO_FullRemap_TIM10TIM10 的重映射(完全映射)ETR/PD0, CH1/PD1, CH2/PD3, CH3/PD5, CH4/PD7, BKIN/PE2, CH1N/PE3, CH2N/PE4, CH3N/PE5同上
GPIO_Remap_FSMC_NADVFSMC_NADV 重映射禁止 FSMC NADV 输出FSMC NADV 映射到 PB7
GPIO_PartialRemap_USART4UART4 重映射(部分映射)未测试TX/PC10, RX/PC11
GPIO_FullRemap_USART4UART4 重映射(完全映射)未测试同上
GPIO_PartialRemap_USART5UART5 重映射(部分映射)TX/PB4, RX/PB5TX/PC12, RX/PD2
GPIO_FullRemap_USART5UART5 重映射(完全映射)TX/PE8, RX/PE9同上
GPIO_PartialRemap_USART6UART6 重映射(部分映射)TX/PB8, RX/PB9TX/PC0, RX/PC1
GPIO_FullRemap_USART6UART6 重映射(完全映射)TX/PE10, RX/PE11同上
GPIO_PartialRemap_USART7UART7 重映射(部分映射)TX/PA6, RX/PA7TX/PC2, RX/PC3
GPIO_FullRemap_USART7UART7 重映射(完全映射)TX/PE12, RX/PE13同上
GPIO_PartialRemap_USART8UART8 重映射(部分映射)TX/PA14, RX/PA15TX/PC4, RX/PC5
GPIO_FullRemap_USART8UART8 重映射(完全映射)TX/PE14, RX/PE15同上
GPIO_Remap_USART1_HighBitUSART1 映射配置高位(配合 GPIO_Remap_USART1使用)见下表见下表


[GPIO_Remap_USART1_HighBit : GPIO_Remap_USART1]具体映射规则如下

映射
00b默认映射----CK/PA8, TX/PA9, RX/PA10, CTS/PA11, RTS/PA12
01bCK/PA8, TX/PB6, RX/PB7, CTS/PA11, RTS/PA12
10bCK/PA10, TX/PB15, RX/PA8, CTS/PA5, RTS/PA9
11bCK/PA5, TX/PA6, RX/PA7, CTS/PC4, RTS/PC5



5. 函数说明

以下为CH32F207系列常用GPIO函数说明


5.1 void GPIO_DeInit(GPIO_TypeDef *GPIOx)

功能:将 GPIOx 外设寄存器初始化为其默认值

参数数据类型说明
GPIOxGPIO_TypeDef *x可以是(A…G)中的任意值,用以选择初始化端口
返回值void

示例程序:

//将GPIOA的所有外设寄存器初始化为默认值
GPIO_DeInit(GPIOA);


5.2 void GPIO_AFIODeInit(void)

功能:将复用引脚(重映射,事件控制和EXIT配置)初始化为其默认值

参数数据类型说明
/void
返回值void

示例程序:

//重置所有复用引脚
GPIO_AFIODeInit();


5.3 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

功能:初始化指定GPIO配置信息

参数数据类型说明
GPIOxGPIO_TypeDef *x可以是(A…G)中的任意值,用以选择初始化端口
GPIO_InitStructGPIO_InitTypeDef *指向一个包含指定GPIO配置信息的GPIO_InitTypeDef 结构体指针
返回值void

示例程序:

/*********************************************************************
 * @fn      GPIO_Toggle_INIT
 *
 * @brief   将GPIOA.0配置为50MHz推挽输出
 *
 * @return  none
 */
void GPIO_Toggle_INIT( void )
{
	//新建GPIO_InitTypeDef 结构体实例
    GPIO_InitTypeDef  GPIO_InitStructure = {0};
	
	//使能GPIOA的时钟
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
    //选择初始化引脚为Pin_0
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    //选择引脚模式为推挽输出
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    //选择输出模式下最高速度为50MHz
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //配置GPIOA.0的初始化信息
    GPIO_Init( GPIOA, &GPIO_InitStructure );
}


5.4 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)

功能:用GPIO_InitTypeDef结构体的默认值填充GPIO_InitStruct。
其默认值为:

GPIO_InitStruct->GPIO_Pin  	= GPIO_Pin_All;				//端口所有引脚
GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;			//输出模式下最高速度2MHz
GPIO_InitStruct->GPIO_Mode 	= GPIO_Mode_IN_FLOATING;	//浮空输入模式
参数数据类型说明
GPIO_InitStructGPIO_InitTypeDef *指向一个包含GPIO配置信息的GPIO_InitTypeDef 结构体指针 ,该结构体将配置为默认值
返回值void

示例程序:

/*********************************************************************
 * @fn      GPIO_Struct_INIT
 *
 * @brief   将GPIO_InitTypeDef结构体恢复默认值
 *
 * @return  none
 */
 
 //新建GPIO_InitTypeDef 结构体实例(全局变量)
GPIO_InitTypeDef  GPIO_InitStructure = {0};

void GPIO_Struct_INIT( void )
{
	//将GPIO_InitStructure恢复默认值
	//GPIO_Pin  	= GPIO_Pin_All
	//GPIO_Speed	= GPIO_Speed_2MHz
	//GPIO_Mode		= GPIO_Mode_IN_FLOATING
	GPIO_StructInit(&GPIO_InitStructure );
	//配置GPIOA.All的初始化信息
    GPIO_Init( GPIOA, &GPIO_InitStructure );
}


5.5 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功能:读取某一所选引脚的输入状态

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
GPIO_Pinuint16_t(0…15)中的任意值,用以指定读取的引脚(也可以使用GPIO_pin_define的宏定义,如GPIO_Pin_0)
返回值uint8_t所选引脚的状态,1:有输入;0:无输入
备注GPIO_Pin不可以是GPIO_Pin_All,如需读取所有数据,应使用GPIO_ReadInputData函数

示例程序:

//根据GPIOA.0是否有输入做不同的事。Bit_SET = 1,Bit_RESET = 0;
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET)
{
	//Do something;
}
else
{
	//Do something else;
}


5.6 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)

功能:读取所选端口的全部引脚输入状态

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
返回值uint16_t所选端口的所有状态,以16位无符号数输出,[bit15:bit0]~[pin15:pin0]

示例程序:

//可用于矩阵键盘扫描
if(GPIO_ReadInputData(GPIOA) != 0xFFFF)
{
	uint16_t temp = GPIO_ReadInputData(GPIOA);
	switch(temp)
	{
	case 0xFFFE:/* Do something; */break;
	/*case else*/
	default:/* default action*/break;
	}
}


5.7 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功能:读取某一所选引脚的输出状态

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
GPIO_Pinuint16_t(0…15)中的任意值,用以指定读取的引脚(也可以使用GPIO_pin_define的宏定义,如GPIO_Pin_0)
返回值uint8_t所选引脚的状态,1:有输入;0:无输入
备注GPIO_Pin不可以是GPIO_Pin_All,如需读取所有数据,应使用GPIO_ReadOutputData函数

示例程序:

//根据GPIOA.0实际是否有输出做不同的事。Bit_SET = 1,Bit_RESET = 0;
if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET)
{
	//Do something;
}
else
{
	//Do something else;
}


5.8 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)

功能:读取所选端口的全部引脚输出状态

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
返回值uint16_t所选端口的所有状态,以16位无符号数输出,[bit15:bit0]~[pin15:pin0]

示例程序:

//可用于矩阵键盘扫描
if(GPIO_ReadOutputData(GPIOA) != 0xFFFF)
{
	uint16_t temp = GPIO_ReadInputData(GPIOA);
	switch(temp)
	{
	case 0xFFFE:/* Do something; */break;
	/*case else*/
	default:/* default action*/break;
	}
}


5.9 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功能:置位某一选定引脚

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
GPIO_Pinuint16_t(0…15)中的任意值,用以指定读取的引脚(也可以使用GPIO_pin_define的宏定义,如GPIO_Pin_0)
返回值uint8_t所选引脚的状态,1:有输入;0:无输入
备注GPIO_Pin不可以是GPIO_Pin_All,如需置位所有引脚,应使用GPIO_Write函数

示例程序:

//将GPIOA.0置位
GPIO_SetBits(GPIOA, GPIO_Pin_0);


5.10 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功能:复位某一选定引脚

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
GPIO_Pinuint16_t(0…15)中的任意值,用以指定读取的引脚(也可以使用GPIO_pin_define的宏定义,如GPIO_Pin_0)
返回值uint8_t所选引脚的状态,1:有输入;0:无输入
备注GPIO_Pin不可以是GPIO_Pin_All,如需复位所有引脚,应使用GPIO_Write函数

示例程序:

//将GPIOA.0复位
GPIO_ResetBits(GPIOA, GPIO_Pin_0);


5.11 void GPIO_WriteBit( GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal )

功能:控制某一选定引脚的置位或复位

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
GPIO_Pinuint16_t(0…15)中的任意值,用以指定读取的引脚(也可以使用GPIO_pin_define的宏定义,如GPIO_Pin_0)
BitValBitActionBit_SET:置位;Bit_RESET:复位
返回值void
备注GPIO_Pin不可以是GPIO_Pin_All,如需配置所有引脚,应使用GPIO_Write函数

示例程序:

//将GPIOA.0置位
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
//将GPIOA.0复位
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);


5.12 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

功能:根据参数控制所选端口的所有引脚状态

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
PortValuint16_t所选端口的所有状态按低位到高位组合成的16位无符号数,每一位0:复位;1:置位
返回值void

示例程序:

//将[GPIOA.0-->GPIOA.7]置位[GPIOA.8-->GPIOA.15]复位
GPIO_Write(GPIOA, 0xFF00);
//将[GPIOA.0/2/4/6...]置位[GPIOA.1/3/5/7...]复位
GPIO_Write(GPIOA, 0x5555);


5.13 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

功能:锁存GPIO引脚状态

参数数据类型说明
GPIOxGPIO_TypeDef*x可以是(A…G)中的任意值,用以选择读取引脚的端口
GPIO_Pinuint16_t(0…15)中的任意值,用以指定锁存的引脚(也可以使用GPIO_pin_define的宏定义,如GPIO_Pin_0)
返回值void
备注GPIO_Pin不可以是GPIO_Pin_All



6. 待补充函数


6.1 void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)


6.2 void GPIO_EventOutputCmd(FunctionalState NewState)


6.3 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)


6.4 void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)


6.5 void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值