STM32CUDEIDE study 按键
按键分为两种方式出发,一种是轮询的方式触发,一种是使用外部中断的形式触发。每个都有住一事项
先说轮询方式,举个例子用按键控制LED灯。
在学习按键之前要了解gpio的八中工作模式:
1、浮空输入模式(浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。)
2、上拉输入模式(上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平也还是低电平。)
3、下拉输入模式(下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平可以保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也还是高电平。)
4、模拟输入模式(模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等等。)
5、开漏输出模式(开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。这里要注意N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,I/O端口的电平不一定是输出的电平。)简单的来说就是当设置gpio引脚输出为高电平,则引脚的电平状态是根据端口的上拉下拉决定,而设置低电平端口输出就是低电平。
经测试,开漏输出初始电平为低电平,要是选择上拉引脚,输出低电平,不上拉不下拉,,输出的是低电平,开漏输出一开始是高电平,选择上拉引脚或者不上拉下拉,都为高电平
6、开漏复用输出模式(开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的。)
7、推挽输出模式(推挽输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经P-MOS管和N-MOS管,最终输出到I/O端口。这里要注意P-MOS管和N-MOS管,当设置输出的值为高电平的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定:高电平;当设置输出的值为低电平的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定:低电平。同时,I/O端口的电平也可以通过输入电路进行读取;注意,此时I/O端口的电平一定是输出的电平。)简单来说就是,设置为引脚设为推挽输出上拉就是高电平,下拉就是低电平,不上拉不下拉,引脚初始电平就是初始选择的高低电平,可以通过程序编写改变引脚电平
初始电平为high,输出模式下拉会引脚拉低,上拉引脚拉高,初始低电平同理
先把按键对应的引脚设置成gpio_input模式,而且一定要根据电路图选择上拉或者上拉,当按键是接地的时候,要把按键的引脚设置成上拉,因为引脚上拉引脚是高电平,当按键按下电平被拉低以此通过读取按键的引脚判断按键是否被按下。