vofa+ : 优雅のSTM32串口调试

发布者:Xingfu8888最新更新时间:2025-11-06 来源: bilibili关键字:STM32  串口调试 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:STM32  串口调试 引用地址:vofa+ : 优雅のSTM32串口调试

上一篇:信息安全专题 | 代码保护(1)使用STM32H7新特性保护片上代码的机密性
下一篇:STM32CubeIDE使用说明_3 —— 实时调试

推荐阅读最新更新时间:2026-03-24 18:22

STM32 串口调试UART1,调试笔记1
Usart1重新初始化之后,再次发送数据的时候,就会死在 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 解决方法:注释掉原程序中的 // USART_ClearFlag(USART1, USART_FLAG_TC);
[单片机]
stm32串口调试卡死问题
且看这次出现的bug是一直等待, while(USART_GetFlagStatus(USE_Usart,USART_FLAG_TC)==RESET); 这个有很多说法 不过本人处理的方法是加入了一个一行代码就好了 NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
[单片机]
关于STM32串口调试RS485时自动进入接收中断
先说一下软硬件: 硬件:主控stm32c8t6、485芯片为隔离型芯片ADM2483,调试工具是usb转485接到PC端。 软件:采用库函数开发,开发工具为IAR 7.10,485接的是stm32的串口1(收发都是用中断方式),半双工模式, 协议是MODBUS RTU。 先说明本人是菜鸟,在不断得学习中,欢迎指出错误。 最近在调试RS485时发现一个问题,如果在串口初始化时就使能了发送中断和接收的话,那么在发送一个字节后就会自动进入接收中断。可能是收发的机制没有定好,所以后面采用的方式是在初始化时使能了接收中断,关闭发送中断,在需要发送数据的时候再开启发送中断,发送的时候关闭接收中断,发送完一帧再使能接收中断。这样就可以完整地发送
[单片机]
STC89C51单片机对LCD显示的串口调试关照强度程序设计
最近在调试传感器的那块程序,这里总结一下自己的心得。 调试程序的方法 方法1:led显示法,在程序中调用这一句函数led = 0;可以知道程序运行到哪里,为什么会出错,到什么地方陷入了死循环。 方法二:串口打印法,串口打印法可以知道函数输出的东西是什么,程序中只需要使用串口中断就可以了,关于串口怎么样使用,我觉得等一下我需要总结一下最近编程的问题。 现在这里要好好总结一下串口调试法,天祥哥在他的书上总结了串口调试的方法,开始的时候虽然开了一下,了解了他是什么情况,会用串口之外,其他的什么都不懂,到现在才真正明白串口中断的真正含义是什么,串口中断可以打断单片机的执行,让单片机在执行主函数的时候去执行别的函数。 // BH
[单片机]
STM32F103标准库开发---Uart串口通信实验---安装串口驱动和串口调试
串口调试器 USB转TTL实物图: 接口介绍: 串口驱动安装 双击串口驱动CH341SER.EXE安装软件 点击安装 安装成功 将串口调试器插入电脑,然后选择设备管理器,成功后的端口驱动如下: 串口调试助手 串口调试助手:sscom5.13.1 界面如下: 串口通信调试 1. 打开串口调试助手 双击sscom5.13.1.exe文件 2. 选择端口 设备管理器中是COM5 串口调试助手中选择COM5 3. 设置参数 数据具体如下: 4. 打开串口 点击打开串口 5. 调试现象 我单片机中程序的功能是:每100ms发送一次 工欲善其事,必先利其器。 具体现象如下:
[单片机]
STM32F103标准库开发---Uart串口通信实验---安装串口驱动和<font color='red'>串口调试</font>
IAR 串口调试,基于新唐n76e003的双串口透传程序设计
在解决好多bug后终于实现了双串口之间的相互收发,但是主管说写的程序很垃圾,但是终于能用了,还是很开心,在指导下会进一步修改,如果只是完成作业的话可以借鉴一下,话不多说,继续码上 在这里插入 //*********************************************************************************************************** // File Function: N76E003 UART-0 Mode1 demo code //************************************************************
[单片机]
msp430g2553-串口调试测试程序
/****************************************************************************** 本程序是单片机 MSP430G2553 P1.2----------------------------UCA0TXD 串口发送端 P1.1----------------------------UCA0RXD 串口接受端 P1.0---------------------------- 红灯指示 P1.6---------------------------- 绿灯指示 利用主辅时钟为 1MHZ ,串口波特率 9600 , 波特率: 1000000/9600=104 UC
[单片机]
STM32CubeMx启动串口调试功能Printf调试
## 概述 项目中往往需要调试信息,调试stm32的时候,需要标准库里面的printf函数。在keil MDK环境下重定向printf与keil C51不同,由于本人使用了STM32CubeMX生成工程模板,HAL_USART_Transmit函数即是模板里串口输出的函数。由于printf最终是调用fputc输出数据,fputc是一个弱引用(weak)函数,覆写即可重定向printf。 代码清单 /* USER CODE BEGIN Includes */ #include FreeRTOS.h #include task.h #include queue.h #include stdio.h /* USER CODE
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved