【雕爷学编程】MicroPython手册之达芬奇 TKM32F499 延时和时间

发布于:2023-10-25 ⋅ 阅读:(120) ⋅ 点赞:(0)

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
达芬奇 TKM32F499是一款基于ARM Cortex-M4内核的微控制器,以下是其主要的参考技术参数:
1、内核和性能:
内核: ARM Cortex-M4
最高主频: 240 MHz
性能: 225 DMIPS / 608 CoreMark
2、存储器:
Flash存储器: 1 MB
RAM: 192 KB
存储器接口: 支持外部存储器扩展(例如,SD卡,NOR Flash等)
3、外设接口:
通用IO口(GPIO): 支持多达 101 个GPIO引脚,可用于数字输入/输出、中断等。
串行通信接口: 包括多个UART、SPI、I2C接口,用于与外部设备进行通信。
USB接口: 支持USB 2.0 FS(全速)。
定时器: 包括多个定时器/计数器,可用于定时、脉冲宽度调制(PWM)等应用。
ADC和DAC: 内置多个模数转换器(ADC)和数模转换器(DAC),用于模拟信号的采集和输出。
LCD控制器: 支持液晶显示器(LCD)的控制和驱动。
触摸控制器: 支持电容式触摸屏的控制和输入。
SD卡控制器: 支持SD卡的读写操作。
Ethernet控制器: 支持以太网通信。
4、电源管理:
电源供应: 支持广泛的电源电压范围,包括 3.0V 至 3.6V 的工作电压。
低功耗模式: 支持多种低功耗模式,以最小化功耗。
5、安全性:
安全特性: 支持硬件加密和解密、随机数生成器等安全功能,保护系统的数据和通信安全。
6、开发工具支持:
开发环境: 支持常见的开发环境,如Keil MDK、IAR Embedded Workbench等。
调试接口: 支持标准的SWD(Serial Wire Debug)调试接口。

在这里插入图片描述
MicroPython的达芬奇TKM32F499在延时和时间方面有一些特点,下面将以专业的视角为您详细解释其主要特点、应用场景以及需要注意的事项。

主要特点:

延时功能:达芬奇TKM32F499支持在MicroPython环境下进行延时操作。可以使用time.sleep()函数来实现延时,以控制程序的时间等待。

时间功能:达芬奇TKM32F499提供了时间相关的功能,可以获取当前的时间戳、日期和时间等信息。可以使用time.time()函数获取当前的时间戳,使用time.localtime()函数将时间戳转换为本地时间。

精确度:延时和时间功能的精确度取决于系统时钟和处理器的性能。在一般情况下,达芬奇TKM32F499的时钟精度可以满足大多数应用的需求,但需要注意在高精度时间测量或同步应用中,可能需要额外的校准和优化。

应用场景:

嵌入式系统开发:延时和时间功能在嵌入式系统中广泛应用。例如,在控制系统中,可以使用延时函数实现定时任务、轮询等操作;而获取时间戳和日期时间信息可以用于数据记录、事件标记等。

物联网(IoT)应用:在物联网应用中,延时和时间功能可以用于节点设备的任务调度和数据采集。通过合理的延时控制和时间戳记录,可以实现节点设备的定时工作和数据同步。

数据日志记录:延时和时间功能在数据日志记录应用中非常有用。通过合理的延时控制和时间戳记录,可以实现数据采集和记录的时间同步,方便后续的数据分析和处理。

需要注意的事项:

系统时钟设置:在使用延时和时间功能之前,需要确保系统时钟已经正确设置。系统时钟的准确性对于时间相关功能的正确运行至关重要。

延时误差:在进行延时操作时,由于系统的处理器性能和任务调度等因素的影响,可能存在一定的延时误差。在对延时要求较高的应用中,可以通过校准和优化来提高延时的精确度。

时间同步:如果需要多个设备之间的时间同步,可以使用网络时间协议(NTP)等方式获取网络上的时间信息,并进行校准和同步。

综上所述,MicroPython的达芬奇TKM32F499提供了延时和时间功能,适用于嵌入式系统开发、物联网应用和数据日志记录等场景。在使用时需要注意系统时钟的设置、延时误差的影响以及时间同步的需求。

案例一:使用MicroPython控制达芬奇 TKM32F499的LED灯闪烁

from machine import Pin
import time

# 初始化LED引脚
led = Pin(13, Pin.OUT)

while True:
    # 点亮LED灯
    led.value(1)
    time.sleep(1)

    # 熄灭LED灯
    led.value(0)
    time.sleep(1)

要点解读:
导入所需的库和模块。
初始化LED引脚,这里使用的是TKM32F499的GPIO13引脚。
使用一个无限循环来控制LED灯的亮灭。
在循环中,首先将LED引脚的值设置为1(点亮LED灯),然后延时1秒。
接着将LED引脚的值设置为0(熄灭LED灯),然后延时1秒。
循环继续进行,实现LED灯的持续闪烁。

案例二:使用MicroPython读取达芬奇 TKM32F499的温度传感器数据

from machine import Pin, I2C
import time
import dht

# 初始化I2C接口和温度传感器
i2c = I2C(scl=Pin(2), sda=Pin(3))
dht_sensor = dht.DHT11(Pin(4))

