作者:孟伟
一、MCU 核心库功能概述
本教程演示如何使用 LuatOS 的 mcu 核心库进行芯片级功能测试,包括时钟频率获取、唯一 ID 读取、高精度计时、IO 复用配置等核心功能。
1.1 MCU 核心库有什么用?
mcu 核心库提供对芯片底层功能的访问能力,主要功能包括:
- 时钟信息获取:读取当前主频和计时器信息
- 芯片标识:获取设备唯一 ID
- 高精度计时:微秒级精度的时间测量
二、演示功能概述
本教程将使用 Air8101 核心板演示 mcu 核心库的核心功能,主要包括:
(1)时钟频率与计时器测试
(2)芯片唯一 ID 读取
(3)高精度时间差计算
三、准备硬件环境
在介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。
Air8101核心板参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。
四、软件环境
在开始实践本示例之前,先筹备一下软件环境:
- 烧录工具: Luatools 工具;
- 内核固件:Air8101 V1006 版本固件
3.LuatOS 需要的脚本和资源文件
脚本和资源文件:脚本和资源文件
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
五、API 接口说明
详细 API 文档请参考:https://docs.openluat.com/osapi/core/mcu/
六、代码示例介绍
6.1 功能测试核心代码
function mcu_test()
-- 测试MCU 死机时的处理模式
-- 死机后重启,一般用于正式产品_
mcu.hardfault(1)
-- 测试唯一ID
local unique_id = mcu.unique_id()
if #unique_id > 0 then
log.info("mcu", "Unique ID(hex):", unique_id:toHex())
else
log.warn("mcu", "Unique ID not supported")
end
-- 测试ticks相关函数
-- 获取启动后的 tick 数
log.info("mcu", "ticks:", mcu.ticks())
-- 获取每秒的 tick 数量
log.info("mcu", "获取每秒的tick数量:", mcu.hz())
-- 测试64位tick
local tick_str, tick_per = mcu.tick64()
log.info("mcu", "tick64:", tick_str:toHex(), "ticks per us:", tick_per)
-- 测试mcu.dtick64接口获取ticks差值计算
local tick1 = mcu.tick64()
sys.wait(100)
local tick2 = mcu.tick64()
local result, diff_tick = mcu.dtick64(tick1, tick2)
log.info("mcu", "dtick64 result:", result, "diff:", diff_tick)
-- 测试ticks2函数
local us_h, us_l = mcu.ticks2(0)
local ms_h, ms_l = mcu.ticks2(1)
local sec_h, sec_l = mcu.ticks2(2)
log.info("mcu", "us:", us_h, us_l)
log.info("mcu", "ms:", ms_h, ms_l)
log.info("mcu", "sec:", sec_h, sec_l)
-- 测试 转换 10 进制数为 16 进制字符串输出
local value = mcu.x32(0x2009FFFC) --输出"0x2009fffc"
log.info("mcu", "string", value)
end
sys.taskInit(mcu_test)
6.2 功能验证
通过 luatools 工具查看相关日志:

七、总结
至此,本示例详细介绍了如何使用 mcu 核心库进行功能测试开发。mcu 核心库提供了对硬件底层的直接访问能力,是开发高级功能和系统调试的重要工具。