文章目录
- 前言
- 一、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,可选参数,优先级高于periodperiod: Timer运行周期,单位ms,可选参数callback: 超时回调函数,必须设置,要带一个参数arg: 超时回调函数参数,可选参数注意: [0-5]硬件Timer暂不可用
初始化
Timer.init(mode=Timer.PERIODIC, freq=-1, period=-1, callback=None, arg=None)
初始化定时器参数【参数】mode: 运行模式,单次或周期,可选参数freq: Timer运行频率,支持浮点,单位Hz,可选参数,优先级高于periodperiod: Timer运行周期,单位ms,可选参数callback: 超时回调函数,必须设置,要带一个参数arg: 超时回调函数参数,可选参数【返回值】无
销毁函数
Timer.deinit()
释放Timer资源【参数】无【返回值】无
示例代码
from machine import Timer
import timedef fun(i):print("Timer callback")#使用软件定时器,编号-1
tim = Timer(-1)
tim.init(mode=Timer.PERIODIC, period=100, callback=fun) #周期为100mswhile 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 timertc = 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 timeadc = 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],默认1timeout: 超时值,单位s,默认5注意: WDT0暂不可用
WDT.feed()
喂狗操作【参数】无【返回值】无
示例代码
from machine import WDT
import timewdt = 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领域的应用例程。