我们今天来。
点亮一盏灯。
多路复用器和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的介绍