每个通用 I/O 端口包括 **4 个 32 位配置寄存器**( GPIOx_MODER、 GPIOx_OTYPER、
GPIOx_OSPEEDR 和 GPIOx_PUPDR)、 **2 个 32 位数据寄存器**(GPIOx_IDR 和
GPIOx_ODR)、 **1 个 32 位置位/复位寄存器** (GPIOx_BSRR)、 1 个 32 位**锁定寄存器**
(GPIOx_LCKR) 和 2 个 32 位**复用功能选择寄存器**( GPIOx_AFRH 和 GPIOx_AFRL)。
GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟
//GPIOF9,F10初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO
typedef enum
{
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */输入
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */输出
GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */复用
GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */模拟
}GPIOMode_TypeDef;
typedef enum
{
GPIO_OType_PP = 0x00, //推挽输出
GPIO_OType_OD = 0x01 //开漏输出
}GPIOOType_TypeDef;
#define IS_GPIO_OTYPE(OTYPE) (((OTYPE) == GPIO_OType_PP) || ((OTYPE) == GPIO_OType_OD))
typedef enum
{
GPIO_Low_Speed = 0x00, /*!< Low speed */
GPIO_Medium_Speed = 0x01, /*!< Medium speed */
GPIO_Fast_Speed = 0x02, /*!< Fast speed */
GPIO_High_Speed = 0x03 /*!< High speed */
}GPIOSpeed_TypeDef;
typedef enum
{
GPIO_PuPd_NOPULL = 0x00,
GPIO_PuPd_UP = 0x01,
GPIO_PuPd_DOWN = 0x02
}GPIOPuPd_TypeDef;
#define IS_GPIO_PUPD(PUPD) (((PUPD) == GPIO_PuPd_NOPULL) || ((PUPD) == GPIO_PuPd_UP) || \
((PUPD) == GPIO_PuPd_DOWN))
GPIO_ABCDEFG+PH0+PH1
IO口有
四种输入输出模式解读:
https://blog.csdn.net/qq_43033547/article/details/88759002