工程师笔记ES32图形化调试软件

时间:2022-03-09来源:佚名

工程师笔记ES32图形化调试软件

ES32 图形化调试软件

ES-DAP-Viewer

工程师笔记ES32图形化调试软件

MCU 向调试终端输出信息的方法有很多。今天就介绍一个更炫更酷、可以图形化显示数据的调试法宝——ES-DAP-Viewer。ES-DAP-Viewer 是 essemi 推出的,可以在目标 MCU 运行时,实时分析数据并图形化显示的 PC 端软件。用户可以简单的将目标 ES32 芯片连接到 ES-Link II 调试器或 ES-DAPLink 调试器,并启动 ES-DAP-Viewer 软件,就可以像示波器一样显示多个变量的值。它支持通过如下三种模式获取数据:

1. UART-Print 模式:用户通过串口将数据以固定的格式发送到 PC 端,上位机软件按照用户界面属性配置将收到的数据绘成波形。

2. SWD-Print 模式:这种模式不要额外的 UART 引脚, PC 软件通过 SWD 调试接口获取数据,用户只需要使用 essemi_swd_printf 函数将数据写入目标缓冲区即可。

3. 全局变量监视模式:这种模式也是通过 SWD 调试接口获取数据,并通过读取一个 axf 文件,允许选择一定数量的变量可视化。

☞ ES-DAP-Viewer下载链接(复制到浏览器打开):http://www.essemi.com/index/product/detail?id=896

1. UART-Print 模式

工程师笔记ES32图形化调试软件

左边为绘图窗口;右边为配置窗口,包括串口选择及参数设置窗口,数据处理窗口和帧格式设置窗口;底部为通道选择栏,最多支持10个通道。

PC 界面操作说明

UART-Print 绘图调试的大致流程如下所述:

1. 打开 ES-DAP-Viewer 后选择 UART-Print 选项卡,进入 UART-Print 界面。

2. 在串口选择及参数设置窗口中选择通信串口,并配置通信参数。根据 UART 通信协议,用户需配置波特率,停止位,数据位和奇偶校验位。

3. 在帧格式设置窗口中设置数据类型,可选 Uint8、Int8、Uint16、Int16 以及 Uint32 和 Int32。

4. 点击 打开串口 开始数据传输,点击 开始显示 便可在绘图窗口看到当前调试数据的实时波形。

5. 点击 保存 可保存接收到的数据。点击 清除缓存 可清空当前显示界面内的图形。点击 初始比例 可当前视图回到初始状态时的显示比例。点击 背景颜色 右侧的颜色框可选择当前视图的背景色。

6. 点击 显示方式 下拉菜单,可选择 波形显示 和 数据显示 。需要注意的是,当选择 数据显示 时,在数据显示窗口中显示的是用户程序发送的原始数据(不包含帧头、功能码、数据长度及校验和),每行显示一帧数据。

7. 点击 开始显示,波形或数据开始动态显示。

8. 输入框 显示时长 默认为 50000ms,可根据实际情况,输入合适的值,在按下回车键后将会更新横坐标的显示范围。

通信协议和程序示例

UART-Print 使用的通信协议如下表所示:

工程师笔记ES32图形化调试软件

关于 ES-DAP-Viewer 的 UART-Print 通信协议,详细说明如下:

1. UART-Print 的数据帧由帧头、功能码、数据长度、用户数据以及累加校验和组成,其中,帧头固定为两字节大小的 0xAAAA,功能码固定为 0xF1。

2. data_len 表示该数据帧内包含的用户数据的字节总长度,不包括帧头、功能码、数据长度和累加校验和。

3. check_sum 表示从该数据帧第一个字节开始,也就是帧头开始,到用户数据最后一个字节的累加校验和,高位舍去,只保留低八位。

4. ES-DAP-Viewer上位机按照上述的协议解析收到的数据并进行校验以显示可靠的数据,这意味着用户在使用 UART-Print 功能时,必须按照该协议进行发送数据,否则上位机会因校验不通过而丢弃数据。

