虚拟示波器通讯库
该库是与虚拟示波器上位机进行通讯的一个库,可发送数据到上位机进行图形化显示,便于调参时观察曲线该库需要串口库支持
使用该库前需要先初始化好串口
头文件
/*
* @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];
}
}