虚拟示波器通讯库

虚拟示波器通讯库

该库是与虚拟示波器上位机进行通讯的一个库,可发送数据到上位机进行图形化显示,便于调参时观察曲线该库需要串口库支持

使用该库前需要先初始化好串口

头文件

/*
 * @Descripttion:该库是与虚拟示波器上位机进行通讯的一个库,可发送数据到上位机进行图形化显示,便于调参时观察曲线该库需要串口库支持
 * @version: 1.0
 * @Author: GongHaoJing
 * @Date: 2021-10-21 22:14:35
 * @LastEditors: GongHaoJing
 * @LastEditTime: 2021-10-22 21:42:56
 * @WWW:: www.gonghaojing.top
 */

#include "usart.h"
#ifndef __DATA_PRTOCOL_H
#define __DATA_PRTOCOL_H
 
 
extern unsigned char DataScope_OutPut_Buffer[42];	   //待发送帧数据缓存区

/**
 * @How To Use:
 * DataScope_Get_Channel_Data(100.0, 1 );
 * DataScope_Get_Channel_Data(111.1, 2 );
 * DataScope_Send(USART1,4);
 * 
 */

void DataScope_Get_Channel_Data(float Data,unsigned char Channel);          // 写通道数据至 待发送帧数据缓存区

unsigned char DataScope_Data_Generate(unsigned char Channel_Number);        // 发送帧数据生成函数 
void DataScope_Send(USART_TypeDef * USARTx,unsigned char Channel_Number);   //发送数据
 
#endif 

.c文件:

#include "DataScope_DP.h"
unsigned char DataScope_OutPut_Buffer[42] = {0};	   //缓冲区

/**
 * @brief 浮点数编码
 * 
 * @param target 
 * @param buf 
 * @param beg 
 */
void Float2Byte(float *target,unsigned char *buf,unsigned char beg)
{
    unsigned char *point;
    point = (unsigned char*)target;	  
    buf[beg]   = point[0];
    buf[beg+1] = point[1];
    buf[beg+2] = point[2];
    buf[beg+3] = point[3];
}
 
 
/**
 * @brief 
 * 
 * @param Data 要发送的数据
 * @param Channel 要发送的数据通道
 */
void DataScope_Get_Channel_Data(float Data,unsigned char Channel)
{
	if ( (Channel > 10) || (Channel == 0) ) return;  
  else
  {
     switch (Channel)
		{
      case 1:  Float2Byte(&Data,DataScope_OutPut_Buffer,1); break;
      case 2:  Float2Byte(&Data,DataScope_OutPut_Buffer,5); break;
		  case 3:  Float2Byte(&Data,DataScope_OutPut_Buffer,9); break;
		  case 4:  Float2Byte(&Data,DataScope_OutPut_Buffer,13); break;
		  case 5:  Float2Byte(&Data,DataScope_OutPut_Buffer,17); break;
		  case 6:  Float2Byte(&Data,DataScope_OutPut_Buffer,21); break;
		  case 7:  Float2Byte(&Data,DataScope_OutPut_Buffer,25); break;
		  case 8:  Float2Byte(&Data,DataScope_OutPut_Buffer,29); break;
		  case 9:  Float2Byte(&Data,DataScope_OutPut_Buffer,33); break;
		  case 10: Float2Byte(&Data,DataScope_OutPut_Buffer,37); break;
		}
  }	 
}


/**
 * @brief 对发送数据进行编码
 * 
 * @param Channel_Number 数据通道
 * @return unsigned char 
 */
unsigned char DataScope_Data_Generate(unsigned char Channel_Number)
{
	if ( (Channel_Number > 10) || (Channel_Number == 0) ) { return 0; }  
  else
  {	
	 DataScope_OutPut_Buffer[0] = '$';  //帧头
		
	 switch(Channel_Number)   
   { 
		 case 1:   DataScope_OutPut_Buffer[5]  =  5; return  6;  
		 case 2:   DataScope_OutPut_Buffer[9]  =  9; return 10;
		 case 3:   DataScope_OutPut_Buffer[13] = 13; return 14; 
		 case 4:   DataScope_OutPut_Buffer[17] = 17; return 18;
		 case 5:   DataScope_OutPut_Buffer[21] = 21; return 22;  
		 case 6:   DataScope_OutPut_Buffer[25] = 25; return 26;
		 case 7:   DataScope_OutPut_Buffer[29] = 29; return 30; 
		 case 8:   DataScope_OutPut_Buffer[33] = 33; return 34; 
		 case 9:   DataScope_OutPut_Buffer[37] = 37; return 38;
     case 10:  DataScope_OutPut_Buffer[41] = 41; return 42; 
   }	 
  }
	return 0;
}

/**
 * @brief 数据发送函数
 * 
 * @param USARTx 串口号
 * @param Channel_Number 要发送的数据通道数量
 */
void DataScope_Send(USART_TypeDef * USARTx,unsigned char Channel_Number){
	unsigned char Send_Count; 
	unsigned char i;          
	Send_Count = DataScope_Data_Generate(Channel_Number);
	for( i = 0 ; i < Send_Count; i++) 
	{
	while((USARTx->SR&0X40)==0);  
	USARTx->DR = DataScope_OutPut_Buffer[i]; 
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值