搜索
bottom↓
回复: 0
打印 上一主题 下一主题

《ESP32-S3使用指南—MicroPython版 V1.0》第十章 EXIT实验

[复制链接]

出0入234汤圆

跳转到指定楼层
1

1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729



第十章 EXIT实验


       在前面几章的学习中,我们掌握了ESP32-S3的IO口最基本的操作。本章我们将介绍如何把ESP32-S3的IO口作为外部中断输入来使用,在本章中,我们将以中断的方式,实现我们在第九章所实现的功能。
       本章分为如下几个小节:
       10.1 外部中断简介
       10.2 machine.Pin 类
       10.3 硬件设计
       10.4 软件设计
       10.5 下载验证

       10.1 外部中断简介
       很多时候,我们程序采集一个传感器的数据,采集后就要进行分析判断,若符合某个条件就会做出处理。为了随时根据传感器的变化做出反应,所以程序需要一直重复这个过程。这种方式称为轮询,这种方式是最简单的。
       但轮询有时候并不能很好完成一些实际场景的应用,比如在某个时刻按下按键,但这时候程序执行的是采集传感器数据的过程,这就意味着没有检测到按键按下的动作,此时该系统就成了无法正常响应的系统了。通过对该按键配置外部中断功能,这时候就能很好解决上述问题。
       外部中断是由外部设备发起请求的中断。每个中断对应一个中断程序,中断可以看作一段独立于主程序之外的程序,也称为中断回调函数。当中断被触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中断程序。当中断程序运行完毕,则返回到先前主程序暂停的位置,继续运行主程序,如此便可达到实时响应处理事件的效果。中断程序运行示意图如下图所示。

图10.1.1 中断程序执行示意图

       10.2 machine.Pin 类

       1,machine.Pin 类的构造方法
       machine.Pin 类操作方法相关内容,请参考章节七 LED实验的7.1小节。

       2,machine.Pin 类的方法

       ①:设置外部中断
       其函数原型如下:
  1. Pin.irq(handler=None,trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING))
复制代码
       此方法的参数描述如下:

表10.2.1.1 Pin.irq方法的参数描述

       返回值:一个回调对象。

       10.3 硬件设计

       1. 例程功能
       本章实验功能简介:通过外部中断的方式让开发板上的BOOT独立按键控制LED灯翻转。

       2. 硬件资源

       1)LED灯
              LED-IO1

       2)独立按键
              BOOT-IO0

       3. 原理图
       独立按键硬件部分的原理图,如下图所示。

图10.3.1 独立按键与ESP32-S3连接原理图

       这里需要注意的是:BOOT设计为采样到按键另一端的低电平为有效电平。

       10.4 软件设计

       10.4.1 程序流程图
       程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:

图10.4.1.1 程序流程图

       10.4.2 程序解析
       本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。EXIT实验main.py源码如下:
  1. from machine import Pin
  2. import time


  3. # 定义全局变量
  4. global led, key

  5. """
  6. * @brief       按键中断服务函数
  7. * @param       key:定时器句柄
  8. * @retval      无
  9. """
  10. def KEY_INT_IRQHandler(key):
  11.    
  12.     global led, key
  13.     time.sleep_ms(10)                           # 按键消抖
  14.    
  15.     if key.value() == 0:
  16.         global led_state
  17.         led_state = led.value()
  18.         led.value(not led_state)

  19. """
  20. * @brief       程序入口
  21. * @param       无
  22. * @retval      无
  23. """
  24. if __name__ == '__main__':
  25.    
  26.     # 初始化LED并输出高电平
  27.     led = Pin(1,Pin.OUT,value = 1)
  28.     # 配置key引脚模式及上下拉
  29.     key = Pin(0,Pin.IN,Pin.PULL_UP)
  30.     # 定义中断,下降沿触发
  31.     key.irq(KEY_INT_IRQHandler,Pin.IRQ_FALLING)
  32.     # 主循环,防止程序退出
  33.     while True:
  34.         pass
复制代码
       该示例主要用于通过按键来控制LED灯的状态。具体来说,当按键被按下时,LED灯的状态会被切换(如果灯原本是亮的,则会熄灭;如果灯原本是熄灭的,则会亮起)。为了实现这个功能,程序首先初始化了LED灯和按键,并为按键配置了一个中断。当中断被触发(即按键被按下)时,程序会先等待10毫秒以消除按键抖动,然后检查按键的状态。如果按键状态为低(即按键被按下),程序会获取当前LED的状态并将其反转。

       10.5 下载验证
       下载完之后,通过BOOT按键来控制LED灯的开关状态。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 07:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表