STM32仿真,低成本学习STM32-GPIO输入-按键控制LED

上一次我们完成了流水和LED闪烁的STM32HAL库的仿真,这次我们来进行按键控制,也就是GPIO的输入。首先我们复制流水灯的工程因为需要用到LED。然后我们来看一下GPIO的输入模式

1. 模拟输入

  • 模式标识: GPIO_Mode_AIN

  • 内部结构: 芯片内部与GPIO相关的所有数字电路(施密特触发器)都被断开。引脚直接连接到模拟外设上,例如ADC(模数转换器)或比较器。

  • 特点

    • 不进行数字信号的检测与整形。

    • 功耗低,因为避免了数字电路开关产生的功耗。

  • 典型应用场景

    • ADC采集: 读取模拟传感器的电压值(如电位器、光敏电阻分压)。

    • 模拟比较器: 作为比较器的输入。

2. 浮空输入

  • 模式标识: GPIO_Mode_IN_FLOATING

  • 内部结构: 施密特触发器打开,引脚处于高阻态。内部既不上拉到VDD,也不下拉到GND。

  • 特点

    • 当引脚外部没有任何驱动时,其电平是不确定的(悬空),极易受到外部电磁干扰。

    • 完全由外部电路决定其电平状态。

  • 典型应用场景

    • 通信总线: 用于开漏(Open-Drain)模式的通信线路,如I2C的SDA和SCL线。这些线路上通常有外部上拉电阻。

    • 连接有明确输出驱动的电路: 例如连接另一个MCU的推挽输出引脚,或者一个数字传感器芯片的输出脚。

3. 上拉输入

  • 模式标识: GPIO_Mode_IPU

  • 内部结构: 在芯片内部通过一个电阻(约30-50KΩ)连接到VDD(3.3V)。

  • 特点

    • 当外部没有信号驱动时,引脚会被拉至高电平(3.3V)。

    • 当外部主动驱动为低电平时,外部驱动需要“战胜”内部上拉电阻,将电平拉低。

  • 典型应用场景

    • 按键/开关检测: 按键一端接GPIO,另一端接地(GND)。当按键未按下时,引脚因上拉而为高电平;按下时,引脚被拉到地,变为低电平。

    • 用于默认需要高电平有效的输入信号

4. 下拉输入

  • 模式标识: GPIO_Mode_IPD

  • 内部结构: 在芯片内部通过一个电阻(约30-50KΩ)连接到GND(0V)。

  • 特点

    • 当外部没有信号驱动时,引脚会被拉至低电平(0V)。

    • 当外部主动驱动为高电平时,外部驱动需要“战胜”内部下拉电阻,将电平拉高。

  • 典型应用场景

    • 按键/开关检测: 按键一端接GPIO,另一端接VCC(3.3V)。当按键未按下时,引脚因下拉而为低电平;按下时,引脚被拉到VCC,变为高电平。

    • 用于默认需要低电平有效的输入信号

这里我们需要用到的就是下拉输入,因为我们的STM32单片机是若上拉,强下拉也就是低电平驱动强,所以我们把他设置为上拉模式。

然后我们打开复制好的原理图。去除多余的灯

然后选中BUTTON放置按键。

再点击RES,放置电阻。

找到CAP放置电容。

再点击终端模式

放置一个电源

和一个接地,我们就可以进行电路配置了。

然后拿出来一个网络标签,放在PB0口,命名为PB0。

我们把按键电路,按照这个样子搭建。

再拿出来一个网络标签,放在这个位置。我们按键电路就搭建好了。

然后我们框选,进行我们的一个块复制,再拿出一套按键的电路。

端口就改为PB1

当然我们给PB1上一个网络标签。

然后我们将复制过来的文件打开。

找到我们的按键控制也就是PB0和PB1

更改为GPIO_input,就是GPIO输入模式。PB1也是同样的道理因为按键控制是将低电平送入单片机,所以是输入模式。

然后我们来到GPIO的设置。

第一行是:将PA1默认设置为高电平,因为我们是低电平控制也就是低电平点亮,高电平熄灭。

第二行是:设置GPIO的输出模式,我们选择为推挽输出。

第三行是:设置上拉,下拉电阻,我们选择不需要。

第四行是:GPIO输出的速度,我们暂时不涉及,选哪个都行。

然后我们将PA2也进行这样子的设置。

我们打开PB0这个引脚

第一行是:GPIO输入的意思

第二行是:设置上下拉电阻,pull-up是上拉电阻,pull-down是下拉电阻,我们选择上拉,让内部不输入时候为高电平。

第三行是:设置标签,看个人喜好,我就喜欢用官方默认的。

然后生成文件。

我们选择打开。

找到USER--main.c开始完成我们的程序编写。

我们需要用到GPIO读取的函数

点击下方的function

找到GPIO.c就可以看到按键读取函数

点进去我们看到,他第一个变量是GPIO端口,第二个变量是GPIO端口号,很清晰我们就可以明白。先选择端口,再到具体引脚。

首先我们判断PB0这个端口是否为低电平,因为为低电平就是我们按下了。

然后我们进行给PA1低电平

此时看到按下去之后我们的灯就点亮了。

先复制一个初始值用来记录按键拿下几次。

按下依次这个值+1.但是会一直+

我们进行这样子i需改就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值