先和大家kuan两句,哈哈。因为之前参加智能车想用波形显示来调节PID,找了很多工具也没有成功,心里也知道串口一次就是只能发送八位数据,很多时候可以用字符显示16位的,但是就不是数据,而是字符串,字符串和数据最大的不同应该在于是否能计算的差别吧,所以字符串肯定是不能用图形表示的。之后看到山外这款串口助手虚拟示波器“类型”中明明有无符号16位的,但是查了很多资料都没有发送16位数据的代码,也在其中放弃过找寻其他的软件,但是心里又一直坚信着这款软件的功能应该不会骗我的,哈哈,就试了几次代码,发现终于成功了。哈哈,挺开心的吧,自己一直相信的事情实现了,好啦不多说上正题!
1.工具:山外多功能调试助手
软件界面如图:
(软件非原创,下文的代码只能说是对于这个软件功能的扩展和补充)
(界面直观,非常友好~,哈哈)
2.代码:
这里用虚拟示波器画出图形是有协议的,如代码中一样,先发送前命令{0x03,0xFC};之后即发送对应的数据,以无符号 16 位为例,是先发送低八位,再发送高八位,其他的数据类型也是如此,由低八位到高八位发送数据,如 virtual_Osc_send_data 函数,当然,同时绘制多条波形图也是在这里,即用循环控制发送不同数组就 OK,如 virtual_Osc_send_array 函数;最后发送后命令{0xFC,0x03},代表数据发送完成。
即发送格式:
前命令{0x03,0xFC}+由低 8 位依次到高 8 位的数据+后命令{0xFC,0x03}。
(供大家参考,拿走不谢噢~)
/*
功能:串口值用山外虚拟示波器绘图出来,支持16位数据等
说明:串口发送函数依照不同的单片机而定;
数据类型由自己宏定义,包括无符号整型和无符号字符型
*/
#define uint unsigned int
#define uchar unsigned char
/**********************************************
函数功能:串口发送单个字节函数
函数参数:value:发送的单字节数据
注意:需要自己填充使用的串口发送函数以及串口号
**********************************************/
void UART_PutChar(uchar value)
{
//留给各位程序员们自己的操作空间。这里由于每个芯片封装的库函数名以及串口号不一样,我这里就不写了,大家自己根据实际情况移植过来就好
}
/**************************************
函数功能:将数据用虚拟示波器表示出来
函数参数:所要发送的值
**************************************/
void virtual_osc_send_data(uint value)
{
uchar value_h,value_l;
uchar cmdf[2] = {0x03,0xFC}; //串口调试 使用的前命令
uchar cmdr[2] = {0xFC,0x03}; //串口调试 使用的后命令
UART_PutChar(cmdf[0]); //发送前命令,代表开始虚拟示波器的数据
UART_PutChar(cmdf[1]);
value_l=value%256; //低八位
value_h=value/256; //高八位
UART_PutChar(value_l); //发送低八位
UART_PutChar(value_h); //发送高八位
UART_PutChar(cmdr[0]); //发送后命令,代表结束虚拟示波器的数据
UART_PutChar(cmdr[1]);
}
/**************************************************
函数功能:将多个数组数据同时用虚拟示波器的图形表示出来
函数参数:array:所要发送的数组,最多支持8个数组
len: 所发数组的长度,不得大于8
**************************************************/
void virtual_osc_send_array(uint *array,uchar len)
{
uchar value_h[8],value_l[8],i;
uchar cmdf[2] = {0x03,0xFC}; //串口调试 使用的前命令
uchar cmdr[2] = {0xFC,0x03}; //串口调试 使用的后命令
UART_PutChar(cmdf[0]);
UART_PutChar(cmdf[1]);
for(i=0;i<len;i++)
{
value_l[i]=array[i]%256; //低八位
value_h[i]=array[i]/256; //高八位
UART_PutChar(value_l[i]); //发送低八位
UART_PutChar(value_h[i]); //发送高八位
}
UART_PutChar(cmdr[0]); //发送后命令
UART_PutChar(cmdr[1]);
}
/*************************************
函数功能:一个简单的调用函数测试用
*************************************/
void virtual_Osc_Test(void)
{
unsigned int MICVmin[8];
while(1)
{
MICVmin[0]=ADC_Read(ADC0);
MICVmin[1]=ADC_Read(ADC1);
MICVmin[2]=ADC_Read(ADC2);
MICVmin[3]=ADC_Read(ADC3);
MICVmin[4]=ADC_Read(ADC4);
MICVmin[5]=ADC_Read(ADC5);
MICVmin[6]=ADC_Read(ADC6);
MICVmin[7]=ADC_Read(ADC7);
virtual_osc_send_array(MICVmin,8);
}
}
3.说明:
(这里也要细心噢~)
定义了同时发送的数组个数以及数据类型要和软件对应,比如同时发送8个数组,发送的数据类型为无符号16位数,即如图设置:
4.运行效果:
(当当当 当~,这不就出来啦)
5.现在我们就可以愉快地用串口发送数据用图形表示出来啦~
软件获取:
1.关注公众号“脑补空间”发送“山外助手”即可获取网盘链接~
2.直接下载我的资源:https://download.csdn.net/download/weixin_46582567/76124961?spm=1001.2014.3001.5503