MCU通用功能模块解析与应用实践

微控制器(MCU)作为嵌入式系统的核心,其通用功能模块构成了各类智能设备的控制基础。从GPIO的灵活配置到定时器的精准计时,再到串行通信接口的数据交互,这些功能模块协同工作,实现了对硬件的高效控制。本文将系统解析MCU的通用功能模块,结合实际应用场景,探讨其工作原理与配置方法,为嵌入式开发提供全面的技术参考。

一、概述

mcu 模块是 LuatOS 中封装 MCU 一些特殊操作的核心模块,提供了对 MCU 底层功能的访问和控制能力。

其中 mcu.ticks()、mcu.tick64() 和 mcu.ticks2() 的区别如下:
image

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
image

三、常量详解

核心库常量,顾名思义是由 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;

如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;

3.1 mcu.UART

image

3.2 mcu.I2C

image

3.3 mcu.SPI

image

3.4 mcu.PWM

image

3.5 mcu.CAN

image

3.6 mcu.GPIO

image

3.7 mcu.I2S

image

3.8 mcu.LCD

image

3.9 mcu.CAM

image

3.10 mcu.CAMERA

image

3.11 mcu.ONEWIRE

image

3.12 mcu.SDIO

image

3.13 mcu.KEYBORAD

image

3.14 mcu.ETH

image

四、函数详解

mcu.unique_id()
功能

获取设备唯一 ID,基于模块硬件ID生成的唯一标识符。

注意事项

可能包含不可见字符,如需查看建议使用 string.toHex()函数转换后打印。

参数

无。

返回值

local unique_id = mcu.unique_id()

unique_id
image

示例
image

mcu.ticks()
功能

获取启动后的 tick 数。

主要应用于超时检测、状态机计时、按键消抖等场景

计算一个操作的对应毫秒时长可参考下面代码:
image

注意事项

本身是无符号值,范围 0~0xffffffff;

Lua 是有符号计算,计算时超过 0x7fffffff 会变负数;

如需在可预见时间内不会溢出的值, 可用 mcu.ticks2()。

mcu.ticks():32 位计数器,约 49.7 天 溢出一次

mcu.ticks2():64 位计数器,可预见时间内不会溢出。

参数

无。

返回值

local tick = mcu.ticks()

tick
image

示例
image

mcu.hz()
功能

获取每秒的 tick 数量。

通常为 1000(每秒 1000 个 tick);但是也有例外,需要根据这个函数的返回值准确获取。

参数

无。

返回值

local hz = mcu.hz()

hz
image

示例
image

mcu.x32(value)
功能

转换 10 进制数为 16 进制字符串输出。

参数

value
image

返回值

local hex_str = mcu.x32()

hex_str
image

示例
image

mcu.tick64(is_bit64)
功能

获取启动后的高精度 tick。

接口主要用于需要高精度时间测量和长时间运行计时的场景。

计算一个操作的对应毫秒时长可参考下面代码:
image

注意事项

如果支持 bit64 库,可以直接输出转换好的 bit64 结构。

参数

is_bit64
image

返回值

local tick_str, tick_per = mcu.tick64(is_bit64)

tick_str
image

tick_per
image

示例
image

mcu.dtick64(tick1, tick2, check_value)

功能

计算 2 个 64bit tick 的差值。

注意事项

差值如果超过了 0x7fffffff,结果可能是错误的。因为如果是 32 位固件的话,最大有符号正整数是 0x7fffffff,所以如果差值超过这个数就会不准确

参数

tick1
image

tick2
image

check_value
image

返回值

local result, diff_tick = mcu.dtick64(tick1, tick2, check_value)

result
image

diff_tick
image

示例
image

mcu.hardfault(mode)
功能

配置 MCU 死机时的处理模式。

注意事项

此接口使用的时候注意放在代码的最前面,开机就配置。配置的值重启后还会生效。

如果不调用此接口默认是死机后重启,如果调用此接口没有配置mode参数,默认是0死机后停机

死机是指底层死机,脚本语法出现报错不属于死机;死机一般是因为代码中有死循环或者内存不足或看门狗死机或堆栈溢出等情况。

参数

mode
image

返回值

无。

示例
image

mcu.iomux(type, channel, value)

功能

在外设打开前,将外设 IO 复用到非默认配置上。

保留此接口为了兼容老固件,新产品开发需要复用功能请查看 pins 库中的 setup 接口。

注意事项

目前只支持 Air780E 的部分外设复用到其他配置。

这是一个临时接口,新产品开发需要复用功能请查看 pins 库中的 setup 接口。

参数

type
image

channel
image

value
image

返回值

无。

示例

image

mcu.altfun(type, sn, pad_index, alt_fun, is_input)

功能

IO 外设功能复用选择。

保留此接口为了兼容老固件,新产品开发需要复用功能请查看 pins 库中的 setup 接口。

注意事项

普通 MCU 通常是以 GPIO 号为唯一 ID 号,但是专用 SOC,比如 CAT1 的,可能以 PAD 号或者模块 pin 脚号为唯一 ID 号。

本函数不是所有平台适用。

参数

type
image

sn
image

pad_index
image

alt_fun
image

is_input
image

返回值

无。

**示例 **

以Air780E为例,查看GPIO复用表
image
image

mcu.ticks2(mode)
功能

获取高精度的计数。

注意事项

与 mcu.ticks()的区别是,底层计数器是 64bit 的,在可预计的将来不会溢出。

所以本函数返回的值总是递增的,而且 32bit 固件也能处理。

参数

mode
image

返回值

local us_h, us_l = mcu.ticks2(mode)

high
image

low
image

**示例 **

image

五、模组支持说明

支持 LuatOS 开发的所有模组都支持 mcu 核心库。

今天的内容就分享到这里了~

posted @ 2026-02-27 12:51  合宙LuatOS  阅读(2)  评论(0)    收藏  举报