上一节介绍了stm32实现的开源串口虚拟示波器(可采集16路AD数据)的下位机代码,这一节我们介绍一下这个上位机的部分,上位机我用了一个GITHUB上的一个开源QT项目,GITHUB地址:https://github.com/CieNTi/serial_port_plotter
Qt 项目的源文件和 .pro 文件可用。我为不想构建源代码的童鞋提供了一个独立的 .exe,可以到我的空间下载,生成的exe
这是一个显示来自串行端口的实时数据的 Windows 应用程序。该应用程序是 32 位的,使用 Qt 和 QCustomPlot 库构建。
软件特点:
无轴限制:未知/新通道数据创建一个新图形并使用它(14 种循环颜色的调色板)
无数据点限制:保留所有接收到的数据,以便用户可以探索旧数据
无波特率限制:经测试高达 912600 bps
使用鼠标缩放和拖动(滚轮或单击,仅限于 X 轴)
在绘图中移动会在状态栏中显示图表的 X 和 Y 值
频道名称图例(双击修改)
频道选择(点击图例文字)
支持正负整数和浮点数
导出到 PNG
导出为 CSV
自动缩放到可见图形
如何使用应用程序
只需通过串行端口发送您的整数数据。应用程序需要某种格式,以便它可以区分值。您发送的每条消息都必须以“$”开头并以“;”结尾 (分号)和里面的整数需要用空格分隔。帮助按钮显示综合说明。
使用鼠标滚轮在控件上更改其值并在绘图区域上使用它进行缩放。
停止/暂停时,可以拖动绘图区域并启用文件保存。
要启用文件保存,请在开始绘图之前单击文档按钮。
双击图形控制面板中的通道以隐藏/显示特定通道。
通过串口发送数据接口协议
/示例:绘制两个值/
printf ( " $ %d %d ; " , data1, data2);
以我上节的下位机stm32代码为例,在MAIN文件中添加如下代码:
int main(void)
{
u16 adcx;
int i = 0;
float temp;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
LCD_Init();
Adc_Init(); //ADC初始化
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
DMA_Cmd(DMA1_Channel1,ENABLE);
while(1)
{
// adcx=Get_Adc_Average(ADC_Channel_1,10);
// temp=(float)adcx*(3.3/4096)*1000;
// printf("%f\t",temp);
// delay_ms(250);
printf("$%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d;",(int)(ADC_Value[0]),(int)(ADC_Value[1]),(int)(ADC_Value[2]),(int)(ADC_Value[3]),(int)(ADC_Value[4]),(int)(ADC_Value[5]),(int)(ADC_Value[6]),(int)(ADC_Value[7]),(int)(ADC_Value[8]),(int)(ADC_Value[9]),(int)(ADC_Value[10]),(int)(ADC_Value[11]),(int)(ADC_Value[12]),(int)(ADC_Value[13]),(int)(ADC_Value[14]),(int)(ADC_Value[15]));
// }
}
}
根据您要显示的数据量,您可以调整数据点的数量。例如,如果您每 10 毫秒(100 Hz)从 mbed 的串行端口发送数据并且绘图仪设置为显示 500 个点,它将包含 5 秒数据的信息。
该软件支持整数和十进制数( float/double )
Qt 项目的源文件和 .pro 文件可用。我为不想构建源代码的童鞋提供了一个独立的 .exe,可以到我的空间下载,生成的exe
打开我们的上位机软件,ok拉,16路ad数据都看到波形了,如果你觉得有用,麻烦给个赞拉,感谢老铁们!