STM32串口重定义与匿名上位机显示波形

发布时间 2024-01-08 16:08:50作者: 千樊

封装了串口调试代码,并且可以通过匿名上位机显示实时波形,也可以通过USB模拟串口实现。

CubeMX配置如下:

 简单来说,就是啥也不用配置,默认打开Asynchronous即可。

对了,需要在Keil的魔术棒里面打开该选项:

相关代码如下:

QFDebug.c

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : QFDebug.c
  * @brief          : QFDebug驱动库
  * @author         :「千樊」
  * @time           : 2023/03/14
  * @update         :2023/08/28
  ******************************************************************************
  * @attention
  *
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/

    #include "QFDebug.h"

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Function definition -------------------------------------------------------*/
/* USER CODE BEGIN FD */
/**
  * @Function name  QF_Debug_SendData
  * @Introduce          向匿名上位机发送数据
  * @Return                 读取到的数据
  */
void QF_Debug_SendData(int32_t Data1, float Data2){
  uint32_t _Count=0,Sum = 0,SumCheck = 0;
    
    uint8_t TxBuff[14] = {0};
    
    TxBuff[_Count++]=0xAA;
    TxBuff[_Count++]=0xFF;
    TxBuff[_Count++]=0xF1; //自定义帧1
    TxBuff[_Count++]=0;    //这是len位,后面 _cnt-4来赋值

    TxBuff[_Count++]=BYTE0(Data1);
    TxBuff[_Count++]=BYTE1(Data1);//数据部分
    TxBuff[_Count++]=BYTE2(Data1);//数据部分
    TxBuff[_Count++]=BYTE3(Data1);//数据部分
        
    TxBuff[_Count++]=BYTE0(Data2);
    TxBuff[_Count++]=BYTE1(Data2);//数据部分
    TxBuff[_Count++]=BYTE2(Data2);//数据部分
    TxBuff[_Count++]=BYTE3(Data2);//数据部分
    
    TxBuff[3] = _Count-4;//长度位

    for(uint8_t i=0;i<_Count;i++){
        Sum += TxBuff[i];
        SumCheck += Sum;
    }
    
    TxBuff[_Count++] = Sum;
    TxBuff[_Count++] = SumCheck;

    HAL_UART_Transmit(&huart1, TxBuff, _Count, 0xFFFF);
}
/* USER CODE END FD */
/************************ (C) COPYRIGHT 「千樊」 *****END OF FILE****/

QFDebug.h

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : QFDebug.h
  * @brief          : Header for QFDebug.c file.
  *                   This file provides code for the configuration
  *                   of the QFDebug instances
  * @author         : 「千樊」
  * @time           : 2023/03/14
  * @update         :2023/08/28
  ******************************************************************************
  * @attention
  *
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __QFDEBUG_H_
#define __QFDEBUG_H_

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

    #include "main.h"
    #include "usart.h"    
    #include "stdio.h"
    #include "string.h"
    
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PT */

    #define BYTE0(DataTemp)       (*( char *)(&DataTemp))              //取出int型变量的低字节
    #define BYTE1(DataTemp)       (*((char *)(&DataTemp) + 1))         //取存储在此变量下一内存字节的内容,高字节
    #define BYTE2(DataTemp)       (*((char *)(&DataTemp) + 2))
    #define BYTE3(DataTemp)       (*((char *)(&DataTemp) + 3))
    
/* USER CODE END PT */
/* Exported functions prototypes ---------------------------------------------*/
/* USER CODE BEGIN FP */
/**
  * @Function name    QF_DebugPrintf
  * @Introduce        Debug输出函数
  * @Return           NULL
  */
#define QF_DebugPrintf(format,...){\
    char DebugTempString[200];\
    sprintf(DebugTempString,format,##__VA_ARGS__);\
    HAL_UART_Transmit(&huart1, (uint8_t*)DebugTempString, strlen(DebugTempString), 0xFFFF);\
    HAL_Delay(20);\
}

/* USER CODE END FP */
/* USER CODE BEGIN EFP */

    void QF_Debug_SendData(int32_t Data1, float Data2);

/* USER CODE END EFP */
#endif /* __QFDEBUG_H_ */
/************************ (C) COPYRIGHT 「千樊」 *****END OF FILE*************/

使用方法还需要教嘛,如下:

普通的串口打印用法

QF_DebugPrintf("LCD Init Finish\r\n");

匿名上位机显示用法

while(1){
    for(uint16_t i=0;i<1000;i++){
        QF_Debug_SendData(i,0);
    }
}

匿名上位机配置

在连接设置里配置串口、COM号、波特率:

 之后打开协议解析

 点击高级收码设置

 按照如下配置即可

 点击波形显示

 打开之后进入波形设置,点击用户数据波形,点击确定勾选两个用户自定义默认数据。

之后在主界面的右下角点击打开连接即可显示波形