5. UART-Print 最多支持 10 个通道,每个通道均支持显示 Uint8、Int8、Uint16、Int16 以及 Uint32 和 Int32 格式的数据。

如下程序可产生上面动图所示的效果。

int main()

{

uint8_t i, j, length;

int32_t data2send[2];

md_uart_init_t g_uart_init;

/* 配置系统时钟 */

md_cmu_pll1_config(MD_CMU_PLL1_INPUT_HOSC_3, MD_CMU_PLL1_OUTPUT_72M);

md_cmu_clock_config(MD_CMU_CLOCK_PLL1, 72000000);

/* 初始化SysTick中断 */

md_init_1ms_tick();

/* 使能所有外设时钟 */

SYSCFG_UNLOCK();

md_cmu_enable_perh_all();

SYSCFG_LOCK();

/* 初始化UART引脚 */

uart_pin_init();

/* 配置UART通信参数 */

memset(*g_uart_init, 0x0, sizeof(md_uart_init_t));

g_uart_init.baud = 115200;

g_uart_init.word_length = MD_UART_WORD_LENGTH_8B;

g_uart_init.stop_bits = MD_UART_STOP_BITS_1;

g_uart_init.parity = MD_UART_PARITY_NONE;

g_uart_init.fctl = MD_UART_FLOW_CTL_DISABLE;

md_uart_init(UART0, *g_uart_init);

i = 0;

while (1)

{

data2send[0] = (int32_t)(1000 * sin((2 * 3.1415926 / 255) * i)); /* 正弦数据 */

data2send[1] = (int32_t)(1000 * cos((2 * 3.1415926 / 255) * i)); /* 余弦数据 */

/* 按照ES-DAP-Viewer的UARTPrint传输协议要求, 格式化传输数据,获取待发送数据的总长度

格式化后的数据暂存在全局变量 g_tx_buf[20] 里,注意数组长度不要越界 */

length = data_initialize((uint8_t *)data2send, 2 * 4);

/* 发送格式化后的数据 */

for (j = 0; j < length; j )

{

md_uart_set_send_data8(UART0, g_tx_buf[j]);

while (RESET == md_uart_is_active_it_tbc(UART0));

md_uart_clear_it_tbc(UART0);

}

i ;

md_delay_1ms(10);

}

}

2. SWD-Print模式

工程师笔记ES32图形化调试软件

关于 SWD-Print 的界面使用介绍可参考 UART-Print。

使用说明

用户程序需要使用 essemi_swd_printf 函数将数据写入目标缓冲区,ES-DAP-Viewer 将通过 SWD 调试接口读取数据后显示在 PC 界面上。SWD-Print 功能的实现需要用到以下四个配置文件:

essemi_swd_print.h

essemi_swd_print_conf.h

essemi_swd_print.c

essemi_swd_print_printf.c

用户在工程中成功添加上述四个配置文件后,并在需要用到 SWD-Print 功能的文件中包含如下头文件#include“essemi_swd_print.h”后,即可调用 essemi_swd_printf()函数将需要打印的数据放到 SWD 专属内存区域中,然后上位机到该内存区域取出数据,显示到绘图窗口。

配置文件放在 ES-DAP-Viewer 如下安装目录:...configureessemi_swd_print。

需要注意以下几点:

在使用 SWD-Print 功能的函数时,必须先调用函数 int essemi_swd_configupbuffer 以及函数 int essemi_swd_configdownbuffer 来初始化上行(MCU 端到 PC 端)和下行(PC 端到 MCU 端)缓冲区,其中,对于第一个参数 BufferIndex = 0 的时候,SWD 组件已为其配置了缓冲和默认大小,其大小配置是在 essemi_swd_print_conf.h 中通过宏定义进行的 #define BUFFER_SIZE_UP(1024) #define BUFFER_SIZE_DOWN(16),因此,在使用缓冲区 0 时,配置比较简单,按照该格式即可:

essemi_swd_configupbuffer(0, "SWDUP", NULL, 0, ESSEMI_SWD_MODE_BLOCK_IF_FIFO_FULL);

