【雕爷学编程】MicroPython手册之 RP2(Pico)的machine.Timer.irq()定时器中断

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
RP2(Pico)是树莓派基金会推出的一款微控制器开发板,基于自研的 RP2040 芯片,售价仅为 4 美元。它可以用 C/C++ 或 Python 语言编程,适合用于物联网、机器人、音乐等各种应用场景。技术参数:RP2(Pico)的技术参数如下:

1、搭载双核 ARM Cortex M0+ 处理器,运行频率 133 MHz
2、内置 264 KB 的片上 RAM,板载 2 MB 闪存
3、可通过专用 QSPI 总线支持最高 16 MB 的片外闪存
4、DMA 控制器
5、30 个 GPIO 引脚,其中 4 个可用作模拟输入
6、2 个 UART、2 个 SPI 控制器和 2 个 I2C 控制器
7、16 个 PWM 通道
8、USB 1.1 主机和设备支持
9、8 个树莓派可编程 I/O(PIO)状态机,用于自定义外围设备支持
10、支持 UF2 的 USB 大容量存储启动模式,用于拖放式编程

在这里插入图片描述
MicroPython提供了RP2(Pico)开发板的定时器中断功能,可以使用machine.Timer.irq()方法配置定时器中断。以下是对该功能的详细解释:

主要特点:

精确的定时功能:RP2(Pico)的定时器中断功能能够提供精确的定时功能,通过设置定时器的计数值和频率,可以实现在指定时间间隔内触发中断。
多定时器支持:RP2(Pico)支持多个定时器,可以同时配置多个定时器中断。这使得可以在不同时间间隔内执行不同的任务,并提高系统的灵活性。
硬件支持:RP2(Pico)的定时器中断是基于硬件实现的,因此具有较高的准确性和稳定性。

应用场景:

实时任务调度:通过定时器中断,可以实现实时任务的调度,例如周期性地采集传感器数据、定时发送数据等。
控制时序:在需要精确控制时序的应用中,可以使用定时器中断来触发关键操作,例如驱动显示屏幕、控制步进电机等。
定时任务执行:定时器中断可以用于执行定时任务,例如定时触发系统维护操作、定时检查设备状态等。

需要注意的事项:

计时精度:在使用定时器中断时,需要考虑定时器的计时精度。具体精度取决于RP2(Pico)的硬件特性和定时器的设置。对于高精度要求的应用,需要仔细选择合适的定时器和配置参数。
中断处理函数:编写定时器中断处理函数时,需要保持函数简洁、高效,避免在其中执行耗时的操作,以确保实时性和准确性。
定时器冲突:当使用多个定时器时,需要小心处理定时器之间的冲突,以避免不同定时器之间的干扰和冲突。
综上所述,MicroPython的machine.Timer.irq()方法提供了配置RP2(Pico)定时器中断的功能。它具有精确的定时功能、多定时器支持和硬件支持等特点,适用于实时任务调度、控制时序和定时任务执行等多种应用场景。在使用定时器中断时,需要注意计时精度、中断处理函数的效率和定时器冲突等方面的问题,以确保系统的稳定性和准确性。

案例1:周期性定时中断

import machine

def irq_handler(timer):
    print("Timer interrupt triggered")

# 创建定时器对象
timer = machine.Timer()

# 设置定时器中断触发时间为1秒
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=irq_handler)

要点解读:
使用machine.Timer类创建定时器对象。
使用timer.init()函数初始化定时器,设置中断触发周期为1秒。
通过mode参数设置定时器模式为周期性模式。
定义irq_handler()函数作为中断处理程序,在定时器中断触发时执行相应的操作。

案例2:单次定时中断

import machine

def irq_handler(timer):
    print("Timer interrupt triggered")

# 创建定时器对象
timer = machine.Timer()

# 设置定时器中断触发时间为2秒
timer.init(period=2000, mode=machine.Timer.ONE_SHOT, callback=irq_handler)

