这一篇开始我们通过一个简单的应用来讲解如何在Arduino开发环境下,快速搭建一个GPIO中断的应用。
我用的是ESP32-S的开发板,这个开发板上有两个按键提供,一个是复位按键,另一个按键可以进行配置使用。
首先我们还是看一下ESP32-S开发板的原理图 有关按键的部分;
==== 接下来进入我们的撸码模式 ====
代码撸完在Arduino中是这个样子的:
但是他是一个INO类型的文件,并不利于我们的代码分析:
这里有一个小技巧,把这个INO文件复制一份,并且把后缀改为.C的文件,然后把这个文件放到我们的Arduino安装目录中ESP32的文件夹下面,然后在这个目录下,我们利用source Insight的代码分析功能来分析我们的软件。
在sourceInsight工具下,我们代码将可以很容易的进行分析,跳转和查找,代码总览如下:
==== 源码分析 ====
1.声明并创建一个button结构:
2.创建中断服务函数,并在中断函数中进行计数处理:
在定义这个isr函数时候 用到了一个前缀,这个前缀的意思是,这个函数并不是存储在flash中,而是被放到了IRAM里(先不要太深入到细节为什么要这么做,这和ESP32的构架有关,先照做就是):
3.在setup阶段配置串口、GPIO引脚、以及中断入口:
4.在loop循环中,实时查询Button按键状态,引入系统运行时间计数函数,并设置在20s后解除GPIO的中断功能:
====================实战应用==============================
1.将我们的ESP32开发板接入电脑,并确认好串口号:
2.在Arduino软件中将串口号变更为我们接入开发板的串口号,确认串口无占用:
3.点击编译上传按钮等待软件编译完成,并烧录到我们的ESP32开发板中实际运行:
4.在软件运行以后,开发板的烧录串口会自动解除占用,并通过该串口输出系统运行信息以及应用内部打印信息,这时候我们需要配置一下串口调试工具,并打开串口:
5.点击开发板的复位按键,复位已烧录的程序:
6.点击我们开发板的button1按键,观察串口输出打印信息:
7.等待系统运行20s后,观察串口打印信息,并尝试按下button1,观察串口是否有信息输出:
====================串口特别介绍篇==========================
ESP32的串口资源中有3个串口:分别为Serial 、Serial1、Serial2。
Serial串口的主要功能:
1. 首先它是我们的软件下载更新需要使用的串口。
2. 他是系统运行信息打印串口,以及我们APP内置运行打印信息输出串口。
3. 他的串口发送/接收引脚是固定的,是IO1和IO3。
Serial串口的实际工作流程:
1.ESP32开发板上电以后,会进入APP运行模式。
2.ESP32内置操作系统会在运行阶段,不断检测Serial串口的状态。
3.当检测到串口是未连接状态,并且这个时候有烧录请求命令时(点击Arduino软件的烧录上传按钮),这时Serial串口会转换到程序下载模式,并且串口被占用进行软件烧录操作。
4.在软件烧录完成以后,系统自动重启运行,又进入到了APP运行模式,并且输出串口打印信息,并进入到第2步串口监测捕捉命令模式。
==== 总结篇 ====
总结:基于Arduino的开发方式和传统的单片机开发方式不太一样。
例如以前我们总是可以利用仿真环境IDE以及配合仿真器,进行全仿真运行,断点运行,watch查看变量等等方式去调试我们的软件。在基于Arduino方式开发的嵌入式软件,我们无法进行全仿真 断点运行等调试手段,我们只能内嵌代码到我们的软件中,通过串口输出打印的方式,来判断我们的系统的运行装,这一点要慢慢的适应,其实并不是只有Arduino这个样子,假如你接触过嵌入式Linux的开发,那么你会知道,其实除了我们用的传统的单片机开发,其它嵌入式开发领域都是依靠出口输出 debug信息的方式来完成软件调试的。