Timer定时器
本文参考官方API手册-Timer
前言
Timer可以做什么
- 定时调用函数或延迟调用函数
- 产生PWM波
K210中的定时器
K210芯片中一共有三个定时器,而每个定时器又有4个通道,也就是说我们最多可以创建12个独立的定时器对象。每个定时器的三个通道的模式必须是相同的,比如说定时器0设置为了PWM模式,那么它的四条通道都输出PWM,而不能一条通道输出PWM,另外三条作为普通定时器。
一、使用准备
# 导入对应的包
from machine import Timer
二、构造函数及参数说明
1. 初始化方法
tim = Timer(id, channel, mode, period, unit, callback, arg, start, priority, div)
或者
tim = Timer()
tim.init(id, channel, mode, period, unit, callback, arg, start, priority, div)
如果没有指定start参数为False,那么定时器在初始化完毕后会立刻开始工作,不需要手动再开启一次
2. 参数说明
参数 | 名称 | 默认值 | 说明 |
---|---|---|---|
id | 编号 | [必填] 可取Timer.TIMER[0~2] | |
channel | 通道 | [必填] 每个定时器有4个通道,可取Timer.CHANNEL[0~3] | |
mode | 模式 | MODE_ONE_SHOT | [必填] 可取Timer.MODE_ [ONE_SHOT, PERIODIC, PWM] |
period | 周期 | [必填] 单位由unit参数决定 | |
unit | 单位 | Timer.UNIT_MS | 可取Timer.UNIT_ [S, MS, US, NS] |
callback | 回调函数 | None | 定义两个参数,第一个是定时器对象,第二个是自定义的arg,如果是PWM模式的话这里就不需要填东西 |
arg | None | 传给callback函数的第二个参数 | |
start | True | 是否立即开启定时器 | |
priority | 中断优先级 | 1 | 越小优先级越高,可取[1~7] |
div | 硬件分频器 | 0 | 可取[0~255] |
注意:id
和channel
两个参数是位置参数,顺序不能改变
3. 成员函数
函数名 | 参数 | 返回值 | 说明 |
---|---|---|---|
init | 见上表 | 无 | 功能同构造函数,用于初始化定时器 |
callback_arg | 无 | 初始化时的arg参数的值 | |
callback | [回调函数] | [回调函数] | 获取或设置回调函数,如果有参数就是设置,没有就是获取 |
period | [周期] | [周期] | 获取或设置定时器周期,用法同上 |
start | 无 | 无 | 启动定时器。如果初始化时设置start=True,则无需手动调用 |
deinit | 无 | 无 | 销毁当前定时器对象,同时释放资源 |
三、定时器应用实例
定时调用函数
from machine import Timer
count = 1
def on_timer(timer):
global count
print("this is the %d time call this func" % count)
count += 1
tim = Timer(id=Timer.TIMER0, channel=Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=2000, callback=on_timer)
产生PWM波
import time
from machine import Timer, PWM
# 初始化一个PWM模式的定时器
tim = machine.Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
# 设置PWM波的频率为3000000,占空比为50%,并在30号引脚输出
ch0 = machine.PWM(tim, freq=3000000, duty=50, pin=30, enable=True)