老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出

我们今天来。

点亮一盏灯。

多路复用器和GPIO矩阵ESP32芯片有34个物理GPIO焊盘,每个焊盘

它可以用作通用IO或外设的引脚。

,GPIO引脚通过一个非常复杂的GPIO矩阵互连,该矩阵基本上是一个多路复用器。我们可以灵活地选择将哪些GPIO引脚路由到内部的哪些外设信号。

,可以看看下图:

IO_MUX中的每个GPIO pad都有一组寄存器。每个焊盘可以配置为GPIO功能(连接到GPIO交换矩阵)或直接连接功能。

一些高速信号,如以太网、SDIO、SPI、JTAG、UART等。将绕过GPIO开关矩阵,以实现更好的高频数字特性。所以高速信号会通过IO_MUX直接输入输出,灵活性不如使用GPIO交换矩阵。

与STM32的简单复用不同,ESP32的复用器使得设计人员可以灵活改变芯片内部的GPIO引脚连接,路由到任意信号,使得硬件设计和布线方便很多。

矩阵的外设输入通过IO_MUX和GPIO交换

通过GPIO交换矩阵输出信号

ESP32还有18个低功耗(低功耗RTC)和模拟功能的GPIO引脚,我们在后面设计具体案例时会详细说明。

完整的pin码描述需要参考乐心官方《ESP32 技术规格书》。

特别提醒

ESP32上电时IO12的电平将决定外接闪光灯的工作电压。通电时认为闪光灯工作在1.8V,低时认为闪光灯工作在3.3V

常用的模块被拉下了脚里面。

也就是flash工作在3.3V如果使用外接强上拉模块,可能会工作异常。

连接硬件的数字输出功能。在这里,我们将用LED灯来演示。首先,我们需要在setup()中初始化对应的IO输出模式,使用pinMode函数。第一个参数对应于IO序列号,第二个参数是IO模式。

pinMode(4,输出);然后,可以通过digitalWrite()函数改变数字引脚的电平状态,高输出为高,低输出为低。

digitalWrite(4,高);//输出高电平digitalWrite(4,低);//输出低电平所有ESP32 GPIO引脚都可以在输入或输出模式下工作。引脚34-39只能用于输入。还有其他的引脚有其他的特性,所以我们现在不用太担心这个。

需要的时候看看就行了。

数字输入功能在输入模式下,我们可以通过IO读取外部的数字信号,这里用按键表示。

和输出模式一样,我们在setup()中初始化输入模式对应的IO,也使用了pinMode函数。

pinMode(2,输入);然后可以通过digitalRead(GPIO_pin)读取相应IO的电平。

在下面的代码中,我们定义了2个GPIO引脚。GPIO2用于按键输入,GPIO4用于LED输出。

初始化后,我们在loop()中不断读取按键的电平状态,赋给LED,实现按键时灯灭,松开时灯亮的效果。

#定义LED _ GPIO 4 #定义BTN _ GPIO 2 int BTN _ State=0;//key state void setup(){ pin mode(LED _ GPIO,output);pinMode(BTN_GPIO,输入);} void loop(){ //读取关键状态BTN _状态=数字读取(BTN _ GPIO);//将按键状态作为LED灯的输出数字写(LED _ GPIO,BTN _ State);}我们按照之前的教程

编译程序,刷到开发板。

,看效果:

接下来,我们用中断的方式来实现:

附加中断(uint8 _ tpin,void () (void),intmode)函数用于配置中断功能:

参数,GPIO引脚号

二、中断回调函数

参数,中断触发模式(上升、下降、变化等。)

参数这个可以设置各种模式,比如上升沿触发,下降沿启动,任意沿触发,电平信号等等。

让我们用上面的例子来改变它:

#定义LED _ GPIO 4 #定义BTN _ GPIO 2 int BTN _ State=0;//按键状态//中断回调函数void Bt _ callback (void) {BTN _状态=数字读取(BTN _ gpio);//读取关键状态数字Write (LED _ GPIO,BTN _ State);//将按键状态作为LED灯的输出} void setup () {pin mode (LED _ GPIO,output);//LED输出模式pinMode(BTN_GPIO,输入);//进入上拉模式附加中断(BTN _ GPIO,BT _ callback,change);//Enable interrupt} void loop(){}主程序中不需要做任何事情。当中断检测到一个按键被按下或释放(任何一个跳沿),就会触发中断回调函数的执行,然后在LED上输出结果。

与其他单片机相比,ESP32的GPIO外设功能略复杂,但无论是SDK还是Arduino模式的开发,

官方已经给我们写了相应的库,复杂的配置已经定义好了,可以直接调用了。

怎么样?是不是很简单?

有兴趣的同学也可以打开官方库看看寄存器是怎么配置的,会有更深入的了解。

谢谢大家,

希望大家喜欢ESP32的学习!

以前的建议:

宇哥带你上ESP 32: 02用VSCode PlatformIO搭建开发环境。

玉哥给你看ESP 32: 01的介绍

其他教程

线描画水彩画(创意水彩画画法)

2023-1-8 19:09:11

其他教程

组建专门普法团队(dji mic无线麦克风)

2023-1-8 19:11:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索