最近稍微再复习了一下GPIO,再回过首来看当初自己初学GPIO时的那份懵懂,当初的一些疑惑也随之消散,原来所谓的困难也并非如此困难,我很喜欢天浩哥的那句话: 遇到困难,这时候你应该兴奋起来,每一个困难都在帮助我们自身找出问题,发现问题,解决问题,能力便会一步步提升。
废话不多说,先来看一篇总结:
浮空输入模式:
GPIO被配置为输入模式,但没有内部上拉或下拉电,GPIO引脚的电平由外部信号决定。如果外部信号提供足够的驱动电流,GPIO引脚可以准确地检测到外部信号的高电平或低电平状态。然而,如果外部信号的驱动电流较弱,GPIO引脚可能会受到电磁干扰或漂移影响,导致不稳定的电平状态。
适用于读取外部设备的信号,通常用于读取外部设备的信号,例如传感器输出、按键状态等。在这种情况下,外部设备的输出电平可以直接连接到GPIO引脚,而不需要额外的电路元件。然而,由于浮空输入模式的引脚状态容易受到外部干扰的影响,因此在使用时需要注意外部环境的干扰情况,以确保准确读取外部信号。
上拉输入模式:
GPIO被配置为输入模式,并启用了内部上拉电阻。在此模式下,当外部设备未连接时,GPIO引脚被拉高到VDD(供电电压)。
适用于连接开关、按钮等外部设备。当外部设备断开连接时,GPIO引脚被上拉到高电平,以确保稳定的输入状态。
下拉输入模式:
GPIO被配置为输入模式,并启用了内部下拉电阻。在此模式下,当外部设备未连接时,GPIO引脚被拉低到地。
适用于连接开关、按钮等外部设备。当外部设备断开连接时,GPIO引脚被下拉到低电平,以确保稳定的输入状态。
模拟输入模式:
GPIO被配置为模拟输入模式,用于连接模拟传感器或其他模拟设备。在此模式下,GPIO引脚可以读取模拟电压信号。
适用于连接模拟传感器、温度传感器等模拟设备,需要测量模拟电压信号的场景。
推挽输出模式:
GPIO被配置为输出模式,并且输出推挽信号。在此模式下,GPIO引脚可以提供高电平或低电平输出。
适用于控制LED、继电器、电机等需要提供电流的外部设备。推挽输出模式可以提供较高的输出电流。
开漏输出模式:
GPIO被配置为输出模式,并且输出开漏信号。在此模式下,GPIO引脚只能拉低,而不能拉高。
适用于实现多个设备共享同一个信号线的场景,如I2C总线上的SDA线。开漏输出模式允许多个设备通过外部上拉电阻来共享同一个信号线。
复用功能推挽输出模式:
GPIO被配置为复用功能模式,并且输出推挽信号。在此模式下,GPIO引脚具有某种特定的复用功能,并且可以提供高电平或低电平输出。
适用于与外部设备进行通信,如UART、SPI、I2C等。复用功能推挽输出模式允许GPIO引脚与外部设备通信并提供电平输出。
复用功能开漏输出模式:
GPIO被配置为复用功能模式,并且输出开漏信号。在此模式下,GPIO引脚具有某种特定的复用功能,并且只能拉低,而不能拉高。
适用于实现多个设备共享同一个信号线的场景,如I2C总线上的SCL线。复用功能开漏输出模式允许GPIO引脚与外部设备通信并提供开漏输出。
关于硬件消抖,我有话要说:
a. 硬件消抖,添加滤波电容,利用电容两端电压不能突变的特性减少抖动杂波,使波形更加规整。b. 软件方式一:采用延时检测的方法错开抖动区域。c. 软件方式二:按键按下后产生外部中断事件,进入中断处理函数中进行延时,缺点:中断中延时会导致低优先级中断阻塞,也导致主循环阻塞,实时性很差。d. 软件方式三:按键 GPIO 初始化为中断方式,按键按下后产生外部中断事件,进入中断处理函数中,不采用延时 消抖,而是开启了一个定时器,定时器设定为10ms 后产生中断,定时器中断后再次检测按键 GPIO , 如果仍然是按下状态则调用按键处理函数。中断中只是开启了定时器,并未阻塞,主循环也没有阻 塞,从性能上最优,但是这种方法用到了一个定时器,占用了处理器资源。
上下拉主要用于输入模式,例如按键的上下拉,要区分按键按下和未按下的状态。
开漏模式,最重要的是只能输出低电平,高电平只能由外部上拉,I2C的线与,SPI等,基本会与通信协议挂钩。
复用模式,无非就是,一个引脚上有好多外设功能,现在想要选择另外一个呗 。
GPIO属于基本功吧,其实也没什么好说的,路漫漫其修远兮,吾将上下而求索。