当前位置:   article > 正文

STM32入门——IO口捕获高低电平_stm32判断引脚高低电平

stm32判断引脚高低电平

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

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

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灭
		}
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

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口
  • 1

Speed有3个等级:

GPIO_Speed_2MHz;
GPIO_Speed_10MHz;
GPIO_Speed_50MHz;
  • 1
  • 2
  • 3

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/943368
推荐阅读
相关标签
  

闽ICP备14008679号