就像几乎所有的嵌入式设备一样,K210也有着对应的定时器设备。K210中拥有三个定时器,分别对应着Timer.TIMER0~Timer.TIMER2。可以实现计时的功能,也可以利用定时器中断按照需求以某一周期或者只执行一次中断内容,采用类似stm32的中断回调形式完成。
本次实验我们通过编写代码实现简单的K210定时中断功能,使板载LED按照1s的周期亮灭(点灯工程师)。
首先,我们需要的是对LED进行初始化,对定时器进行初始化,LED的初始化就是GPIO的初始化,前文介绍过(学习笔记一)定时器的初始化要利用machine库的Timer函数进行。下面简单介绍一下Timer函数
在这里遇到了一个问题,当我把Timer.UNIT的参数调小时(period=1000时),板载的蜂鸣器响了,目前还没有合理的一个解释,等我研究明白了在更新出来。
如上图就是Timer函数的构造形式了,如果不修改unit的参数值得话默认是毫秒的,诸如div这个参数目前还没有测试,分频的话可能会用在输入捕获?(参考stm32)
了解到Timer的构造那我们就可以进行代码的编写了
from maix import GPIO
from fpioa_manager import fm
from machine import Timer
#注册IO和构建LED对象
fm.register(35,fm.fpioa.GPIO0)
LED_B=GPIO(GPIO.GPIO0,GPIO.OUT)
#计数变量
Counter=0
#定义定时器回调函数
def fun(tim):
global Counter
Counter=Counter+1
print(Counter)
LED_B.value(Counter%2)#LED循环亮灭
#初始化定时器0,周期1s
tim=Timer(Timer.TIMER0,Timer.CHANNEL0,mode=Timer.MODE_PERIODIC,period=5,unit=Timer.UNIT_S,callback=fun)
考虑到平时写代码的习惯,可以先将定时回调函数的定义(def)写出来,然后再初始化定时器。上图的代码的现象是板载LED每隔5s进行一次闪烁。Timer中本例程未写出的部分为默认值。
今天的学习笔记就进行到这里吧,嗯,立个flag,今年电赛前一周更四次。