先和大家kuan两句,哈哈。因为之前参加智能车想用波形显示来调节PID,找了很多工具也没有成功,心里也知道串口一次就是只能发送八位数据,很多时候可以用字符显示16位的,但是就不是数据,而是字符串,字符串和数据最大的不同应该在于是否能计算的差别吧,所以字符串肯定是不能用图形表示的。之后看到山外这款串口助手虚拟示波器“类型”中明明有无符号16位的,但是查了很多资料都没有发送16位数据的代码,也在其中放弃过找寻其他的软件,但是心里又一直坚信着这款软件的功能应该不会骗我的,哈哈,就试了几次代码,发现终于成功了。好啦不多说上正题!

1.工具:山外多功能调试助手

下载地址:链接:https://pan.baidu.com/s/1m6wiImY1vgCWpbr1RvHGtg
提取码:9bvd
(免安装,打开就能用啦~)
软件界面如图:
(如链接失效,请于公众号回复“山外助手”获取)
c54bdaf98348c2476869b658988aeed0.png

2.代码:

这里用虚拟示波器画出图形是有协议的,如代码中一样,先发送前命令{0x03,0xFC};之后即发送对应的数据,以无符号 16 位为例,是先发送低八位,再发送高八位,其他的数据类型也是如此,由低八位到高八位发送数据,如 virtual_Osc_send_data 函数,当然,同时绘制多条波形图也是在这里,即用循环控制发送不同数组就 OK,如 virtual_Osc_send_array 函数;最后发送后命令{0xFC,0x03},代表数据发送完成。
即发送格式:
前命令 {0x03,0xFC} +  由低 8 位依次到高 8 位的数据+ 后命令 {0xFC,0x03} 。(供大家参考,拿走不谢噢~)

#define uint  unsigned int
#define uchar unsigned char


void  UART_PutBuff(UARTx uart,uchar *array,uchar len)
{
   uchar i;
   for(i=0;i<len;i++)
   {
    UART_PutChar(uart,array[i]);   
   }   
}


void virtual_Osc_send_data(uint value)
{
   uchar value_h,value_l;
   uint8_t cmdf[2] = {0x03,0xFC};    
   uint8_t cmdr[2] = {0xFC,0x03};    
   UART_PutBuff(UART0,cmdf,sizeof(cmdf));     
   value_h=value/256;  
   value_l=value%256;  
   UART_PutChar(UART0,value_l);      
   UART_PutChar(UART0,value_h);      
   UART_PutBuff(UART0,cmdr,sizeof(cmdr));    
}


void virtual_Osc_send_array(uint *array,uchar len)
{
   uchar value_h[8],value_l[8],i;
   uint8_t cmdf[2] = {0x03,0xFC};    
   uint8_t cmdr[2] = {0xFC,0x03};    
   UART_PutBuff(UART0,cmdf,sizeof(cmdf));     
   for(i=0;i<len;i++)
   {
      value_h[i]=array[i]/256;   
      value_l[i]=array[i]%256;   
      UART_PutChar(UART0,value_l[i]);      
      UART_PutChar(UART0,value_h[i]);      
   }
   UART_PutBuff(UART0,cmdr,sizeof(cmdr));    
}


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位数,即如图设置:
1743ae47d721813a4cfbca9554985421.png

4.运行效果:

(当当当 当~,这不就出来啦)

4f878b10b9a5797cfaf68c01398cd8f8.png

5.现在我们就可以愉快地用串口发送数据用图形表示出来啦~    

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