本篇,以最常用的串口通信作展示,示范如何通過VOFA+顯示數據波形。
一、VOFA+?下載
VOFA+?是一款面向嵌入式開發的上位機軟件,專注于硬件數據實時可視化與調試。它通過高效協議(如FireWater、JustFloat)將原始字節流轉化為動態圖形(波形圖、3D控件等),兼具高性能通信(串口/網口)與零代碼可視化優勢。
軟件提供全功能免費版本,無注冊限制。
官網下載:https://www.vofa.plus
二、數據格式
1、數據協議種類
VOFA+,支持三種數據協議。
- FireWater:默認且最常用。功能強大,即能作為串口助手顯示文本數據,也能解析并顯示波形。
- JustFloat:?專為超高頻率的浮點數據傳輸優化。用于極高刷新率的波形顯示場景。較少用到。
- RawData:?純粹的串口助手模式。僅顯示原始數據(文本、16進制)。不解析數據,因此無法顯示波形。
本篇將重點介紹最常用的?FireWater?協議。
2、FireWater 數據格式詳解
FireWater 協議的核心思想是將數據點(通常是數值)嵌入到字符串幀中,VOFA+ 通過識別特定的分隔符來提取這些數據點并繪制波形。
它提供兩種靈活的格式以適應不同場景:
- 方式1:"<any>:ch0,ch1,ch2,......chN\n"
- 方式2:"ch0,ch1,ch2,......chN\n"
格式解釋:
- <any> 指任意前綴文本,?可以是任何字符組合?(英文字母、中文、符號、空格等),這部分內容會原樣顯示在VOFA+的“數據”區域,方便閱讀調試信息、時間戳、標簽等。
- 方式1中,<any>與數據之間,用英文的冒號":"作分隔!它是關鍵分隔符!VOFA+通過尋找第一個冒號來識別數據的開始位置。如果缺少這個冒號,或使用了中文冒號(:),該幀只能顯示文本,無法解析波形。
- 方式2中,沒有<any>,無需":"分隔符。
- ch0,ch1,ch2,......chN:?是實際的數據點,通常是整數、浮點數。每個chX代表1個通道的值。
- 數據點之間,用英文的分號","作分隔!它是關鍵分隔符!
- 數據點之間(逗號周圍),允許存在任意空格。例如 "23.5, 24.0\n"? 或 " 23.5? ,?? ? ?24.0? \n",都有效。
- 每幀數據,以"\n"結尾。它是幀結束標志!VOFA+ 只有檢測到換行符?
\n
,才會開始處理這一幀數據(顯示文本并解析波形)。為了提高兼容性,強烈建議使用 "\r\n" 作為行結尾。
下面三個例子,都是有效示范:
printf("samples:1.1,3.2,-0.6,-0.9\n");printf("第%d幀數據: %4.3f,? %04d,? %d? \r\n", myCNT, myFloat, myValue1, myValue5);printf("?%4.3f, ? ? ? ? ? ? %4.3f, %4.3f ? ? \r\n",? v0,? v1,? v2);
三、VOFA+?操作步驟
我們先看看STM32程序的示例,和數據在普通串口助手中的輸出。
如下圖,很簡潔的ADC數據,每1s通過printf (已重定向UART1) 輸出一次。
在串口助手XCOM中,輸出如下:
程序的輸出,能夠在串口助手XCOM中正常輸出。這些都是最基礎、最常用的調試操作。
現在,關掉串口助手(必須關掉,不然它會占用端口,VOFA+無法檢測到對應的端口)。
1、VOFA+ 與主流串口助手的操作區別
VOFA+的界面設計,與常用的串口助手有所不同。第一次使用時,可能會有點手足無措。
把它當成一個加強版本的串口助手即可。
最常用的參數配置,如下:
- 數據引擎:FireWater (默認)
- 數據接口:串口(默認)
- 串口參數:如同其它主流串口助手,默認即可
重點:連接按鈕(打開串口),在左上角!
2、數據顯示
點擊?VOFA+ 的連接按鈕(打開串口),按鈕會從深藍色,切換為淺藍色狀態。
當有數據傳輸時,這個按鈕還會閃爍提示!
連接后,狀態如下圖。
- 下方:顯示原始數據;?
- 右側:是VOFA+的解析數據;?它們后面可以被添加到控件中顯示。
不能顯示數據的解決
連接打開后,不能顯示數據時,依次檢查:
- 端口號、波特率 等通信參數 (用其它串口助手,跑一次相同參數,看看是否能收到數據);
- 檢查下圖中這個選項 (很多人坑在這個位置);
3、波形顯示
① 添加 波形控件
在控件區,把需要的控件,拖到右方顯示區。
②?填充方式
右擊控件,選擇填充方式,一般用全填充。
③?添加通道
右擊控件,Y軸,選擇需要的通道。
能用的通道,就是右側那些解析出來的通道。可以單個選擇,也可以All 全部添加!
④?調整波形
剛顯示出來的數據,如圖,很多時候是"不太好看"。
一般通過如下3個調整,可以把波形合適地顯示出來。
(下圖為了清晰地展示效果,只保留一個通道的波形)