DataScope v1.0 特性
1、无需安装,启动即用;2、支持同时刷新多达10个通道的单精度浮点型数据;3、支持多种格式的通道数据导入、导出及回放;4、支持全屏浏览;5、支持图表数据统计、测量及缩放;6、支持蓝牙适配器;7、支持各通道独立刷新;8、支持3D轨迹显示;9、3D立方体显示;10、航空仪表;11、灵活可屏蔽的快捷键支持。
--- 软件下载见原网站---
准备工作
在使用时我们要先引入头文件“ #include "DataScope_DP.h" ”,这个头文件中定义了我们需要用的2个函数和一个数组,分别是:
extern unsigned char DataScope_OutPut_Buffer[42]; //待发送帧数据缓冲区 void DataScope_Get_Channel_Data(float Data,unsigned char Channel); // 写通道数据至 待发送帧数据缓冲区 unsigned char DataScope_Data_Generate(unsigned char Channel_Number); //发送帧数据生成函数
库文件(v1.0)的ROM和RAM占用情况参考
226 bytes of CODE memory ( At Cortex-M3 ) 44 bytes of DATA memory ( At Cortex-M3 )
使用系统提供的库文件将会占用系统226个字节存储空间以及44个随机存储空间。
库文件说明
函数1:void DataScope_Get_Channel_Data(float Data,unsigned char Channel);
函数无返回值。
功能:将制定通道的待发送的单精度浮点数据转化为字节数据,存储在 DataScope_OutPut_Buffer[42](待发送帧数据缓冲区)
参数: Channel 单字节无符号整形,识别范围 1-10,制定本次数据的通道。
Data:单精度浮点型,传递待转换的浮点数据
函数2:DataScope_Data_Generate(unsigned char Channel_Number)
返回一个单字节无符号整形。返串口需要发送的字节数目,返回0表示本次转换失败。
功能:返回制定通道个数的要发送的帧数据,并存放至 DataScope_OutPut_Buffer。
Channel_Number:单字节无符号整形,识别范围 1-10,要发送的通道数目。
下面是软件的设置者给出的截图:
实验过程
目的:在单片机端随机生成0-20之间的数据,通过USART串口进行传输,在上位机软件(DataScope)中进行显示波形。
软件打开如图所示:
我们可以在软件的下面选择打开制定串口:这里是端口10。
我们现在重要的是程序的配置
对于随机函数,我采取的是C语言中的rand()函数,为了得到对应区间的数,我使用rand()/100000000。此处我只使用了通道1进行显示。
现在我们分析数据传输及解析的过程,整个过程分三部分:
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);
实现 生成1个通道的 格式化帧数据,返回帧数据长度,如果上一步你选择了10个通道,则写成:
Send_Count = DataScope_Data_Generate(10);
3、传输数据到电脑(上位机):
for( i = 0 ; i < Send_Count; i++) { while((USART1->SR&0X40)==0); USART1->DR = DataScope_OutPut_Buffer[i]; } Delay(0xFFFFFF);
其中for( i = 0 ; i < Send_Count; i++)语句实现数据的循环发送,直至第二步中生成的所有数据发送完成。USART1->DR = DataScope_OutPut_Buffer[i];语句是丢一个数据出去;Delay(0xFFFFFF);是发送完一次转换的数据之后进行简单的延时等待。至于延时函数,我们使用的是简单的如下程序:
void Delay(__IO uint32_t nCount) { for(; nCount != 0; nCount--); }
现在发送配置就完成了,main()函数的全部内容是:
int main(void) { unsigned char i; unsigned char Send_Count; int x=0; USART1_Config(); NVIC_Configuration();
while(1){ DataScope_Get_Channel_Data( rand()/100000000 , 1 ); Send_Count = DataScope_Data_Generate(1); for( i = 0 ; i < Send_Count; i++) { while((USART1->SR&0X40)==0); USART1->DR = DataScope_OutPut_Buffer[i]; } Delay(0xFFFFFF); } }
实验结果
实验现象如下:右上角显示实时的数据值。
我们可以对波形图的显示方式进行设置,默认是显示图形的当前一部分,接下来来超出屏幕的将看不见,我们可以设置成刷新(显示完一屏之后清空再显示),移动(波形滑动,总显示最新部分),设置如下所示:
选自:http://www.ciast.net/post/20151224.html CIAST.NET