GPIO工作方式(8种)
4种输入模式
- 输入浮空
- 输入上拉
- 输入下拉
- 模拟输入
4种输出模式
- 开漏输出(由CPU写入输出数据)
- 开漏复用功能(由外设写入输出数据)
- 推挽式输出(由CPU写入输出数据)
- 推挽式复用功能(由外设写入输出数据)
ps:开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。无论哪种方式输出数据同时返回输入数据寄存器CPU可读到。
每组GPIO端口的寄存器
- 两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)
- 两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)
- 一个32位置位/复位寄存器(GPIOx_BSRR)
- 一个16位复位寄存器(GPIOx_BRR)
- 一个32位锁定寄存器(GPIOx_LCKR)
初始化步骤
- 使能IO口时钟
- 初始化IO口模式
- 操作IO口
寄存器调用顺序
- RCC
- CRL(H)
- 输入IDR(配置上或下拉时通过同位ODR配置0位下拉,1为上拉)
- 输出ODR(可通过BSRR和BRR配置)
标准库函数使用
初始化GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
GPIOx为使用的端口组(如GPIOA)
GPIO_InitStruct有3个参数GPIO_Pin, GPIO_Speed,GPIO_Mode
GPIO_Pin为组内端口号(如GPIO_Pin_0)
GPIO_Speed为传输速度(GPIO_Speed_10MHz,GPIO_Speed_2MHz, GPIO_Speed_50MHz)
GPIO_Mode为端口模式:
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(推挽式复用功能)
读位数据GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx为使用的端口组(如GPIOA)
GPIO_Pin为组内端口号(如GPIO_Pin_0)
读组数据GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
GPIOx为使用的端口组(如GPIOA)
输出位置高GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
操作BSRR
GPIOx为使用的端口组(如GPIOA)
GPIO_Pin为组内端口号(如GPIO_Pin_0)
输出位置低GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
操作BRR
GPIOx为使用的端口组(如GPIOA)
GPIO_Pin为组内端口号(如GPIO_Pin_0)
时钟使能RCC_APB2(1)PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
RCC_APB2Periph使能的端口组(如RCC_APB2Periph_GPIOA)
NewState为使能状态(DISABLE不使能或ENABLE使能)