openmv_timer学习(1)
1.
我们可以看到一共有两个定时器资源 TM1
, TM4
其他是没引出来的
2.对象
class timer(id)ID为1~14
timer=Timer(4)
3.方法
1)timer.init(fre,pre,period)
freq
— 指定定时器的周期性频率。您可以将此视为定时器经过一个完整周期的频率。
prescaler
[0-0xffff] – 指定要加载到定时器的PSC中的值。定时器时钟源除以(prescaler + 1
)以得出定时器时钟。
period
[0-0xffff] 用于定时器1、3、4、6-15。[0-0x3fffffff]用于定时器2和5。
指定要加载到定时器的ARR中的值。该值决定定时器的周期(即当计数器循环时)。定时器将在 period + 1
定时器时钟循环后滚动。
2)Timer.callback(fun)
设置定时器触发时所调用的函数。
# func会自动接收timer这个对象
def func(timer):
print(timer.counter())
timer = Timer(4)
timer.init(freq=10)
# 定义回调函数
timer.callback(func)
def func():
...
timer = Timer(4)
timer.init(freq=10)
# 定义回调函数
timer.callback(lambda t: func())
3)Timer.channel(channel, mode, ...)
每一通道都可配置来进行脉宽调制、输出比较和输入捕捉。所有通道公用同一基本定时器,即共用同一定时器时钟。
mode
可为下列之一:
Timer.PWM
— 配置PWM模式下的定时器(高电平有效)。Timer.PWM_INVERTED
— 配置PWM模式下的定时器(低电平有效)。Timer.OC_TIMING
— 表示未驱动引脚。Timer.OC_ACTIVE
— 当比较匹配出现时,引脚就被激活(活性取决于极性)。Timer.OC_INACTIVE
— 当比较匹配出现时,引脚失效。Timer.OC_TOGGLE
— 当比较匹配出现时,将切换引脚。Timer.OC_FORCED_ACTIVE
— 强制激活引脚(忽略比较匹配)。Timer.OC_FORCED_INACTIVE
— 强制使引脚失效(忽略比较匹配)。Timer.IC
— 配置输入捕捉模式下的定时器。Timer.ENC_A
— 配置编码器模式下的定时器。定时器只在CH1改变时改变。Timer.ENC_B
— 配置编码器模式下的定时器。定时器只在CH2改变时改变。Timer.ENC_AB
— 配置编码器模式下的定时器。定时器只在CH1和CH2改变时改变。pin
无(默认值)或一个引脚对象。若指定(非默认值),将导致为此定时器通道配置指定引脚的替代函数。若该引脚不支持任何该定时器通道的替代函数,则将引发错误。
Timer.PWM模式的键值参数:
pulse_width
- 决定使用的初始脉宽值。pulse_width_percent
- 决定使用的初始脉宽值百分比
import time
from pyb import Pin, Timer
# Frequency in Hz
# 设定定时器 频率为 1000 HZ
tim = Timer(4, freq=1000)
# Generate a 1KHz square wave on TIM4 with 50% and 75% duty cycles on channels 1 and 2, respectively.
# 利用TIM4生成的1K HZ的方波, 生成Channel1(50%占空比) Channel2(75%占空比)
ch1 = tim.channel(1, Timer.PWM, pin=Pin("P7"), pulse_width_percent=50)
ch2 = tim.channel(2, Timer.PWM, pin=Pin("P8"), pulse_width_percent=75)
while (True):
# 空循环, 什么也不干
time.sleep(1000)