单片机
返回首页

vofa+ : 优雅のSTM32串口调试

2025-11-06 来源:bilibili

0、前言

最近工作和电机的学习都要频繁打印数据来调试,但用过keil自带的那debug的都懂啊,用来看看寄存器和打断点就还行,数据监看就完全是顶级折磨,将近半秒钟才刷新一次,纯纯看个乐了。单纯监看数据的话,用串口无疑是更好的选择,比如xcom和sscom,常用的115200波特率就足以把数据闪电般打印出来。

虽然速度的问题解决了,但是看到这无穷无尽的数据长龙宛如看到了我的人生走马灯.....想要在其中找到某几个出问题的数据更无疑是大海捞针。但今天,一切都好起来了,因为一个维新派串口工具改变了一切。

1、工具介绍

本次的主角:vofa+,非常简单的一个串口工具,常见的串口功能都有,但既然它出现在了文章里就证明它没那么简单,是的,它有个非常逆天的功能:能自动将接收的数据通过绘图画出来。

www.vofa.plus/

官网下载软件,官网也有些教程,简单说就是软件提供了额外的两种接收功能,只要你发送的格式符合要求的话就能把数据画出来,效果如下,

这太酷了,完全符合我对串口工具的想象。

2、是的,我写了个库(

当然,也不是随便发个数据就能画的,作者为了实现自动绘图要求接收的数据要遵循某些格式,具体可以看功能选择那里。

可能有点抽象,但没事,哥们花了点时间简单写了两个函数,实现了傻瓜式使用,如下。

github.com/xiaocainiao11111/vofa_for_stm32

#include 'vofa.h'


// 按printf格式写,最后必须加rn

void Vofa_FireWater(const char *format, ...)

{

    uint8_t txBuffer[100];

    uint32_t n;

    va_list args;

    va_start(args, format);

    n = vsnprintf((char *)txBuffer, 100, format, args);


    //....在此替换你的串口发送函数...........

    HAL_UART_Transmit_DMA(&huart1, (uint8_t *)txBuffer, n);

    //......................................


    va_end(args);

}


// 输入个数和数组地址

void Vofa_JustFloat(float *_data, uint8_t _num)

{

    uint8_t tempData[100];

    uint8_t temp_end[4] = {0, 0, 0x80, 0x7F};

    float temp_copy[_num];


    memcpy(&temp_copy, _data, sizeof(float) * _num);


    memcpy(tempData, (uint8_t *)&temp_copy, sizeof(temp_copy));

    memcpy(&tempData[_num * 4], &temp_end[0], 4);


    //....在此替换你的串口发送函数...........

    HAL_UART_Transmit_DMA(&huart1, tempData, (_num + 1) * 4);

    //......................................

}


/*...........示例..............

    float f1=0.5,f2=114.514;

    Vofa_FireWater('%f,%frn', f1, f2);


    float f3[3]={88.77,0.66,55.44};

    Vofa_JustFloat(f3, 3);

*/


如上所示,非常简短的两个函数,对应两种传输模式。

原理也不难,就是一个知识点:如何使用uint8_t无损传输浮点型,这个以后有机会细说。

但要注意,虽然原理上支持所有以uint8_t为传输单位的芯片,但要根据自己的芯片库函数去替换掉上图的那两行串口传输函数,我的这个仅适用于hal库dma模式下的stm32芯片。

使用方法也很简单,添加到工程里就能用,可以参考我之前的文章。


3、例程

为了方便学习,我提供了三个例程源码,也是在上面的链接里,前两个是烧录器加小蓝板加串口的传统组合,这哥三大伙能看到这里的应该都有吧,第三个是esp32的程序,不需要用到上面提到的库,直接用printf就行。

例程1(最简单的演示): xiaocainiao11111/vofa_for_stm32 (github.com)

选择FireWater模式,点击连接,现象:三个数据在自增或自减


例程2(移植的稚晖君foc算法,开环速度参数演示):xiaocainiao11111/vofa_for_stm32 (github.com)

选择 JustFloat模式,点击连接,现象:有点奇怪的七对极foc演示


例程3(灯哥foc算法,也是开环速度): xiaocainiao11111/vofa_for_stm32 (github.com)

用的pio环境,现象:非常标准的120度相位差foc


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章