7.我用定时器定时画个圈圈祝福你
# 我用定时器定时画个圈圈祝福你
# 1. 这玩意儿能干嘛?
定时器(Timer)听起来很朴素,但在嵌入式系统中,它可是掌管“时间的守门员”:从精准延时、定时任务,到编码器测速、PWM波控制,它都插一脚。
在K230中,每个定时器都支持 时基模式 和 编码器模式,支持 中断回调函数,用起来很有 STM32 的味道,但比裸写寄存器要友善不少。
# 2. Quick Look:初始化一个定时器
from machine import Timer
# 初始化定时器1,每隔1000ms触发一次回调
def my_callback(timer):
print("时间到了,开始画圈圈")
tim1 = Timer(1, period=1000, mode=Timer.MODE_PERIODIC, callback=my_callback)
1
2
3
4
5
6
7
2
3
4
5
6
7
# 💡关键词解读:
参数 | 含义 |
---|---|
1 | 定时器编号(K230 支持多个定时器) |
period | 周期,单位是毫秒 |
mode | 支持单次(ONE_SHOT)或循环(PERIODIC) |
callback | 定时时间到时调用的函数 |
# 3. 想停就停:停止定时器
tim1.deinit() # 停止定时器
1
# 🧹小贴士:
- 用完记得
.deinit()
,否则它会一直在那里默默打圈圈…… - 如果你的回调函数里有长时间阻塞,可能会影响下一次触发,建议用轻量级任务。
# 4. 想玩花活?定时器还能干这些事:
应用场景 | 示例 |
---|---|
定时打印 | 每秒输出一次信息 |
自动切换状态 | 计时完成后改变LED状态或蜂鸣器响 |
周期性采样 | ADC数据周期采集 |
软件定时器 | 替代 time.sleep() 实现非阻塞延时 |
# 5. 高阶玩法:多个定时器一起转
你可以初始化多个 Timer,比如 Timer(0)、Timer(1)、Timer(2)……各自有自己的频率和回调,互不干扰。
from machine import Timer
def hello(timer):
print("Hello")
def world(timer):
print("World")
Timer(0, 500, Timer.MODE_PERIODIC, hello)
Timer(1, 1000, Timer.MODE_PERIODIC, world)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
输出效果(每0.5秒与1秒交替):
Hello
World
Hello
Hello
World
...
1
2
3
4
5
6
2
3
4
5
6
# 6. 小坑快避开
- 回调函数不要太重,避免阻塞。
- 定时器编号别冲突,否则初始化会失败。
- 定时器不会自动释放资源,要手动
.deinit()
。 - 某些板子的 GPIO 和 Timer 有映射限制,建议查查原理图或官方文档。
# 7. 总结
K230的定时器模块在 MicroPython 下使用体验丝滑、写法简洁,非常适合快速实现各种定时任务。无论你是要写个心跳灯,还是轮询采样,只要定时器到位,项目的节奏就能踩得稳稳当当。
# 8. 参考资料
- K230 Timer 官方文档 (opens new window)
- MicroPython Timer API 文档
# 免责声明
本文档及所有内容(包括文字、图片、代码等)均为作者基于嘉立创庐山派K230开发板公开资料和个人使用经验整理分享,仅供学习和技术交流之用。
所有涉及的品牌名称、商标、图片及相关资源均归嘉立创官方所有,未经授权不得用于商业宣传或其他用途。
作者与嘉立创官方无任何隶属或代理关系,内容不构成任何形式的官方承诺或保证。
用户在使用相关资源时,应遵守相应的开源协议和法律法规,确保合法合规。
如涉及版权问题,请联系作者或嘉立创官方处理。
帮助我们改善此页面 (opens new window)
上次更新: 2025/07/12, 16:01:22