Micropy 官方教程 09 定时器

来源:本站
导读:目前正在解读《Micropy 官方教程 09 定时器》的相关信息,《Micropy 官方教程 09 定时器》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Micropy 官方教程 09 定时器》的详细说明。
简介:本文是关于Micropy 官方教程 09 定时器。

9.定时器

pyboard 板拥有 14 个可以运行用户自行定义频率的独立计时值的定时器。可用于特定时间间隔运行不同的函数。14 个定时器编号从 1 到 14,当在其中 3 号定时器保留内部使用,5 号 6 号定时器分别用于伺服系统和 ADC/DAC 控制,故尽可能避免使用这三个定时器。

我们可以创建一个定时器对象:

>>> tim = pyb.Timer(4)

现在看看创建的对象里边是什么:

>>> timTimer(4)

程序里边 tim 对象与定时器4连接,但还没被初始化。现在初始化为 10 Hz 触发(每秒钟十次)。

>>> tim.init(freq=10)

随着初始化完成,定时器相关内容可见:

>>> timTimer(4, prescaler=624, period=13439, mode=UP, p=1)

上述信息表明该定时器的运行时钟来源于外部时钟的 624+1 分频,且其计数值从0 到 13439,当其到达时将触发中断,而后计数值将由 0 重新开始。这些设置的数值使得定时器频率为 10Hz,定时器的源频率为 84MHz,(可在运行 tim.source_freq( )函数发现),计算公式为:84MHz/625/13440 =10Hz。

9.1 定时器计数值

该如何操作我们的定时器?最基础的方式乃是获得定时器的当前值:

>>> tim.counter()21504

该数值将持续改变,持续增加。

9.2 定时器回调

接下来我们可以构造一个定时器被触发时便会执行的回调函数(可以参照前边按键教程里的回调函数内容):

>>> tim.callback(lambda t:pyb.LED(1).toggle( ))

上述语句将开启LED 灯的持续闪烁,且其频率为 5MHz(一次闪烁包含两个翻转,所以10Hz的翻转频率得到5Hz的闪烁现象)。通过重新初始化定时器可以改变频率值:

>>> tim.init(freq=20)

传递参数 None 可以关闭回调函数:

>>> tim.callback(None)

若以函数作为回调函数的参数,这要求其必须有一个自变数,使得定时器对象能被触发。这将允许你在回调函数里边控制定时器。

我们可以创建两个定时器并分别运行之:

>>> tim4 = pyb.Timer(4, freq=10)>>> tim7 = pyb.Timer(7, freq=20)>>> tim4.callback(lambda t: pyb.LED(1).toggle())>>> tim7.callback(lambda t: pyb.LED(2).toggle())

因为这种回调属于硬件中断自身的内容,所以即使定时器在工作我们依然能够继续使用 pyboard 板做其他事情。

9.3 微秒级别的定时器

可以将定时器作为微秒计数器来使用,这在执行需要非常精确定时的任务里边非常有用。因此我们使用定时器2,因为定时器2 拥有32 位的计数量(定时器5 也同样适用,不过一旦使用定时器5 则无法使用伺服驱动)。

如下代码设置定时器2:

>>> micros = pyb.Timer(2, prescaler=83, period=0x3fffffff)

预订值设置为83,这将使得该定时器频率为 1MHz。这是由于 运行频率达到168MHz的CPU 时钟被二分频,再被预订值 +1分频,所以定时器2 的频率为:168 MHz/2/(83+1)=1MHz。周期值设置较大以便于定时器可以在计数值加到一定程度便回归到0 。上述例子里计数值大约在17 分钟后回归到 0 。

使用该定时器,首先最好重置为0 。

>>> micros.counter(0)

然后按照你的设置开始计时:

>>> start_micros = micros.counter()... do some stuff ...>>> end_micros = micros.counter()

提醒:《Micropy 官方教程 09 定时器》最后刷新时间 2024-03-14 00:54:59,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Micropy 官方教程 09 定时器》该内容的真实性请自行鉴别。