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

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

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。

  • 24
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏夜星空似海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值