K210定时器

五、定时器

(一)实验目的

通过定时器让LED_B蓝灯周期性每秒闪烁一次

(二)实验讲解

定时器是在machine的 Timer模块。通过 MicroPython可以轻松编程使用。

1.K210定时器资源

硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。
需要注意的是,定时器在不同的硬件中可能会有不同的表现。MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。

K210共有 3 个定时器, 每个定时器有 4 个通道可以使用

2.函数调用

(1)构造函数:

machine.Timer(id,channel,mode=Timer.MODE_ONE_SHOT,period=1000, unit=Timer.UNIT_MS, callback=None, arg=None, start=True, priority=1, div=0)

通过指定的参数新建一个 Timer 对象

  • id: 定时器编号 , [Timer.TIMER0~TIMER2] 定时器 0-2 (0,1,2,三个定时器)
  • channel: Timer 通道, [Timer.CHANNEL0~Timer.CHANNEL3] (0,1,2,3,四个通道)
  • mode: 定时器模式
    • MODE_ONE_SHOT: 一次性
    • MODE_PERIODIC: 周期性
    • MODE_PWM:PWM模式
  • period:定时器为周期性模块时每个周期时间值
  • unit: 设置周期的单位,默认位毫秒(ms
    • Timer.UNIT_S:秒
    • Timer.UNIT_MS:毫秒
    • Timer.UNIT_US:微秒
    • Timer.UNIT_NS:纳秒
  • callback: 定时器回调函数, 定义了两个参数, 一个是定时器对象Timer, 第二个是在定义对象是希望传的参数arg

注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态分配开关中断等动作

  • arg: 希望传给回调函数的参数,作为回调函数的第二个参数
  • start: 是否在对象构建成功后立即开始定时器
    • True:立即开始
    • False:不立即开启,需要调用start()函数来启动定时器
  • priority: 硬件定时器中断优先级, 与特定的CPU相关, 在K210中,取值范围是[1,7], 值越小优先级越高
  • div: 硬件定时器分频器,取值范围[0,255], 默认为0, clk_timer(定时器时钟频率) = clk_pll0(锁相环0频率)/2^(div+1)

clk_timer*period(unit:s) 应该 < 2^32 并且 >=1

(2)使用方法

  • 获取或者设置回调函数
Timer.callback(callback)

callback: 设置的回调函数,可选参数, 如果不传参数,则只返回先有的回调函数

  • 获取或者设置定时周期
Timer.period(period)

period: 可选参数,配置周期, 如果不传参数, 则只返回当前周期值

  • 启动定时器
Timer.start()
  • 停止定时器
Timer.stop()
  • 重新开启定时器
Timer.restart()
  • 注销定时器,并且注销硬件的占用,关闭硬件的时钟
Timer.deinit()

(三)通过定时器让 LED 周期性每秒闪烁 1 次

定时器到了预设指定时间后,也会产生中断,因此跟外部中断的编程方式类似,代码编程流程图如下:

在这里插入图片描述

# 引入模块
from Maix import GPIO
from fpioa_manager import fm
from machine import Timer

#注册IO和构建LED对象
fm.register(12, fm.fpioa.GPIO0) # LED蓝灯
LED_B = GPIO(GPIO.GPIO0, GPIO.OUT)# 输出模式

#计数变量
Counter=0 # 用来让LED亮灭 

#定时器回调函数
def fun(tim):
    global Counter
    Counter = Counter + 1 # 用来让LED亮灭 
    print(Counter)
    LED_B.value(Counter%2)#LED循环亮灭(0,1)

#定时器0初始化,周期1秒
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1000, callback=fun)
#           定时器0         通道0           定时器模式:周期性            1000ms       定时器回调函数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

命运从未公平

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

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

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

打赏作者

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

抵扣说明:

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

余额充值