这一章在干嘛?

USMART 调试组件实验:串口命令解析 + 函数指针 + 调用任意无参数函数。从此不用反复编译烧录就能调内部函数。

21.1 USMART 调试组件简介

21.2 硬件设计

21.3 程序设计

21.4 下载验证

21.1 USMART 调试组件简介

USMART 是正点原子开发的串口调试工具,类似 Linux 的命令行:

  • 输入 led0(1) → 调用 void led0(uint8_t x) 函数;
  • 输入 beep() → 调用 beep()
  • 自动列出已注册函数名(help)。

USMART 由三部分组成:

模块作用
命令解析从串口接收字符串,解析为「函数名(参数列表)」
函数注册表所有可用函数的名称、参数类型
调用执行用函数指针调用目标函数

原书图 21.1.1:USMART 组件框图原书图 21.1.1:USMART 组件框图

21.2 硬件设计

复用 USART1(PA9/PA10) + LED0/LED1 + 蜂鸣器。

21.3 程序设计

21.3.1 注册函数

USMART 工具支持参数识别:基础类型自动解析,结构体/指针需手动指定。

// 注册函数列表
void *usmart_nametab[] = {
    (void *)led0, "led0",
    (void *)beep, "beep",
    (void *)test, "test",
};

// 函数表:参数类型字符串
struct usmart_fun usmart_funtbl[] = {
    {led0, "void led0(u8 x)"},
    {beep, "void beep(void)"},
    {test, "void test(u8 a, u16 b)"},
};

21.3.2 使用步骤

  1. 串口接收完整命令字符串(CR/LF 结尾);
  2. USMART 解析函数名 + 参数;
  3. 查注册表找到函数指针;
  4. 调用。

原书图 21.3.2.1:USMART 解析流程图原书图 21.3.2.1:USMART 解析流程图

21.4 下载验证

串口助手输入 led0(1) → LED0 亮;输入 beep() → 蜂鸣器响;输入 help → 列出所有可用函数。

调试利器:把 PID 控制参数、波形数据用 USMART 暴露给串口,无需重新烧录就能改值。

原书图 21.4.1:串口助手调用 USMART 命令原书图 21.4.1:串口助手调用 USMART 命令