我是靠谱客的博主 聪慧秀发,最近开发中收集的这篇文章主要介绍【MicroPython ESP32/8266】定时器中断示例解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

【MicroPython ESP32/8266】定时器中断示例解析


  • ✨本案例基于Thonny平台开发。✨
  • 相关篇《ESP32 Micropython 定时器中断的使用示例》

????定时器介绍

  • ????esp8266官方介绍文档:https://docs.micropython.org/en/v1.19.1/esp8266/quickref.html#timers
  • ????esp32官方介绍文档:https://docs.micropython.org/en/v1.19.1/esp32/quickref.html#timers

????esp8266 Timer

支持虚拟(基于 RTOS)定时器。使用定时器 ID 为 -1的machine.Timer 类

Timer.init(*, mode=Timer.PERIODIC, period=- 1, callback=None)
  • ????初始化定时器示例:
tim.init(period=100)                         # periodic with 100ms period
tim.init(mode=Timer.ONE_SHOT, period=1000)   # one shot firing after 1000ms

mode可以是以下之一:

  • Timer.ONE_SHOT - 定时器运行一次,直到通道的配置周期到期。
  • Timer.PERIODIC - 定时器以通道的配置频率定期运行。

????Timer.ONE_SHOTTimer.PERIODIC 对比示例

Timer.ONE_SHOT示例代码:

from machine import Timer
from machine import Pin
import utime
led = Pin(2, Pin.OUT) #用machine模块的pin功能设置引脚2为输出。

interruptCounter = 0

# 每个与类相关联的方法调用都自动传递实参self ,
#它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。”
def blink(self): # 中断回调函数的形参必须要有
    global interruptCounter#声明为全局变量
    interruptCounter +=1
    print("interruptCounter"+str(interruptCounter))
    led.value(not led.value()) #将引脚2状态取反
    tim.init(period=3000, mode=Timer.ONE_SHOT, callback=blink)
       
tim = Timer(-1)# -1 的 ID 构造一个虚拟计时器
#tim.init(period=2000, mode=Timer.PERIODIC, callback=blink)# 周期模式
tim.init(period=3000, mode=Timer.ONE_SHOT, callback=blink)# 单触发模式

Timer.PERIODIC 示例代码:

from machine import Timer
from machine import Pin
import utime
led = Pin(2, Pin.OUT) #用machine模块的pin功能设置引脚2为输出。

interruptCounter = 0

# 每个与类相关联的方法调用都自动传递实参self ,
#它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。”

def blink(self): # 中断回调函数的形参必须要有
    global interruptCounter#声明为全局变量
    interruptCounter +=1
    print("interruptCounter"+str(interruptCounter))
    led.value(not led.value()) #将引脚2状态取反

       
tim = Timer(-1)# -1 的 ID 构造一个虚拟计时器
tim.init(period=2000, mode=Timer.PERIODIC, callback=blink)# 周期模式
#tim.init(period=3000, mode=Timer.ONE_SHOT, callback=blink)# 单触发模式

  • Timer.deinit():取消初始化定时器。停止定时器,并禁用定时器外设。

????esp32 Timer

⛳ESP32接口具有4个硬件定时器。可以调用的定时器有timer0-3共4个定时器。具体看前面的相关esp32定时器篇的介绍。????⏫

示例代码:

from machine import Timer

tim0 = Timer(0)
tim0.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(0))

tim1 = Timer(1)
tim1.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(1))

????总结

????在使用定时器中断时,中断回调函数的形参必须要有,没有也要添加Self作为实参来传递。否则会报错,这一点和C语言编程的单片机是有很大的差异,在51单片机编程里,中断函数是禁止形参而且是无返回值的。除非使用lambda表达式。

最后

以上就是聪慧秀发为你收集整理的【MicroPython ESP32/8266】定时器中断示例解析的全部内容,希望文章能够帮你解决【MicroPython ESP32/8266】定时器中断示例解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部