-
输入输出的八种模式
输出模式:可以控制端口的是否通电,继而使当前引脚上连接的外设工作。
输入模式:可以读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据
每个GPIO引脚都可以由软件配置成输出(推挽或开漏)、输入(浮空或模拟或上拉或下拉)或复用的外设功能 端口。
推挽输出 | GPIO_Mode_Out_PP | 高电平接VDD(正极) 低电平接VSS(负极) |
开漏输出 | GPIO_Mode_Out_OD | 高电平接高阻态(上拉电阻) 低电平接VSS(负极) |
复用推挽输出 | GPIO_Mode_AF_PP | 靠外设控制 高电平接VDD (正极) 低电平接VSS(负极) |
复用开漏输出 | GPIO_Mode_AF_OD | 靠外设控制 高电平接高阻态(上拉电低电平接VSS(负极) |
浮空输入 | GPIO_Mode_IN_FLOATING | 上下拉电阻都不接入,可以读取外部输入是高是低 |
上拉输入 | GPIO_Mode_IPU | 上拉电阻接入,默认高电平 |
下拉输入 | GPIO_Mode_IPD | 下拉电阻接入,默认低电平 |
模拟输入 | GPIO_Mode_AIN | GPIO无效,直接读取模拟信号,引脚直接接入内部ADC |
-
定义GPIO口的函数
GPIO_DeInit(GPIO_TypeDef* GPIOx);
复位( 外设 )
GPIO_DeInit(GPIOA);
GPIO_PinLockConfig(GPIOx, GPIO_Pin_0);
锁定某个引脚,防止意外更改
GPIO_PinLockConfig(GPIOA,GPIO_Pin_1);
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
定义(外设,自己定义的结构体的地址)把结构体里的自己定义好的参数都赋值给外设
GPIO_InitTypeDef GOIP_INITSTRUCTURE;//结构体类型 结构体名称 GOIP_INITSTRUCTURE.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GOIP_INITSTRUCTURE.GPIO_Pin=GPIO_Pin_0;//使用0号引脚 GOIP_INITSTRUCTURE.GPIO_Speed=GPIO_Speed_50MHz;//最高的切换电平的速率
GPIO_Init(GPIOA,&GOIP_INITSTRUCTURE);
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);//读取
-
输入输出GPIO口的函数
输入:读取GPIO口的函数
GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取某一个端口的值(外设,引脚);
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
GPIO_ReadInputData(GPIO_TypeDef* GPIOx);读取整个外设的值,返回16位,每一位代表一个引脚的值(GOIPA);
GPIO_ReadInputData(GPIOA);
GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);读取自己输出的是什么,取输出寄存器的某一位,(外设,引脚);
GPIO_ReadOutputDataBit(GPIOA,GOIP_Pin_0);
GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
读取整个外设的输出的值,返回16位,每一位代表一个引脚的值(GOIPA);
GPIO_ReadOutputData(GPIOA);
输出:写入GPIO口的函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
设置高电平(外设,引脚);
GPIO_SetBits(GPIOA,GPIO_Pin_0);//高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);设置低电平(外设,引脚);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);//低电平
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);写入电平(外设,引脚, 高电平或低电平);
GPIO_WriteBit(GPIOA,GPIO_Pin_0, Bit_RESET);//设置低电平 GPIO_WriteBit(GPIOA,GPIO_Pin_1, Bit_SET);//设置高电平
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);全写入(外设,高电平或者低电平);
GPIO_Write(GPIOA,Bit_SET);//把GPIOA的所有引脚设置高电平 GPIO_Write(GPIOA,Bit_RESET);//把GPIOA的所有引脚设置低电平