文章目录一、GPIO简介1-1基本概念1-2功能二、GPIO的4中输出模式2-1 通用与复用2-2 开漏输出与推挽输出三、GPIO的4种输入模式3-1 上拉输入和下拉输入3-2 浮空输入四、GPIO模块的接口——stm32标准库五、实验点亮LED一、GPIO简介1-1基本概念GPIOGeneral Purpose Input/Output是单片机上的外设一个通用输入输出接口用于与外部设备进行数字信号交互。STM32标准库中的GPIO模块用于控制通用输入输出引脚。每个GPIO引脚可配置为输入或输出模式支持多种工作状态如推挽输出、开漏输出、模拟输入等。1-2功能简单说,单片机上的GPIO模块就是用来控制MCU上的引脚的。GPIO有8个工作模式输出就是从单片机上的输出数据寄存器里发出高低电平信号反过来输入就是从外界收到高低电平信号给输入数据寄存器里。0代表低电平/电压1代表高电平/电压。输出时单片机通过代码发出的0/1信号来决定输出的高低电压。输入时单片机会自动将收到的电压根据高低将bit位设置成0/1。二、GPIO的4中输出模式2-1 通用与复用下图是一个GPIO端口的结构图通用通过编程代码直接命令CPU像寄存器写0或者1,以此控制IO引脚产生高电压/低电压/高阻抗。复用比如通过编码将想要打印的信息“Hello”写入到串口模块然后串口模块会转换“Hello”对应的ASCLL码值成二进制0/1信号以此控制IO引脚以串口数据帧8~9bit位的二进制格式的形式输出高低电平。2-2 开漏输出与推挽输出推挽开漏开漏模式无论怎样P-MOS管始终是断开的。信号为0时与推挽模式差不多N-MOS闭合接地电压为0输出高电平信号为1时N-MOS断开产生高阻抗I/O引脚既不是高电压也不是低电压。三、GPIO的4种输入模式3-1 上拉输入和下拉输入上拉输入闭合上拉电阻上拉电阻的电路接了VCC电源电压为3.3V,此时由于适合施密特触发器串联因为触发器的电阻无穷大所以施密特触发器会分走所有的电压即高电压输入 1。下拉输入闭合下拉电阻因为连接了GND所以电压为0施密特触发器的电压也是0即低电压输入 0。3-2 浮空输入如果上拉电阻和下拉电阻都不使能闭合那么就是输入浮空。那么为了防止GPIO端口高阻态出现浮空现象需要启用上拉、下拉电阻。四、GPIO模块的接口——stm32标准库时钟使能操作GPIO前需使能对应端口的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO初始化配置使用标准库时需通过GPIO_InitTypeDef结构体配置引脚参数,例如GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_PinGPIO_Pin_0;// 选择引脚0GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;// 推挽输出模式GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;// 输出速度GPIO_Init(GPIOA,GPIO_InitStructure);// 初始化GPIOAGPIO初始化函数第一个参数为初始化的GPIO组别例如元器件的引脚的属于GPIOA控制那么第一个参数就填GPIOA 第二个参数则是GPIO的引脚配置参数结构体对象不要忘记取地址符号。voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);常用工作模式输入模式输出模式GPIO_Mode_IN_FLOATING浮空输入GPIO_Mode_Out_PP推挽输出GPIO_Mode_IPU上拉输入GPIO_Mode_Out_OD开漏输出GPIO_Mode_IPD下拉输入复用功能模拟模式GPIO_Mode_AF_PP复用推挽GPIO_Mode_AIN模拟输入GPIO_Mode_AF_OD复用开漏五、实验点亮LED调用GPIO接口,实现LED的点亮。首先找到LED对应的引脚又知道PC13引脚属于GPIOC组别控制的引脚通过手册查看。所以在调用GPIOC时就需要初始化GPIOC步骤1、主函数框架#includestm32f10x.hintmain(void){}2、调用GPIO时钟使能#includestm32f10x.hintmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);}3、初始化GPIO的引脚配置参数结构体#includestm32f10x.hintmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_13;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_2MHz;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_OD;}4、初始化GPIOC#includestm32f10x.hintmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_13;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_2MHz;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_OD;GPIO_Init(GPIOC,GPIO_InitStruct);}GPIO_WriteBit 是嵌入式开发中常见的函数如STM32 HAL库用于控制GPIO引脚的单一位状态。其核心功能是通过寄存器操作将指定引脚设置为高电平GPIO_PIN_SET或低电平GPIO_PIN_RESET。典型函数原型如下voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitAction BitVal);参数说明1、GPIOxGPIO端口如GPIOA、GPIOB。2、GPIO_Pin目标引脚编号如GPIO_PIN_5。3、BitVal写入的值SET或RESET。GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);//传0Delay(100);GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);//传1Delay(100);以上代码就能实现在STM32单片机上PC13处LED灯的闪烁了。
STM32 GPIO无长篇大论:8种工作模式一眼看懂
文章目录一、GPIO简介1-1基本概念1-2功能二、GPIO的4中输出模式2-1 通用与复用2-2 开漏输出与推挽输出三、GPIO的4种输入模式3-1 上拉输入和下拉输入3-2 浮空输入四、GPIO模块的接口——stm32标准库五、实验点亮LED一、GPIO简介1-1基本概念GPIOGeneral Purpose Input/Output是单片机上的外设一个通用输入输出接口用于与外部设备进行数字信号交互。STM32标准库中的GPIO模块用于控制通用输入输出引脚。每个GPIO引脚可配置为输入或输出模式支持多种工作状态如推挽输出、开漏输出、模拟输入等。1-2功能简单说,单片机上的GPIO模块就是用来控制MCU上的引脚的。GPIO有8个工作模式输出就是从单片机上的输出数据寄存器里发出高低电平信号反过来输入就是从外界收到高低电平信号给输入数据寄存器里。0代表低电平/电压1代表高电平/电压。输出时单片机通过代码发出的0/1信号来决定输出的高低电压。输入时单片机会自动将收到的电压根据高低将bit位设置成0/1。二、GPIO的4中输出模式2-1 通用与复用下图是一个GPIO端口的结构图通用通过编程代码直接命令CPU像寄存器写0或者1,以此控制IO引脚产生高电压/低电压/高阻抗。复用比如通过编码将想要打印的信息“Hello”写入到串口模块然后串口模块会转换“Hello”对应的ASCLL码值成二进制0/1信号以此控制IO引脚以串口数据帧8~9bit位的二进制格式的形式输出高低电平。2-2 开漏输出与推挽输出推挽开漏开漏模式无论怎样P-MOS管始终是断开的。信号为0时与推挽模式差不多N-MOS闭合接地电压为0输出高电平信号为1时N-MOS断开产生高阻抗I/O引脚既不是高电压也不是低电压。三、GPIO的4种输入模式3-1 上拉输入和下拉输入上拉输入闭合上拉电阻上拉电阻的电路接了VCC电源电压为3.3V,此时由于适合施密特触发器串联因为触发器的电阻无穷大所以施密特触发器会分走所有的电压即高电压输入 1。下拉输入闭合下拉电阻因为连接了GND所以电压为0施密特触发器的电压也是0即低电压输入 0。3-2 浮空输入如果上拉电阻和下拉电阻都不使能闭合那么就是输入浮空。那么为了防止GPIO端口高阻态出现浮空现象需要启用上拉、下拉电阻。四、GPIO模块的接口——stm32标准库时钟使能操作GPIO前需使能对应端口的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO初始化配置使用标准库时需通过GPIO_InitTypeDef结构体配置引脚参数,例如GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_PinGPIO_Pin_0;// 选择引脚0GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;// 推挽输出模式GPIO_InitStructure.GPIO_SpeedGPIO_Speed_50MHz;// 输出速度GPIO_Init(GPIOA,GPIO_InitStructure);// 初始化GPIOAGPIO初始化函数第一个参数为初始化的GPIO组别例如元器件的引脚的属于GPIOA控制那么第一个参数就填GPIOA 第二个参数则是GPIO的引脚配置参数结构体对象不要忘记取地址符号。voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);常用工作模式输入模式输出模式GPIO_Mode_IN_FLOATING浮空输入GPIO_Mode_Out_PP推挽输出GPIO_Mode_IPU上拉输入GPIO_Mode_Out_OD开漏输出GPIO_Mode_IPD下拉输入复用功能模拟模式GPIO_Mode_AF_PP复用推挽GPIO_Mode_AIN模拟输入GPIO_Mode_AF_OD复用开漏五、实验点亮LED调用GPIO接口,实现LED的点亮。首先找到LED对应的引脚又知道PC13引脚属于GPIOC组别控制的引脚通过手册查看。所以在调用GPIOC时就需要初始化GPIOC步骤1、主函数框架#includestm32f10x.hintmain(void){}2、调用GPIO时钟使能#includestm32f10x.hintmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);}3、初始化GPIO的引脚配置参数结构体#includestm32f10x.hintmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_13;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_2MHz;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_OD;}4、初始化GPIOC#includestm32f10x.hintmain(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_13;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_2MHz;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_OD;GPIO_Init(GPIOC,GPIO_InitStruct);}GPIO_WriteBit 是嵌入式开发中常见的函数如STM32 HAL库用于控制GPIO引脚的单一位状态。其核心功能是通过寄存器操作将指定引脚设置为高电平GPIO_PIN_SET或低电平GPIO_PIN_RESET。典型函数原型如下voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitAction BitVal);参数说明1、GPIOxGPIO端口如GPIOA、GPIOB。2、GPIO_Pin目标引脚编号如GPIO_PIN_5。3、BitVal写入的值SET或RESET。GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);//传0Delay(100);GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);//传1Delay(100);以上代码就能实现在STM32单片机上PC13处LED灯的闪烁了。