工程师笔记ES32图形化调试软件
|
ES32 图形化调试软件 ES-DAP-Viewer
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 模式
左边为绘图窗口;右边为配置窗口,包括串口选择及参数设置窗口,数据处理窗口和帧格式设置窗口;底部为通道选择栏,最多支持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 使用的通信协议如下表所示:
关于 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模式
|











