STM32-USMART

一、为什么需要 USMART

嵌入式开发中,很多函数需要在不同参数下反复验证,例如:

  • 修改 PWM 占空比。

  • 读取传感器数据。

  • 设置阈值参数。

  • 执行 Flash 擦写或读取。

  • 查询外设状态。

  • 调整控制算法参数。

如果每次修改参数都通过代码重新编译、烧录和查看结果,调试成本会很高。

USMART 将串口交互和函数调用结合起来,使开发者可以在串口工具中直接输入函数名和参数,快速调用目标函数。它的定位可以理解为一个轻量级的嵌入式命令行调试组件。

二、USMART 的特点

USMART 的主要特点如下:

特点说明
占用资源少最小约占用 4 KB Flash 和 72 B SRAM
调用普通函数可管理绝大多数用户直接编写的函数
参数类型丰富支持十进制/十六进制整数、字符串、函数指针等参数
支持返回值显示可以显示函数执行后的返回结果,并设置显示格式
支持运行时间统计可测量目标函数的执行时间
串口交互方便输入命令后即可完成函数调用和结果查看

需要注意,USMART 适合调试阶段使用。正式产品中应根据安全性和资源占用情况决定是否保留。

三、USMART 的工作原理

USMART 的核心流程是“字符串解析 + 函数匹配 + 函数指针调用”。

串口接收用户输入 | v 解析函数名和参数 | v 在函数表中匹配函数名 | +-- 未匹配 -> 丢弃输入并输出错误信息 | v 通过函数指针调用目标函数 | v 输出函数返回值和执行结果

例如,用户在串口工具中输入一个符合规则的函数调用表达式:

目标函数名(参数1, 参数2)

USMART 会解析输入字符串,检查函数名是否已经注册,并将参数转换为对应类型。匹配成功后,组件通过函数指针执行目标函数。

这种机制的关键在于:串口输入本质上是字符串,USMART 需要完成字符串比较、参数分割、类型转换和函数分发。

四、USMART 组件组成

USMART 通常由以下文件组成:

文件作用
usmart.c/.h核心文件,负责命令处理和与外部模块交互
usmart_config.c函数管理文件,用于添加需要由 USMART 调用的用户函数
usmart_port.c/.h移植文件,用于适配串口、定时器等硬件资源
usmart_str.c/.h字符串处理文件,负责字符串转换和参数获取

1. 核心扫描函数

USMART 的核心扫描函数为:

void usmart_scan(void);

该函数用于检查并解析串口接收的数据,完成函数调用和系统命令处理。

通常需要在主循环、任务循环或专门的命令处理任务中周期性调用usmart_scan()

while (1) { usmart_scan(); ​ /* 其他应用任务 */ }

如果没有调用扫描函数,即使串口已经收到数据,USMART 也不会执行命令。

五、USMART 移植步骤

将 USMART 移植到自己的工程中,可按以下流程进行。

1. 获取并添加组件文件

将 USMART 的全部组件文件添加到工程中,并配置好头文件搜索路径。

通常需要添加:

usmart.c/.h usmart_config.c usmart_port.c/.h usmart_str.c/.h

2. 适配调试串口

USMART 依赖串口完成命令输入和结果输出,因此需要先保证调试串口工作正常。

适配时重点检查:

  • 串口波特率是否与上位机一致。

  • 串口接收是否能获得完整的一行命令。

  • 串口发送函数是否可正常输出字符串。

  • 回车换行符是否能正确识别。

3. 适配定时器

如果需要使用函数运行时间统计功能,还需要适配定时器。

定时器用于记录函数执行前后的计数值,再计算时间差。选择计时定时器时,应注意:

  • 定时器时钟频率要明确。

  • 计数周期应覆盖待测函数的最长执行时间。

  • 需要考虑计数器溢出。

  • 中断频繁或系统调度会影响测量结果。

4. 添加需要执行的函数

usmart_config.c中添加需要由 USMART 管理的函数。

建议优先注册这类函数:

  • 读取状态或传感器数据的查询函数。

  • 用于设置参数的接口函数。

  • 自检和诊断函数。

  • 外设初始化或重新配置函数。

  • 便于定位问题的测试函数。

不建议直接注册高风险函数,例如复位系统、擦除整片 Flash、修改关键时钟配置等。即使需要调试,也应增加额外确认机制。

5. 烧录并通过串口交互

完成移植后,打开串口工具,按照函数定义中的格式输入函数名和参数,并以回车结束命令。

USMART 解析成功后会执行函数并输出返回结果;输入格式错误、函数不存在或参数不匹配时,则会输出错误信息。

六、USMART 系统命令

USMART 内置常用系统命令,便于查看帮助信息、函数列表、参数格式和运行时间。

命令作用
?获取帮助信息
help获取帮助信息
list查看可调用的函数列表
id查看可用函数的 ID 列表
hex 数字将参数按十六进制显示
dec 数字将参数按十进制显示
runtime 1开启函数运行时间统计
runtime 0关闭函数运行时间统计

常见使用顺序:

help list runtime 1 目标函数名(参数) runtime 0

其中,list适合在忘记函数名称时查看可用接口,runtime 1适合分析某个函数是否耗时过长。