essemi_swd_configupbuffer(0, "SWDDOWN", NULL, 0, ESSEMI_SWD_MODE_BLOCK_IF_FIFO_FULL);

上面两个函数的最后一个参数选择如下宏定义:

/* Skip(Default): 如果缓冲区不够存储要发送的数据,将放弃写入缓冲区. */

#define ESSEMI_SWD_MODE_NO_BLOCK_SKIP (0)

/* Trim: 如果缓冲区不够存储这些数据,则将无法写入的部分丢弃. */

#define ESSEMI_SWD_MODE_NO_BLOCK_TRIM (1)

/* Block: 如果缓冲区满,将阻塞等待有空间可用. */

#define ESSEMI_SWD_MODE_BLOCK_IF_FIFO_FULL (2)

SWD-Print 目前仅支持字节、半字、字输出,因此当使用函数 int essemi_swd_printf(unsigned BufferIndex, const char *sFormat, ...) 时,须根据输出的数据位宽使用 “%.2x” 、“%.4x” 或 “%.8x” 来格式化输出。并且,输出的第一个字符必须为空格。

essemi_swd_printf(0, " %.8x", data2send[0]);

在连接 DAP 调试器时,必须确保目标 MCU 程序正确下载并复位,否则将无法连接 DAP 调试器。

如下程序可产生上面动图所示的效果。

int main(void)

{

uint8_t i,j;

int32_t data2send[2];

md_cmu_pll1_config(MD_CMU_PLL1_INPUT_HOSC_3, MD_CMU_PLL1_OUTPUT_96M);

md_cmu_clock_config(MD_CMU_CLOCK_PLL1, 96000000);

/* Enable ALL peripheral */

SYSCFG_UNLOCK();

md_cmu_enable_perh_all();

SYSCFG_LOCK();

/* 初始化缓冲区 */

essemi_swd_configupbuffer(0, "SWDUP", NULL, 0, ESSEMI_SWD_MODE_BLOCK_IF_FIFO_FULL);

essemi_swd_configdownbuffer(0, "SWDDOWN", NULL, 0, ESSEMI_SWD_MODE_BLOCK_IF_FIFO_FULL);

i = 0;

while (1)

{

data2send[0] = (int32_t)(1000 * sin((2 * 3.1415926 / 255) * i));

essemi_swd_printf(0, " %.8x", data2send[0]); /* 向SWD端口缓冲区输出数据,注意输出的第一个字符必须为空格,并根据数据位宽将数据格式输出 */

i ;

}

}

3. 全局变量监视模式

工程师笔记ES32图形化调试软件

使用说明

用户首先需点击 选择axf文件 按钮,载入由编译器生成的 axf 文件,然后在页面下方选择需要监视的全局变量。

通过点击下拉框 DAP设备 选择上位机已扫描到的 DAP 设备,当上位机扫描到目标 CMSIS-DAP 设备时,点击 打开连接 即可与该设备建立通信。

左边为绘图窗口;右边为配置窗口,包括 axf 文件和 DAP 设备选择窗口,数据显示配置窗口;下方为解析到的全局变量列表。

全局变量监视绘图调试的流程如下所述:

1. 打开 ES-DAP-Viewer 后选择全局变量监视选项卡,进入全局变量监视界面。

2. 点击 选择axf文件 按钮,载入由编译器生成的 axf 文件。

3. 点击下拉框 DAP设备 选择上位机已扫描到的 DAP 设备,当上位机扫描到目标 DAP 设备时,点击 打开连接 与该设备建立连接。

4. 在下方全局变量列表中,可查看解析到的全局变量的名称,地址以及数据类型大小,通过点击全局变量所在行中,对应的 Color 单元,可选择该全局变量在波形显示窗口中的颜色。此外,尽管目前可以解析到结构体变量,但目前不支持对结构体成员和数组成员进行解析,因此在全局变量列表中勾选结构体类型的全局变量是无效的,勾选数组成员会因数组类型的不同而产生不同的效果。

