当前位置: 首页 > article >正文

从零玩转CanMV-K230(9)-Timer、RTC、ADC、WDT、File

文章目录

  • 前言
  • 一、Timer
    • 构造函数
    • 初始化
    • 销毁函数
    • 示例代码
  • 二、RTC
    • 构造函数
    • init
    • datetime
    • 示例代码
  • 三、ADC
    • API
    • 示例代码
  • 四、WDT
    • API
    • 示例代码
  • 五、File
    • 示例代码
  • 总结


前言

本章介绍K230常用外设的使用方法,相关内容的详细介绍可以参考K210的教程,这里主要展示K230的使用代码


一、Timer

定时器(Timer)的作用在于生成精确的计时,当达到预设的时间点时,提醒我们进行特定的操作。
Timer类位于machine模块下,因此在使用该类时,需要从machine模块中进行引用。

构造函数

timer = Timer(index, mode=Timer.PERIODIC, freq=-1, period=-1, callback=None, arg=None)

【参数】

index: Timer号,取值:[-1,5],-1代表软件定时器

mode: 运行模式,单次或周期,可选参数

freq: Timer运行频率,支持浮点,单位Hz,可选参数,优先级高于period

period: Timer运行周期,单位ms,可选参数

callback: 超时回调函数,必须设置,要带一个参数

arg: 超时回调函数参数,可选参数

注意: [0-5]硬件Timer暂不可用

初始化

Timer.init(mode=Timer.PERIODIC, freq=-1, period=-1, callback=None, arg=None)

初始化定时器参数

【参数】

mode: 运行模式,单次或周期,可选参数

freq: Timer运行频率,支持浮点,单位Hz,可选参数,优先级高于period

period: Timer运行周期,单位ms,可选参数

callback: 超时回调函数,必须设置,要带一个参数

arg: 超时回调函数参数,可选参数

【返回值】

无

销毁函数

Timer.deinit()

释放Timer资源

【参数】

无

【返回值】

无

示例代码

from machine import Timer
import time

def fun(i):
   print("Timer callback")

#使用软件定时器,编号-1
tim = Timer(-1)
tim.init(mode=Timer.PERIODIC, period=100, callback=fun) #周期为100ms

while True:

    time.sleep(0.01) #避免CPU满跑

二、RTC

RTC全称是Real Time Clock,可以用来进行精准的时间计时,我们现在常用的万年历或数字时钟常常就是使用类似的芯片DS1302等等实现计时的功能。K230内置一个RTC,但是这块板子上没有额外的电池,所以要想让RTC一直工作的话,需要板子一直进行上电。

RTC类位于machine模块下,因此我们在使用这个类的时候要从machine模块中进行引用。

RTC的主要功能就是获取实时的时间,当然也可以使用函数进行重新设定时间。

构造函数

rtc = RTC()

【参数】

无

init

rtc.init(year,mon,day,hour,min,sec,microsec)

【参数】

year: 年

mon: 月

day: 日

hour: 时

min: 分

sec: 秒

microsec: 微秒

【返回值】

无

datetime

print(rtc.datetime())

【参数】

无

【返回值】

year: 年

mon: 月

day: 日

hour: 时

min: 分

sec: 秒

microsec: 微秒

示例代码

代码如下(示例):

from machine import RTC
import time

rtc = RTC()

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

while True:

    print(rtc.datetime())

    time.sleep(1)

三、ADC

物理世界中的大部分的信号都是模拟量,但是随着单片机的发展,越来越多需要数字信号的处理,因此将模拟信号转换成为数字信号就显得尤为重要。

K230内置了一个ADC,其具有6个通道(该开发板引出了四个ADC通道,分别是0-4,其中0和1的量程为0-3.6V,2和3的量程为0-1.8V),采样分辨率为12bit,采样的速率可以达到1MHz。

ADC类位于machine模块下,因此我们在使用这个类的时候要从machine模块中进行引用。

API

adc = ADC(channel)

【参数】

channel: ADC通道号,取值:[0,5]

ADC.read_u16()

获取通道采样值

【参数】

无

【返回值】

返回当前ADC通道采样值,[0-4095]

ADC.read_uv()

获取通道电压值

【参数】

无

【返回值】

返回当前ADC通道电压值,[0-1800000]

示例代码

from machine import ADC
import time

adc = ADC(0)

while True:

    print(adc.read_u16())
    print('%.2f'%(adc.read_uv()/1000000*2), "V")

    time.sleep(1)

四、WDT

看门狗是单片机用来防止软件程序跑飞,从而出现问题的一种内部机制。其本质可以看作是一个定时器,当开启看门狗后,定时器开始运行,在定时器到达设定的重启时间之前要进行喂狗(即重置一下定时器),若超过设定的时间没有进行喂狗,就会通过软件复位的方式,将程序进行复位,从而避免了程序跑飞出现的问题。
K230内部包含两个WDT硬件模块,用于在应用程序崩溃且最终进入不可恢复状态时重启系统。一旦开始,当硬件运行期间没有定期进行喂狗(feed)就会在超时后自动复位。

API

wdt = WDT(id=1, timeout=5)

【参数】

id: WDT号,取值:[0,1],默认1

timeout: 超时值,单位s,默认5

注意: WDT0暂不可用

WDT.feed()

喂狗操作

【参数】

无

【返回值】

无

示例代码

from machine import WDT
import time

wdt = WDT(1,3)

for i in range(3):

    time.sleep(1)
    print(i)

    wdt.feed()

while True:

    time.sleep(0.01)

五、File

在其他的单片机中我们要是想断电后保存一些数据的话,通常会使用EEPROM或者Flash进行数据的存储。在K230中自带一个文件系统,因此我们直接使用K230的文件系统就可以实现数据的存储和获取。

K230进行文件操作的方式和Python的文件操作方式是一样的。K230的文件路径为/sdcard,所创建的文件,直接存储在这个路径下即可。

示例代码

f = open('/sdcard/1.txt', 'w')
f.write('EEWORLD')
f.close()

f = open('/sdcard/1.txt', 'r')
text = f.read()
print(text)
f.close()

总结

本章提供了Timer、RTC、ADC、WDT、File的基本用法,供参考,后面我们开始K230在AI领域的应用例程。


http://www.kler.cn/a/501512.html

相关文章:

  • 介绍下不同语言的异常处理机制
  • Apache Hadoop YARN框架概述
  • 大模型LLM-Prompt-CRISPE
  • 文章题目:利用Adobe Flash Player漏洞:一次针对Windows XP的渗透测试实验
  • leetcode:1784. 检查二进制字符串字段(python3解法)
  • 贪心算法(五)
  • Node.js - 模块化与包管理工具
  • 苹果手机(IOS系统)出现安全延迟进行中如何关闭?
  • C#调用OpenCvSharp实现图像的膨胀和腐蚀
  • JavaScript动态渲染页面爬取之Splash
  • web前端第五次作业---制作菜单
  • 基于 SSH 的任务调度系统
  • 高可用技术:构筑数字世界的稳固根基
  • 26_Redis RDB持久化
  • Excel如何制作轮班表
  • Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地
  • 代码的形状:重构的方向
  • Java中Map常用遍历方式以及性能对比
  • node.js中实现token的生成与验证
  • Qt6快速安装方法