STM32使用虚拟示波器

STM32使用虚拟示波器


在调试过程中.,经常会有需要看到数据实时变化的情况,这时候便需要用到虚拟示波器。如:制作平衡车时,需要了解拟合角度跟随加速度计和陀螺仪的动态变化情况;做电机PWM调速时需要了解速度的变化曲线等。
对于虚拟示波器的选择,由于之前参加过飞思卡尔,用过是山外的多功能调试助手中的虚拟示波器,感觉还不错。
多功能调试助手
现在想用stm32制作一个平衡车,需要用到虚拟示波器,现在把使用方法分享出来,给那些有需要的人。
首先是通信协议:(下面是虚拟示波器部分的通信协议)
虚拟串口通信协议
虚拟示波器采用串口通信的方式和下位机通信。因此首先要配置好串口(这里就不做介绍了),接下来便需要实现发送函数。

///发送一个字节的数据
void usart3_send_char(uint8_t c)
{
 while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET); //循环发送,直到发送完毕
 USART_SendData(USART3,c);
}

///发送指定长度的数组
void usart3_putbuff (uint8_t *buff, uint32_t len)
{
    while(len--)
    {
        usart3_send_char(*buff);
        buff++;
    }
}

///根据通信协议向上位机发送数据
void vcan_sendware(uint8_t *wareaddr, uint32_t waresize)
{
    #define CMD_WARE     3   //3代表虚拟示波器,1摄像头,2CCD
  
    uint8_t cmdf[2] = {CMD_WARE, ~CMD_WARE}; 
    uint8_t cmdr[2] = {~CMD_WARE, CMD_WARE};  
    
    usart3_putbuff(cmdf,sizeof(cmdf));
    usart3_putbuff(wareaddr,waresize);
    usart3_putbuff(cmdr,sizeof(cmdr));
}

下面举一个发送的例子

#include <math.h>

float a = 1.5;
float warebuf[8];

void main(void)
{  
  while(1)
  {
    a = 10 *a;
    warebuf[0] = a;
    vcan_sendware((uint8_t *)warebuf,sizeof(warebuf))
    delay_ms(10);
  }
}

山外多功能调试助手的下载链接:http://www.vcan123.com/thread-5988-1-1.html

猜你喜欢

转载自blog.csdn.net/xiaoyuanwuhui/article/details/86350171