庐山派K230软件开发第四篇——定时器(Timer)

  • 概述

K230开发板内建了五个定时器,支持单次模式周期模式,最小定时周期为1微秒。这些定时器可用于精确的时间控制和事件调度,在许多应用场景中都具有重要作用。

定时器特性
  • 数量:共有五个定时器可供使用。

  • 最小周期:每个定时器的最小计时周期为1微秒,适用于高精度时间控制。

  • 模式:支持单次模式和周期模式,满足不同类型的定时任务需求。

 

Timer实验

测试方法

为了验证定时器的功能,我们将执行以下测试步骤:

  1. 初始化定时器:

    1. 配置定时器为单次模式或周期模式。

    2. 设置不同的定时周期,从最小时钟周期开始逐步增大。

  2. 计时准确性:

    1. 记录定时器的实际触发时间和期望时间之间的差异。

    2. 分析定时器在不同负载下的计时误差。

  3. 多定时器同步:

    1. 启动多个定时器,检查它们之间是否能够正确同步。

  4. 功耗测试:

    3.构建RTC对象导入模块工作原理
    1. 测量定时器在不同模式下的功耗。

      from machine import Timer
      import time
      
      # 定义一个自定义回调函数
      def test_callback(timer):
          print("定时器回调函数")
      
      # 实例化一个软定时器
      tim = Timer(-1)
      
      # 初始化定时器为单次模式,周期100ms
      tim.init(period=100, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
      time.sleep(0.2)
      
      # 初始化定时器, 频率为1Hz, 周期模式 , 使用自定义回调函数
      tim.init(freq=1, mode=Timer.PERIODIC, callback=test_callback)
      time.sleep(20)
      
      # 清除定时器
      tim.deinit()

    2. 测试结果

      在执行上述测试步骤后,我们观察到如下结果:

    3. 计时准确性:定时器的计时误差较小,满足大部分应用需求。

    4. 多定时器同步:多个定时器能够正确同步,不会相互影响。

    5. 功耗:定时器的功耗较低,对整体能耗的影响不大。

      RTC(实时时钟)

      单片机中的RTC(Real-Time Clock,实时时钟)是一个独立的子系统,它可以用来维持时间的跟踪,即使是在主CPU关闭的情况下也能够继续工作。这是因为RTC通常由单独的电源供电,通常是电池,以保证即使在设备完全断电后也能继续运行。

      功能特点

    • 时间保持:RTC可以维持当前的时间,包括秒、分、小时、日期、月份和年份。

    • 低功耗:由于RTC通常在设备休眠期间依然运行,所以它的设计目标之一就是低功耗。

    • 闹钟功能:很多RTC模块支持设置闹钟,当到达预定时间时可以产生中断唤醒主CPU。

    • 日历功能:RTC通常能够支持不同的日历格式,如24小时制或12小时制。

    • 计数器/定时器:除了时间之外,RTC还可以用作通用的计数器或定时器。

            工作原理

        RTC的工作原理是基于振荡器的计数。大多数情况下,RTC会使用一个低频振荡器(通常在32.768 kHz左右),这个振荡器非常稳定,可以提供精确的时间基准。RTC模块会不断地对这个振荡器进行计数,并根据计数值更新时间和日期。

            代码解析

1.导入模块

  • from machine import RTC
    import time

    导入了machine.RTC类,用于操作实时时钟,以及time模块,用于提供延时功能。

2.构建RTC对象 

rtc = RTC()

创建了一个RTC对象,用于访问和控制实时时钟。

3.初始化RTC时间

if rtc.datetime()[0] != 2024:
    rtc.datetime((2024, 1, 1, 0, 0, 0, 0, 0))

这段代码检查RTC当前的年份是否为2024年,如果不是,则设置RTC的时间为2024年1月1日0时0分0秒。这里使用了(2024, 1, 1, 0, 0, 0, 0, 0)元组来表示日期和时间,其中:

  • 第一个元素表示年份;

  • 第二个元素表示月份;

  • 第三个元素表示日期;

  • 第四个元素表示星期几(0表示星期一,1表示星期二,依此类推,6表示星期日);

  • 第五个元素表示小时;

  • 第六个元素表示分钟;

  • 第七个元素表示秒;

  • 第八个元素表示微妙。

 4.主循环

while True:
    print(rtc.datetime())  # 打印时间
    time.sleep(1)  # 延时1秒

进入一个无限循环,在每次循环中打印当前的RTC时间,并延时1秒,以便观察时间的变化。

注意事项

  1. 时间准确性:RTC时间的准确性取决于设备本身的硬件设计及其内部时钟的精度。对于要求极高时间准确性的应用,可以考虑使用外部时钟源进行校准。

  2. 异常处理:增加了异常处理逻辑,确保在用户中断或其他异常情况下能够优雅地退出程序。

代码总览 

# 初始化RTC时钟
from machine import RTC
import time

# 构建RTC对象
rtc = RTC()

# 首次上电设置RTC日期和时间。(2024, 1, 1, 0, 0, 0, 0, 0)按顺序分别表示(年,月,日,星期,时,分,秒,微妙),
# 其中星期使用0-6表示星期一到星期日。
if rtc.datetime()[0] != 2024:
    rtc.datetime((2024, 1, 1, 0, 0, 0, 0, 0))

while True:

    print(rtc.datetime()) #打印时间

    time.sleep(1) #延时1秒

 下一期我们将进行PWM的学习,大家喜欢的可以关注一下点个赞,这是up更新的动力,谢谢各位看官!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给力的魔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值