machine.Timer
The hardware timer can be used to trigger tasks or process tasks regularly. After the set time is up, an interrupt can be triggered (call the callback function), and the accuracy is higher than the software timer.
It should be noted that timers may behave differently in different hardware. MicroPython's Timer class defines the basic operation of executing a callback within a given time period (or executing a callback after a delay), and allows more non-standard behaviors to be defined on specific hardware (so it cannot be ported to other boards).
There are 3 timers, each timer has 4 channels available
Constructor
tim = 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)
Create a new Timer object with the specified parameters
Parameters
id
: Timer ID, [0~2] (Timer.TIMER0~TIMER2)channel
: Timer channel, [Timer.CHANNEL0~Timer.CHANNEL3]mode
: Timer mode,MODE_ONE_SHOT
orMODE_PERIODIC
orMODE_PWM
period
: Timer period, after starting the timerperiod
time, the callback function will be called, (0,~)unit
: Set the unit of the period, the default bit is milliseconds (ms
),Timer.UNIT_S
orTimer.UNIT_MS
orTimer.UNIT_US
orTimer.UNIT_NS
callback
: Timer callback function, defines two parameters, one is the timer objectTimer
, the second is the parameterarg
that you want to pass in the definition object, please see the explanation ofarg
parameters for more
Note: The callback function is called in the interrupt, so please don't take too long in the callback function and do dynamic allocation switch interrupt etc.
arg
: The parameter that you want to pass to the callback function as the second parameter of the callback functionstart
: Whether to start the timer immediately after the object is successfully constructed,True
: start immediately,False
: not start immediately, you need to call thestart()
function to start the timerpriority
: hardware timer interrupt priority, related to a specific CPU, in K210, the value range is [1,7], the smaller the value, the higher the prioritydiv
: hardware timer divider, value range [0,255], default is 0, clk_timer (timer clock frequency) = clk_pll0 (phase-locked loop 0 frequency)/2^(div+1)
clk_timer*period(unit:s) should be <2^32 and >=1
Method
init
Similar constructor
tim.init(id, channel, mode=Timer.MODE_ONE_SHOT, period=1000, unit=Timer.UNIT_MS, callback=None, arg=None, start=True, priority=1, div=0)
Parameters
Similar constructor
return value
no
callback_arg
Get the set parameters passed to the callback function, which can only be called by the Timer
object, the class Timer
cannot be called
callback
Get or set callback function
tim.callback(callback)
Parameters
callback
: the set callback function, optional parameters, if no parameters are passed, only the previous callback function will be returned
return value
Current callback function
Examples
def on_timer(timer):
print("time up:",timer)
print("param:",timer.callback_arg())
tim.callback(on_timer)
print(on_timer, tim.callback())
period
Get or set the timing period
tim.period(period)
Parameters
period
: Optional parameter, configure the period, if no parameter is passed, only the current period value will be returned
return value
Current period value
Examples
tim.period(2000)
print( tim.period())
start
Start timer
tim.start()
Parameters
no
return value
no
Examples
tim.start()
stop
Stop timer
tim.stop()
Parameters
no
return value
no
restart
Restart timer
tim.restart()
Parameters
no
return value
no
deinit/__del__
Log off the timer, log off the hardware occupation, turn off the hardware clock
tim.deinit()
Parameters
no
return value
no
Examples
tim.deinit()
or
del tim
Constant
TIMER0
: Timer0 idTIMER1
: Timer1 idTIMER2
: Timer2 idCHANNEL0
: Timer channel 0CHANNEL1
: Timer channel 1CHANNEL2
: Timer channel 2CHANNEL3
: Timer channel 3MODE_ONE_SHOT
: Timer runs only once (callback once)MODE_PERIODIC
: Timer always runs (continuous callback)MODE_PWM
: The timer is not used as a callback function to generate PWMUNIT_S
: unit of second (s)UNIT_MS
: unit milliseconds (ms)UNIT_US
: unit microsecond (us)UNIT_NS
: unit nanosecond (ns)
Routine
Routine 1
Print information after 3 seconds
from machine import Timer
def on_timer(timer):
print("time up:",timer)
print("param:",timer.callback_arg())
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_ONE_SHOT, period=3000, callback=on_timer, arg=on_timer)
print("period:",tim.period())
Routine 2
Print messages every 1 second, stop for 5 seconds and restart again, turn off and log off the timer after 5 seconds
import time
from machine import Timer
def on_timer(timer):
print("time up:",timer)
print("param:",timer.callback_arg())
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1, unit=Timer.UNIT_S, callback=on_timer, arg=on_timer, start=False, priority=1, div=0)
print("period:",tim.period())
tim.start()
time.sleep(5)
tim.stop()
time.sleep(5)
tim.restart()
time.sleep(5)
tim.stop()
del tim