STM32按键输入

GPIO输入

GPIO的特点:

        具有内部上拉下拉的功能

        可以使用外部下拉或上拉

在这里我们的按键分别接入PA0和PC13引脚,另一端全都接GND

按 键 控 制 L E D 灯

软 件 设 计 流 程

        初 始 化 系 统

                初 始 化 GPIO 外 设 时 钟

                初 始 化 按 键 和 L E D 的 引 脚

        检 测 按 键 输 入 电 平 来 控 制 L E D

编写(配置)按键相关函数,在这里我们可以同时初始化两个时钟GPIOA,GPIOC(都在APB2总线下)。

主函数

实现按下SW2,LED灯亮,按下SW3,LED灯灭

按键检测部分:

使用GPIO_ReadInputDataBit函数读取GPIOA的第0号引脚(SW2)和GPIOC的第13号引脚(SW3)的状态。如果检测到引脚为低电平(即按键被按下),则执行相应的LED控制操作。这里有一个潜在的问题:如果两个按键同时被按下,由于两个if语句是独立的,LED的状态可能会变得不确定,因为两个条件都可能为真,并且它们的执行顺序是未定义的。在实际应用中,可能需要使用else ifswitch语句来确保一次只有一个操作被执行。

下面四个函数都是用于GPIO端口的读写操作

区别:

  1. GPIO_ReadInputDataBit
    • 功能:读取指定GPIO端口上指定引脚的输入数据位。
    • 返回值:返回一个uint8_t类型的值,表示读取到的引脚状态(0或1,分别对应低电平和高电平)。
    • 用途:用于检测外部信号的状态,如按键是否被按下、传感器输出等。
  2. GPIO_ReadInputData
    • 功能:读取指定GPIO端口的整个输入数据寄存器的内容。
    • 返回值:返回一个uint16_t类型的值,表示读取到的端口状态(每个位对应一个引脚的状态)。
    • 用途:当需要同时读取多个引脚的状态时,这个函数比GPIO_ReadInputDataBit更高效。
  3. GPIO_ReadOutputDataBit
    • 功能:读取指定GPIO端口上指定引脚的输出数据位。
    • 返回值:与GPIO_ReadInputDataBit相同,返回一个uint8_t类型的值,表示读取到的引脚状态(但这次是输出状态)。
    • 用途:虽然不常见,但在某些情况下可能需要检查GPIO引脚的输出状态,以确保硬件或软件逻辑按预期工作。
  4. GPIO_ReadOutputData
    • 功能:读取指定GPIO端口的整个输出数据寄存器的内容。
    • 返回值:与GPIO_ReadInputData相同,返回一个uint16_t类型的值,表示读取到的端口输出状态(每个位对应一个引脚的状态)。
    • 用途:与GPIO_ReadInputData类似,但用于输出状态。同样,在需要同时检查多个引脚输出状态时很有用。

这四个函数的主要区别在于它们访问的GPIO端口数据的上下文(输入或输出)和粒度(单个位或整个端口)。GPIO_ReadInputDataBitGPIO_ReadOutputDataBit提供了对单个引脚状态的访问,而GPIO_ReadInputDataGPIO_ReadOutputData则允许同时读取整个端口的状态。选择哪个函数取决于你的具体需求,比如你是需要检测外部信号还是验证内部输出,以及你是否需要同时处理多个引脚。

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值