【系列笔记为跟随UP主江协科技学习STM32过程的一些问题,同时方便日后忘记时复习,文中部分内容来源于UP主的PPT同时加入个人理解】
一.GPIO简介
GPIO(General Purpose Input Output)即通用输入输出口。可配置为8种输入输出模式 ; 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 ,输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。
二.GPIO的基本输入输出模式
1.模拟输入(GPIO_Mode_AIN ):用于ADC采集;
2.浮空输入(GPIO_Mode_IN_FLOATING) :若引脚浮空则电平不确定;
3.下拉输入(GPIO_Mode_IP ):内接下拉电阻,默认低电平;
4.上拉输入(GPIO_Mode_IPU):内接上拉电阻,默认高电平;
5.开漏输出(GPIO_Mode_Out_OD ):高电平为高阻态,无驱动能力;
6.推挽输出(GPIO_Mode_Out_PP ):高低电平均具有驱动能力,默认低电平;
7.复用开漏输出(GPIO_Mode_AF_OD ):连接到片上外设,输出由片上外设控制;
8.复用推挽输出(GPIO_Mode_AF_PP) :连接到片上外设,输出由片上外设控制;可用于产生PWM信号。
三.GPIO常用库函数
void GPIO_DeInit(GPIO_TypeDef* GPIOx)://将指定的 GPIOx 外设恢复到默认状态。
void GPIO_AFIODeInit(void)://将外设映射(Alternate Function)寄存器恢复为默认状态。
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)://根据结构体 GPIO_InitStruct 中的配置参数,初始化特定 GPIO 外设的引脚。
// GPIO_InitTypeDef* GPIO_InitStruct参数
typedef struct
{
uint16_t GPIO_Pin; //引脚选择
GPIOSpeed_TypeDef GPIO_Speed; //指定所选引脚的速度(常用GPIO_Speed_50MHz)
GPIOMode_TypeDef GPIO_Mode; //引脚工作模式选择
}GPIO_InitTypeDef;
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)://将结构体 GPIO_InitStruct 中的成员变量初始化为默认值。
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)://读取指定 GPIO 的单个输入引脚的状态。
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)://读取指定 GPIOx的所有输入引脚的状态。
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)://读取指定 GPIO 的单个输出引脚的状态。
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)://读取指定 GPIO 的所有输出引脚的状态。
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)://将指定 GPIO 的一个或多个输出引脚置高。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)://将指定 GPIO 的一个或多个输出引脚置低。
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)://设置指定 GPIO 的一个输出引脚的电平状态。
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)://设置指定 GPIO 的所有输出引脚的电平状态。
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)://锁定指定 GPIO 的一个或多个引脚的配置寄存器,防止意外改变配置。
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)://配置用于事件输出功能的引脚。
void GPIO_EventOutputCmd(FunctionalState NewState)://使能或禁用事件输出功能。
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)://重新映射指定引脚的功能。
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)://配置外部中断线路选择。
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface)://配置以太网接口的引脚。
引脚电平翻转:GPIO_WriteBit(GPIOx,GPIO_Pin_y, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOx,GPIO_Pin_y)));
四.GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_y;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed;
GPIO_Init(GPIOx, &GPIO_InitStructure);
【个人初步学习,若有错误恳请指正】