推荐一款好用的串口波形显示助手 您所在的位置:网站首页 51单片机keil仿真波形串口 推荐一款好用的串口波形显示助手

推荐一款好用的串口波形显示助手

2024-06-12 03:13| 来源: 网络整理| 查看: 265

文章目录 前言一、虚拟示波器是什么?二、去哪里下载1、下载源码2、解压 三、如何移植到单片机1.添加.c,.h文件2、替换串口字节发送函数,如send_char(databuf[i]);3、调用波形显示函数4、波形测试 总结

前言

“本虚拟示波器是作者花少利用近两个月开发的一款高速、精致的虚拟示波器”,具有实时显示波形,还有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 /使用说明*************** 本协议与“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 u16 i; for( i=0;i 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 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个点,自动连线 在这里插入图片描述

总结

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有