要点解读:
使用machine.Timer类创建定时器对象。
使用timer.init()函数初始化定时器,设置中断触发时间为2秒。
通过mode参数设置定时器模式为单次模式。
定义irq_handler()函数作为中断处理程序,在定时器中断触发时执行相应的操作。

案例3:精确定时中断

import machine

def irq_handler(timer):
    print("Timer interrupt triggered")

# 创建定时器对象
timer = machine.Timer()

# 设置定时器中断触发时间为500毫秒
timer.init(period=500, mode=machine.Timer.PERIODIC, callback=irq_handler)

要点解读:
使用machine.Timer类创建定时器对象。
使用timer.init()函数初始化定时器,设置中断触发时间为500毫秒。
通过mode参数设置定时器模式为周期性模式。
定义irq_handler()函数作为中断处理程序,在定时器中断触发时执行相应的操作。
以上案例展示了使用MicroPython的RP2(Pico)的machine.Timer.irq()方法进行定时器中断配置的参考代码,涵盖了周期性定时中断、单次定时中断和精确定时中断的应用。您可以根据自己的需求和具体场景进行进一步的调整和扩展。

案例4:定时器中断执行任务

import machine

# 定义中断处理函数
def irq_handler(timer):
    print("Timer interrupt occurred")
    # 在中断处理函数中执行任务

# 创建定时器对象
timer = machine.Timer()

# 配置定时器中断
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=irq_handler)

# 主循环
while True:
    pass

要点解读:
此案例展示了如何使用machine.Timer.irq()方法配置定时器中断,并定义中断处理函数。
使用machine.Timer()创建一个定时器对象。
使用init()方法配置定时器的周期、模式和中断处理函数。在此例中,定时器每隔1秒触发一次中断,触发时调用irq_handler()函数。
在中断处理函数中可以执行需要在定时器中断时执行的任务。
在主循环中保持程序运行,以便定时器中断可以被检测到。

案例5:定时器中断控制LED闪烁

import machine

# 定义中断处理函数
def irq_handler(timer):
    led.toggle()  # 切换LED状态

# 创建定时器对象
timer = machine.Timer()

# 创建LED对象
led = machine.Pin(25, machine.Pin.OUT)

# 配置定时器中断
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=irq_handler)

# 主循环
while True:
    pass

要点解读:
此案例展示了如何使用machine.Timer.irq()方法配置定时器中断,并在中断处理函数中控制LED的闪烁。
使用machine.Timer()创建一个定时器对象。
使用machine.Pin()创建一个LED对象,指定引脚号和输出模式。
使用init()方法配置定时器的周期、模式和中断处理函数。在此例中,定时器每隔1秒触发一次中断,触发时调用irq_handler()函数。
在中断处理函数中,通过调用toggle()方法切换LED的状态,实现LED的闪烁效果。
在主循环中保持程序运行,以便定时器中断可以被检测到。

案例6:定时器中断实现计数器功能

import machine

# 定义全局变量
counter = 0

# 定义中断处理函数
def irq_handler(timer):
    global counter
    counter += 1
    print("Counter:", counter)

# 创建定时器对象
timer = machine.Timer()

# 配置定时器中断
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=irq_handler)

# 主循环
while True:
    pass

要点解读:
此案例展示了如何使用machine.Timer.irq()方法配置定时器中断,并在中断处理函数中实现一个简单的计数器功能。
使用machine.Timer()创建一个定时器对象。
定义一个全局变量counter用于记录计数器的值。
使用init()方法配置定时器的周期、模式和中断处理函数。在此例中,定时器每隔1秒触发一次中断,触发时调用irq_handler()函数。
在中断处理函数中,通过递增计数器的值并打印出来,实现计数器的功能。
在主循环中保持程序运行,以便定时器中断可以被检测到。
这些案例提供了关于MicroPython的RP2(Pico)使用machine.Timer.irq()方法配置定时器中断的实际应用程序参考代码。你可以根据自己的需求和具体的周期、中断处理函数等进行相应的修改和调整。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。需要正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。对于涉及到硬件操作的代码,请确保在使用之前充分了解和确认所使用的引脚和电平等参数的正确性和安全性。

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值