while True:
    # 读取温度传感器数据
    humidity, temperature = dht_sensor.read()

    # 如果读取成功,打印温度和湿度值
    if humidity is not None and temperature is not None:
        print("温度:{:.1f}℃,湿度:{:.1f}%".format(temperature, humidity))
    else:
        print("无法读取温度传感器数据")

    # 延时1秒后继续循环
    time.sleep(1)

要点解读:
导入所需的库和模块。
初始化I2C接口和温度传感器,这里使用的是TKM32F499的I2C接口和DHT11温度传感器。
使用一个无限循环来读取温度传感器的数据。
在循环中,首先调用dht_sensor.read()方法读取温度和湿度值。
如果读取成功,打印温度和湿度值;否则,打印无法读取温度传感器数据的提示信息。
循环继续进行,实现温度传感器数据的实时读取和显示。
延时1秒后继续循环,避免频繁读取导致CPU占用过高。

案例三:使用MicroPython控制达芬奇 TKM32F499的LCD显示屏显示当前时间

from machine import Pin, I2C
import time
import ssd1306

# 初始化I2C接口和OLED显示屏
i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# 清空屏幕并显示
oled.fill(0)
oled.show()

while True:
    # 获取当前时间
    current_time = time.localtime()

    # 格式化时间字符串
    time_str = time.strftime("%Y-%m-%d %H:%M:%S", current_time)

    # 在屏幕上显示时间
    oled.text("当前时间:", 0, 0)
    oled.text(time_str, 0, 10)
    oled.show()

    # 延时1秒后继续循环
    time.sleep(1)

要点解读:
导入所需的库和模块。
初始化I2C接口和OLED显示屏,这里使用的是TKM32F499的I2C接口和SSD1306 OLED显示屏。
清空屏幕并显示。
使用一个无限循环来控制LCD显示屏的显示内容。
在循环中,首先获取当前时间,然后格式化为字符串。
将格式化后的时间字符串显示在屏幕上,包括标题和实际时间值。
循环继续进行,实现LCD显示屏的实时时间显示。
延时1秒后继续循环,避免频繁更新导致CPU占用过高。

案例四:延时程序
这个程序使用了MicroPython的utime模块来进行延时。

import utime  
  
# 延时1秒  
utime.sleep(1)

要点解读:这段代码导入了utime模块,并使用其sleep函数来实现延时。这个函数的参数是秒数,所以上述代码将程序暂停1秒。

案例五:获取当前时间程序
这个程序使用了MicroPython的utime模块来获取当前时间。

import utime  
  
# 获取当前时间并打印  
current_time = utime.localtime()  
print(current_time)

要点解读:这段代码导入了utime模块,并使用其localtime函数来获取当前的本地时间。这个函数返回一个表示当前时间的元组,因此上述代码将当前时间打印出来。

案例六:定时任务程序
这个程序使用了MicroPython的machine模块和utime模块来实现定时任务。

import machine  
import utime  
  
# 设置定时器,每隔1秒触发一次中断  
timer = machine.Timer(-1)  
timer.init(period=-1, mode=machine.Timer.PERIODIC, callback=lambda t: utime.sleep(1))

要点解读:这段代码首先导入了machine模块和utime模块,并定义了一个定时器对象。然后,它初始化这个定时器,使其每隔1秒触发一次中断。在中断回调函数中,它使用utime.sleep(1)使程序暂停1秒,以此来实现定时任务。注意,定时器的编号是-1,表示使用硬件定时器。

案例七:延时

import utime

# 延时1秒
utime.sleep(1)

# 延时500毫秒
utime.sleep_ms(500)

# 延时10微秒
utime.sleep_us(10)

要点解读:
使用utime.sleep函数可以在指定的秒数内进行延时。
使用utime.sleep_ms函数可以在指定的毫秒数内进行延时。
使用utime.sleep_us函数可以在指定的微秒数内进行延时。

案例八:获取当前时间戳

import utime

# 获取当前时间戳(秒)
timestamp = utime.time()
print(timestamp)

# 获取当前时间戳(毫秒)
timestamp_ms = utime.ticks_ms()
print(timestamp_ms)

# 获取当前时间戳(微秒)
timestamp_us = utime.ticks_us()
print(timestamp_us)

要点解读:
使用utime.time函数可以获取当前的时间戳,返回的时间戳单位是秒。
使用utime.ticks_ms函数可以获取当前的时间戳,返回的时间戳单位是毫秒。
使用utime.ticks_us函数可以获取当前的时间戳,返回的时间戳单位是微秒。

案例九:计算代码执行时间

import utime

# 记录开始时间
start_time = utime.ticks_us()

# 执行一些代码
utime.sleep_ms(1000)

# 记录结束时间
end_time = utime.ticks_us()

# 计算代码执行时间(毫秒)
execution_time = utime.ticks_diff(end_time, start_time) / 1000
print("Execution time: {} ms".format(execution_time))

要点解读:
使用utime.ticks_us函数记录代码执行的开始时间和结束时间,返回的时间戳单位是微秒。
使用utime.ticks_diff函数计算开始时间和结束时间之间的时间差。
将时间差除以1000,转换为毫秒单位,得到代码的执行时间。
打印代码的执行时间。以上代码案例可以帮助您在达芬奇TKM32F499上使用MicroPython进行延时操作和时间戳获取,以及计算代码执行时间。根据实际需求,您可以根据这些示例代码进行修改和扩展。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。需要正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。对于涉及到硬件操作的代码,请确保在使用之前充分了解和确认所使用的引脚和电平等参数的正确性和安全性。

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到