更多塔克创新资讯欢迎登陆【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】
X-CTR100控制器配套的X-PrintfScope串口波形显示功能的使用,如其名,软件最大亮点是可以通过C语言Printf函数实现波形显示功能,使用简单灵活。另外也支持常规的串口通信协议,实现高效率传输。
原理介绍
X-CTR100控制器配套X-PrintfScope串口波形显示软件,具有八个显示通道,最大特点是可通过C标准库函数printf增加@标识实现数据波形显示,例如printf("@%d %f ",a,b)可实现一个整形一个浮点类型数据波形显示,使用方便灵活。Printf协议使用字符编码方式,虽然使用方便灵活,但传输效率相对较低,本软件也支持高效的Data协议传输方式。
X-PrintfScope基于功能强大的Iocomp控件设计,软件界面及功能介绍如下图所示,详细使用请参考软件帮助或软件使用说明文档,本教程对软件基本操作进行说明。
串口设置
- 软件启动后,会自动搜索可用的串口,并在端口号下拉框处显示可用串口。如果有可用串口单击"OPEN"按钮即可打开对应串口,并且显示串口状态和参数信息(S:COM3_ON 115200 N 8 1),串口参数为默认参数(波特率:115200,校验位:NONE,数据位:8,停止位1)。
- 多个可用串口时,端口号下拉框可选择和切换不同串口。
- 波特率下拉框可以选择不同波特率。
- SET按钮可以打开不常用的'校验位''数据位''停止位'串口参数设置对话框。
- 进入串口参数设置对话框可进行参数设置,完成后单击参数更新即可完成参数设置。考虑到常用情况,参数设置不具有记忆性,每次进入均显示常用的默认参数值。
- 不支持串口热插拔,热插拔会报错误,建议关闭串口后再进行串口插拔。
波形显示
- 具有八个波形显示通道,使用不同颜色表示
- 波形可以拖动、放大、缩小操作
- 示波器上方具有帧数和帧率显示
- 建议最大发送帧率为120,帧率与电脑显示性能有关,帧率过大容易导致波形显示延迟
- CLEAR按钮实现波形和数据清除
- VIEW按钮实现数据显示(待实现)
- SAVE按钮实现数据保存为txt格式文件,文件名默认为"xx月xx日xx时xx分xx秒_.txt",其中xx为当前时间,"_"后可增加内容字符描述。
- LOAD按钮可实现保存数据的波形显示(待实现)
- Axes栏X、Y滑动条可进行X轴和Y轴数据缩放操作
通道操作
- Channel栏SET按钮可实现波形通道相关操作,单击可进入通道设置对话框
- 通道设置对话框 Name栏可定义波形通道名称
- View复选框可控制该通道波形是否显示
- Scale栏为输出与输入的比例系数
- Shift栏为输出与输入的唯一系数
- Scale和Shift可以方便进行波形显示范围的控制,方便进行不同数量级波形同屏显示
Printf通信协议
- Printf协议:通过C语言Printf函数增加@标识实现数据波形显示。
- 显示示例函数:printf("@%d %d %f %f \r\n", a, b, x, y);,实际发送数据 @876 142 12.35 48.357
- @为帧头标识符,回车换行\r\n为帧尾标识符。
- @帧头后面紧跟数据。
- 每个数据后面加一个空格,作为数据标识符。
- 支持整型%d和浮点%f两种数据类型。
- 数据数量为1~8,几个数据对应几个显示通道
Data通信协议
- Data协议为高效率的数据编码协议,传输效率比Printf协议高。
- 协议内容:0xAA + 0x55 + 数据个数 + 预留位 + 数据1低8位 + 数据1高8位 + …… + 校验和。
- 数据个数:根据需要可以选择1~8,对应数据1~数据8。
- 预留位:0x00
- 数据内容:数据位为16进制整型数据,低8位在前,高8位在后。数据数量与前面数据个数位对应。
- 校验和:前面数据累加和的低8位。
- 范例:帧数据'aa 55 03 00 43 fe 2a ff 74 ff df'
发送功能
- 为方便系统调试,设计了数据发送功能,可实现下位机命令交互功能。
- 可以在Send区,发送您发送的任意字符。
- 支持16进制发送,勾选'Hex'复选框后,发送的时候将对发送区的内容进行16进制和字符互转。
- Num为发送的字节数。
例程设计
通过位带操作实现了GPIO的输入输出操作,利用SW拨码开关控制LED灯的开关。
硬件说明
硬件资源:
- 串口UART1
- LED灯
- SW 拨码开关
软件说明
软件通过主程序实现,,AX_Init()函数已完成IO口初始化,SW和LED灯接口位带定义如下。
//LED端口定义 #define GPIO_LED_G PDout(11) // 绿色LED #define GPIO_LED_R PDout(10) // 红色LED
//SW拨码开关端口定义 #define GPIO_SW1 PEin(15) //拨码开关1 #define GPIO_SW2 PEin(10) //拨码开关2 |
主程序代码如下。
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 位带操作-GPIO例程***\r\n\r\n");
//位带控制LED输出 GPIO_LED_G = 0; GPIO_LED_R = 0; AX_Delayms(500); GPIO_LED_G = 1; GPIO_LED_R = 1; AX_Delayms(500);
//循环检测,通过拨码开关控制LED while (1) { //获取拨码开关1状态,控制LED绿灯 if(GPIO_SW1 == 1) GPIO_LED_G = 1; else GPIO_LED_G = 0;
//获取拨码开关2状态,控制LED红灯 if(GPIO_SW2 == 1) GPIO_LED_R = 1; else GPIO_LED_R = 0;
AX_Delayms(200);
} } |
实现效果
拨动SW1控制绿色LED灯亮灭,拨动SW2控制红色LED灯。