野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11393|回复: 4

串口上位机显示波形这个帖子有没有上位机源码?

[复制链接]
发表于 2018-8-17 08:51:36 | 显示全部楼层 |阅读模式
串口上位机显示波形这个帖子有没有上位机源码?或者谁有更好的方案,希望分享一下
http://www.firebbs.cn/forum.php? ... 15383&extra=&page=1


回复

使用道具 举报

 楼主| 发表于 2018-8-17 08:54:05 | 显示全部楼层
本帖最后由 麦穗 于 2018-8-17 08:58 编辑

简介

顾名思义,虚拟示波器并不是真实的示波器,简单地说而是一款PC端开发的监控数据变化曲线的软件,与下位机进行通信。这种类型软件网上有很多,我现在推荐的是我前几年用的一款虚拟示波Data_Scope,在调试中起到了很大的帮助,感觉还不错,推荐给大家。用此软件可以监控速度变化曲线,角度变化曲线,AD值变化曲线等等,你想要监控的重要变量情况都可以。相比于串口调试助手,能以曲线形式更直观的显示变化情况。


使用说明基本原理

虚拟示波器与串口调试助手一样,需要下位机将数据通过UART发送数据到上位机端,Data_Scope示波器需要库函数支持,主要作用是将要发送的数据打包成指定的协议格式发送出去。该示波器主持10通道监控,即支持测量10个变量的变化情况。软件界面如下:

使用方法

1.将下载的库函数移植工程里。
2.通过如下函数SendDisplay调用显示。在SendDisplay中将需要发送的变量通过DataScope_Get_Channel_Data函数进行协议编写再发送,该函数形式为:

DataScope_Get_Channel_Data(要发送的变量,发送显示的通道数)。

例子中仅对ADValue变量进行显示。若还需要显示其他变量可以对其相应的调用开启(一个通道只能显示一个变量)


/*************************虚拟示波器调用显示********************  功能说明:示波器发送函数*  说明:   针对STM32开发*  函数返回:*//**************************************************************/  void SendDisplay()
{   
unsigned char i;          //计数变量  
  unsigned char Send_Count; //串口需要发送的数据个数                                
DataScope_Get_Channel_Data( ADValue, 1 );
//  DataScope_Get_Channel_Data(Value1, 2 );
//  DataScope_Get_Channel_Data(Value2, 3 );  
//  DataScope_Get_Channel_Data( Value3, 4 );  
//  DataScope_Get_Channel_Data(Value4, 5 );  
//  DataScope_Get_Channel_Data(Value5, 6 );  
//  DataScope_Get_Channel_Data(Value6, 7 );
//  DataScope_Get_Channel_Data( Value7, 8 );
//  DataScope_Get_Channel_Data(Value8, 9 );
//  DataScope_Get_Channel_Data(Value9, 10);   
  Send_Count = DataScope_Data_Generate(10); //生成10个通道的 格式化帧数据,返回帧数据长度       
   for( i = 0 ; i < Send_Count; i++)  //循环发送,直到发送完毕     
   {      
     printf("%c",DataScope_OutPut_Buffer);//发送字符    
  }     
   delay_ms(50);//帧间隔时间。 不同场合情况可能不一样,建议实测为准。  }
几项注意

(1)SendDisplay函数中的printf()为发送一个字符,如果不用printf,可以用自己带的寄存器或库函数编写。比如采用STM32,则printf( )可以用如下代替:

          while((USART1->SR&0X40)==0);//获取发送状态标志位(stm32)                                         
            USART_SendData(USART1,DataScope_OutPut_Buffer);//发送数据  

(2)发送完一帧数据包后必须要延时,这个延时根据不同场合可能不一样,需要实测。这个也是这款软件存在的一些缺点和不足,这种延时可能会占用系统时间而影响其他运行,可以通过定时器或实时操作系统等方法改善。




回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-17 08:55:56 | 显示全部楼层
[mw_shl_code=c,true]/*************************虚拟示波器调用显示*******************

*  功能说明:示波器发送函数
*  说明:   针对STM32开发
*  函数返回:
*/
/**************************************************************/  
void SendDisplay()
{
    unsigned char i;          //计数变量
    unsigned char Send_Count; //串口需要发送的数据个数                             
    DataScope_Get_Channel_Data( ADValue, 1 );  
//  DataScope_Get_Channel_Data(Value1, 2 );
//  DataScope_Get_Channel_Data(Value2, 3 );  
//  DataScope_Get_Channel_Data( Value3, 4 );  
//  DataScope_Get_Channel_Data(Value4, 5 );  
//  DataScope_Get_Channel_Data(Value5, 6 );  
//  DataScope_Get_Channel_Data(Value6, 7 );
//  DataScope_Get_Channel_Data( Value7, 8 );  
//  DataScope_Get_Channel_Data(Value8, 9 );  
//  DataScope_Get_Channel_Data(Value9, 10);
    Send_Count = DataScope_Data_Generate(10); //生成10个通道的 格式化帧数据,返回帧数据长度     
     for( i = 0 ; i < Send_Count; i++)  //循环发送,直到发送完毕   
     {  
         printf("%c",DataScope_OutPut_Buffer);//发送字符

     }  
      delay_ms(50);//帧间隔时间。 不同场合情况可能不一样,建议实测为准。  
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-17 08:56:34 | 显示全部楼层
[mw_shl_code=c,true]while((USART1->SR&0X40)==0);//获取发送状态标志位(stm32)                                          
            USART_SendData(USART1,DataScope_OutPut_Buffer);//发送数据  [/mw_shl_code]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-17 16:44:39 | 显示全部楼层
我顶顶顶顶顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 11:19 , Processed in 0.028649 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表