STM32_GPIO之按键输入

本文详细介绍了STM32微控制器中GPIO端口用于独立按键输入的应用案例。与51单片机不同,STM32的GPIO端口可以通过设置为上拉输入模式来简化电路设计,无需额外设置高电平。文章还探讨了条件编译的作用,并提供了一个具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
名称:STM32_GPIO之按键输入
说明:这个实验是GPIO的输入功能。基本的思路和51单片机差不多。也是
操作相应的IO口,不过不同的是对于独立按键输入实验来说,51单片机是
需要一开始把待检测的IO口设置成高电平,然后检测其何时被拉低。而对
于STM32来说,其GPIO端口就可以设置成上拉输入,即不需要再人为的把对
应的对应的IO口设置成高电平,硬件电路会自动把对应端口引脚拉成高电
平。

还有一点关于条件编译要说的:这个ifndef… #endif 一般用在头文件中。书上说为了防止重复编译。就我目前了解的来看,在实际应用中,如果在两个.c源文件中都include了一个头文件,那么好像加不加这个条件编译都没什么影响(如果没有定义什么特殊的东西的话)。 但是,最好不要在头文件中定义变量(如int i);因为这样的话,如果两个.c源文件的都include了这个头文件,那么就会在链接时(注意是链接不是编译时)发生重复定义的错误。(好像是因为声明可以多次,但定义只能一次。)所以通常的做法是在.c源文件中定义变量,然后在对应的头文件中利用外部声明(即类似于extern int i;) 进行使用。

*/

#include "key.h"

//KEY端口配置
void KEY_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    GPIO_InitStructure.GPIO_Pin = ALLKEY;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(KEY_PORT, &GPIO_InitStructure);


}


//声明延时函数
void delay_ms(u16 time);

//检查独立按键
int CheakKey()
{
    uint16_t key = 1;
    int i = 0;
    for(i = 1;i <= 8;++i)
    {

        //软件消抖
        if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)
        {
            delay_ms(10);
            if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)
                return i;
        }

        key = key<<1;       //左移一位
    }

    //if( i > 8)
        return -1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值