5. 点击 开始显示 按钮便可在绘图窗口看到当前调试数据的实时变化波形,在下方全局变量列表的 Value(0x) 列中可查看全局变量的当前值。

6. 此外,用户还可在数据处理窗口中选择保存数据,显示光标,清除缓存,以及更改背景颜色。

7. 其余操作可参考 UART-Print 界面操作说明。

程序示例

如下程序可产生上面动图所示的效果。

int main(void)

{

uint16_t i;

md_cmu_pll1_config(MD_CMU_PLL1_INPUT_HOSC_3, MD_CMU_PLL1_OUTPUT_96M);

md_cmu_clock_config(MD_CMU_CLOCK_PLL1, 96000000);

/* Enable ALL peripheral */

SYSCFG_UNLOCK();

md_cmu_enable_perh_all();

SYSCFG_LOCK();

i = 0;

while (1)

{

g_sin_value = (int32_t)(1000 * sin((2 * 3.1415926 / 65535) * i)); /* 产生正弦数据 */

g_cos_value = (int32_t)(1000 * cos((2 * 3.1415926 / 65535) * i)); /* 产生余弦数据 */

i ;

}

}

    相关阅读

    城市道路照明工程主要有哪些?

    在城市建设中,道路照明 是必不可少的基础设施,也是城市夜景的重要组成部分。在某种程度上,它还反映了城市的经济实力,社会进步和现代化的标志。它为夜间在城市中的车辆和行...
    2022-07-12
    城市道路照明工程主要有哪些?

    城市亮化工程如何设计才能具有层次感?

    城市亮化工程 的主要目地是为夜间带来一体化照明,考虑基础的视觉识别规定,自然环境照明的光层级与光线总数的多少相关,假如空间中的自然环境照明比工作照明低许多 ,在工作...
    2022-10-11
    城市亮化工程如何设计才能具有层次感?

    路灯照明合理的布置方式

    路灯的布置方式主要有单侧布置、双侧交错布置、双侧对称布置、中心对称布置、横向悬索布置五种形式,随着城市道路的不断拓宽,平交路口转弯半径越来越大,根据《城市道路亮化...
    2022-07-15

    安全出口指示标志灯为什么是绿色而不是红色?

    对于安全出口指示标志灯相信大家都不陌生,我们在日常生活中在任何公众场所的紧急疏散的安全出口都可以看到这个安全出口指示标志灯,大家有没有想过安全出口的指示标志为什么...
    2022-05-21
    安全出口指示标志灯为什么是绿色而不是红色?

    泛光照明工程是什么?应用范围有哪些?

    很多人提及 泛光照明工程 会有一些生疏,不理解泛光照明包含哪些,也不知道 泛光照明工程 跟普通照明工程有哪些不一样。 实际上泛光照明工程便是归属于城市景观照明工程或环境...
    2022-10-17
    泛光照明工程是什么?应用范围有哪些?

    消防应急灯的寿命有多长?一般可以使用多长时间?

    对于消防应急灯的使用寿命相信很多人都想了解这个问题,因为消防应急灯安装了就不需要时时刻刻盯着,这需要定时检查就可以了,但是很多人都不知道消防应急灯的寿命有多长,不...
    2022-05-21
    消防应急灯的寿命有多长?一般可以使用多长时间?

    快投派智能无线投屏器,让无线互联更加简单便捷

    没有WiFi的情况下可以进行无线投屏吗? 长期使用投屏功能的人,或多或少都知道自己的手机可以通过【无线投屏】【屏幕镜像】功能,直接连接到智能电视或无线投屏器,下意识地认...
    2022-05-11
    快投派智能无线投屏器,让无线互联更加简单便捷

    广场照明的设计技巧

    广场照明设计 主要包括休闲广场、集会活动广场、商业广场的照明设计。 1)休闲广场。主要是为人们提供休息、社交和举行小型文化娱乐活动的地方,由于人们活动方式不同,有些区...
    2022-07-15

    网站栏目