推荐一款好用的串口波形显示助手----虚拟示波器


前言

“本虚拟示波器是作者花少利用近两个月开发的一款高速、精致的虚拟示波器”,具有实时显示波形,还有CRC校验,延时非常低,主要是高速!重点。用过都说好。
希望大家多多支持花少。
在这里插入图片描述

一、虚拟示波器是什么?

顾名思义,虚拟示波器是虚拟的,通过以数据以波形化,有时候数据并不是很直观,特别是需要通过波形来调参数的时候,虚拟示波器尤为重要。

二、去哪里下载

这个虚拟示波器在花少的Github是开源的,在Github右上角搜索虚拟示波器,有很多,我们找到基于MFC多线程示波器。点击下载到zip,解压。
Github的镜像地址https://hub.fastgit.org/
在这里插入图片描述
在这里插入图片描述

1、下载源码

点击进去我们可以下载源码,点击右上角code
在这里插入图片描述
在这里插入图片描述

2、解压

解压后我们可以看到那个绿色的花少出品的可执行文件,就可以直接打开
在这里插入图片描述

三、如何移植到单片机

我们可以看一下花少的提示,把.c和.h添加到工程文件,这里我用的是标准库。即添加到HARDWARE
环境:keil5 uvsion
单片机:STM32F103ZET6,标准库

1.添加.c,.h文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、替换串口字节发送函数,如send_char(databuf[i]);

#include “outputdata.h”
#include <stdlib.h>
/使用说明***************
本协议与“Visual Scope”软件协议兼容,用过的可以直接用原来的下位机协议即可
首次使用时:
1.将“outputdata.c”和“outputdata.h”添加到你的工程中
2.在“outputdata.c”中包含你原程序的串口发送函数头文件
3.将uart_putchar(databuf[i]);语句替换为你的串口字节发送函数,如send_char(databuf[i]);
4.在你的程序需要发送波形数据的.c文件中添加包含:#include “outputdata.h”,并在本文件中调用函数OutPut_Data(x,y,z,w);
其中形参x,y,z,w就是传入四个short int 16位数据,分别对应通道1,2,3,4
************************************************************************/
#include “usart.h”
//此处添加你的串口头文件包含!!!!!!!!!!!!
在这里插入图片描述
STM32F103的发送字节函数是putchar,直接替换就可以了。
在这里插入图片描述

3、调用波形显示函数

修改完后,在main.c文件中 #include “outputdata.h”
OutPut_Data(int x,int y,int z,int w)//主程序调用函数
调用函数即可。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "math.h" 
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "outputdata.h"

//串口通信实验 -库函数版本

#define PI 3.1415926
#define Point_Num 64
int sinnum,trianglenum,squarenum;
uint16_t SineWave_Point[Point_Num];
uint16_t Triangle_Point[Point_Num];//16位的无符号存放三角波数据
uint16_t Square_Point[Point_Num];//16位的无符号存放方波数据
void SineWave_Data( uint16_t cycle ,uint16_t D[])
{
    u16 i;
    for( i=0;i<cycle;i++)
    {
        D[i]=2048*(sin((2.0*PI*i)/(Point_Num-1))+1);
    }
}

void Triangle_Data(uint16_t cycle ,uint16_t *D)
{
    u16 i;
    for( i=0;i<cycle;i++)
    {
			if(i<=cycle/2)
			{
        D[i]=i*(4096.0/(cycle/2));
			}
			else
			  D[i]=i*(-4096.0/(cycle/2))+2*4096;	
    }   
}
void Square_Data(uint16_t cycle ,uint16_t *D)
{
 u16 i;
    for( i=0;i<cycle;i++)
    {
			if(i<=cycle/2)
			{
        D[i]=0;
			}
			else
			  D[i]=4095;	
    }        
}
int main(void)
{ 
 
  u8 j=255;
  u8 i=0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延时初始化 
	uart_init(115200);	//串口初始化波特率为115200
	LED_Init();		  		//初始化与LED连接的硬件接口  
  SineWave_Data(Point_Num ,SineWave_Point); //
  Triangle_Data(Point_Num ,Triangle_Point); //
  Square_Data(Point_Num ,Square_Point); //
	while(1)
	{

    //printf( "T%dP\r\n", SineWave_Point[i]);
    sinnum=SineWave_Point[i];
    trianglenum=Triangle_Point[i];
    squarenum=Square_Point[i];
    OutPut_Data(sinnum,trianglenum,squarenum,0);
	  delay_ms(10);
    i++;
    if(i==Point_Num-1)
    {
      i=0;
    }


	
	}
	
	
	
	
}


4、波形测试

这里产生正弦波,方波,三角波, delay_ms(10);每10ms画一次,因为程序设置64个点,我数了的额,64个点,自动连线
在这里插入图片描述

总结

再次感谢大佬
在这里插入图片描述

1、无需安装,启动即用; 2、支持同时刷新多达10个通道的单精度浮点型数据; 3、支持多种格式的通道数据导入、导出及回放; 4、支持全屏浏览; 5、支持图表数据统计、测量及缩放; 6、支持蓝牙适配器; 7、支持各通道独立刷新; 8、支持3D轨迹显示; 9、3D立方体显示; 10、航空仪表; 11、灵活可屏蔽的快捷键支持。 (1)数据输入: DataScope_Get_Channel_Data( rand()/100000000 , 1 ); 实现的是将数据写入通道,这里选择的是通道1,如果选择多个通道,可以写成如下形式:DataScope_Get_Channel_Data( 1.0 , 1 ); //将数据 1.0 写入通道 1 DataScope_Get_Channel_Data( 2.0 , 2 ); //将数据 2.0 写入通道 2 DataScope_Get_Channel_Data( 3.0 , 3 ); //将数据 3.0 写入通道 3 DataScope_Get_Channel_Data( 4.0 , 4 ); //将数据 4.0 写入通道 4 DataScope_Get_Channel_Data( 5.0 , 5 ); //将数据 5.0 写入通道 5 DataScope_Get_Channel_Data( 6.0 , 6 ); //将数据 6.0 写入通道 6 DataScope_Get_Channel_Data( 7.0 , 7 ); //将数据 7.0 写入通道 7 DataScope_Get_Channel_Data( 8.0 , 8 ); //将数据 8.0 写入通道 8 DataScope_Get_Channel_Data( 9.0 , 9 ); //将数据 9.0 写入通道 9 DataScope_Get_Channel_Data( 10.0 , 10); //将数据 10.0 写入通道 10 (2) 数据转换(转换为上位机可以理解的数据格式):Send_Count = DataScope_Data_Generate(1); (3) 传输数据到电脑(上位机):for( i = 0 ; i SR&0X40;)==0); USART1->DR = DataScope_OutPut_Buffer[i]; } Delay(0xFFFFFF); 里面有具体的使用说明,不会的可以及时联系我
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学工科的皮皮志^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值