程序小白
认证:优质创作者
所在专题目录 查看专题
初识Arduino:简单是简单了点,还是蛮有意思的
基于ESP32快速搭建蓝牙串口透传应用(Arduino)
基于ESP32搭建的蓝牙串口透传应用代码分析(Arduino)
基于ESP32搭建GPIO-Interrupt应用及分析(Arduino)
基于ESP32例程分析Functional-Interrupt(C++浅析)及GPIO-API详解
基于ESP32——FreeRTOS初识(Arduino)
作者动态 更多
小小调度器——开局default,优雅总藏于细节之中
04-02 09:23
小小调度器——调度器核心的纯C实现
04-01 14:09
小小调度器——原来C代码还能这么写,原作者没少挨打吧!
03-27 15:42
解析由系统库引发的hardfault血案(RT-Thread+ESP32)
2023-07-17 16:04
TINA瞬时现象仿真分析——运放缓冲器振铃
2023-02-28 11:38

基于ESP32搭建GPIO-Interrupt应用及分析(Arduino)

      这一篇开始我们通过一个简单的应用来讲解如何在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信息的方式来完成软件调试的。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 4
关注 115
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