STM32入门——IO口捕获高低电平
简介:利用stm32的IO口的输入模式检测高低电平,进而控制led的亮灭
1、实践过程
#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。