STM32入门指南:IO口电平捕获详解

STM32入门——IO口捕获高低电平

简介:利用stm32的IO口的输入模式检测高低电平,进而控制led的亮灭

文章目录

  • STM32入门——IO口捕获高低电平
  • 1、实践过程
  • 2,IO口模式
  • 1、实践过程

    新建工程

    初始化IO

    选择模式

    配置相应引脚

    主函数调用

    #include "stm32f10x.h"                  // Device header
    #include "Delay.h"
    
    int main(void)
    {
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//启用GPIOA的时钟
    	
    	GPIO_InitTypeDef GPIO_InitStructure1;//创建GPIO初始化结构体
    	GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_Out_PP;//配置模式-推挽输出
    	GPIO_InitStructure1.GPIO_Pin = GPIO_Pin_0;  //指定相应引脚  GPIOA0
    	GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;//输出速度
    	GPIO_Init(GPIOA, &GPIO_InitStructure1);//初始化GPIOA,初始化完成,GPIOA0默认为高电平
    	GPIO_ResetBits(GPIOA,GPIO_Pin_0);//将GPIOA0变为低电平
    	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//启用GPIOB的时钟
    	
    	GPIO_InitTypeDef GPIO_InitStructure2;//创建GPIO初始化结构体
    	GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_IPU;//配置模式-输入模式
    	GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_1;  //指定相应引脚  GPIOA1
    	GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;//输出速度
    	GPIO_Init(GPIOA, &GPIO_InitStructure2);//初始化GPIOB
    
    
    
    	while (1)
    	{
    		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0)//判断GPIOA1是否为低电平
    		{
    			GPIO_SetBits(GPIOA,GPIO_Pin_0);//将GPIOA0置高电平,led亮
    		}
    		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 1)//判断GPIOA1是否为高电平
    		{
    			GPIO_ResetBits(GPIOA,GPIO_Pin_0);//将GPIOA0置低电平,led灭
    		}
    	}
    }
    
    

    2,IO口模式

    模式 功能
    模拟输入(Analog Input)-GPIO_Mode_AIN 在模拟输入模式下,GPIO 引脚被配置为直接接收模拟信号,通常用于连接 ADC(模数转换器)进行模拟量的采集
    浮空输入(Floating Input)-GPIO_Mode_IN_FLOATING 引脚既不上拉也不下拉,输入状态取决于外部电路。在没有外部信号时,引脚状态不确定,容易受到噪声影响
    上拉输入(Input with Pull-Up)-GPIO_Mode_IPU 引脚配置为输入,并且内置的上拉电阻激活,使得在没有外部信号时,引脚默认为高电平
    下拉输入(Input with Pull-Down)-GPIO_Mode_IPD 与上拉输入相反,内置的下拉电阻激活,使得在没有外部信号时,引脚默认为低电平
    开漏输出(Open Drain Output)-GPIO_Mode_OUT_OD 输出模式下,当输出为低电平时,引脚与地连接;输出为高电平时,引脚呈高阻态
    推挽输出(Push-Pull Output)-GPIO_Mode_Out_PP 输出模式下,引脚可以直接驱动高电平或低电平,无需外部电阻。这种模式用于直接驱动数字电路,如 LED 或继电器
    复用开漏输出(Alternate Function Open Drain)-GPIO_Mode_AF_OD 与开漏输出类似,但在复用模式下工作,用于提供特定的复用功能,如 I²C、SPI 等通信协议
    复用推挽输出(Alternate Function Push-Pull)-GPIO_Mode_AF_PP 与推挽输出类似,但在复用模式下工作,用于提供特定的复用功能,同样适用于多种通信协议

    我们可以通过改变输入模式来直观了解不同模式下的输入情况,观察发现,上拉输入在输入悬空时为高电平,下拉输入相反。

    GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;//同时开启两个IO// GPIO_Pin_All  开启GPIOA/B的所有IO口
    

    Speed有3个等级:

    GPIO_Speed_2MHz;
    GPIO_Speed_10MHz;
    GPIO_Speed_50MHz;
    

    GPIO_Speed_50MHz 表示引脚的输出速度被设置为最高 50 MHz,这意味着引脚可以在每秒钟切换高达 5000 万次的状态。然而,值得注意的是,更高的输出速度会增加电流消耗,可能产生更多的电磁干扰(EMI),并且对驱动能力有要求。一般都设置为50MHz。

    速度被设置为最高 50 MHz,这意味着引脚可以在每秒钟切换高达 5000 万次的状态。然而,值得注意的是,更高的输出速度会增加电流消耗,可能产生更多的电磁干扰(EMI),并且对驱动能力有要求。一般都设置为50MHz。

    作者:夏夜星空似海

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32入门指南:IO口电平捕获详解

    发表回复