推荐一款我私藏已久的串口示波神器
大家好,我是小麥,實不相瞞,關(guān)于串口示波器軟件的文章,我之前寫過一期了,具體可以看這個項目《一個超贊的開源串口虛擬示波器項目,玩起來!》。
這是一款開源的Qt庫,非常簡單,容易上手,還能二次開發(fā),所以我就強(qiáng)烈推薦給大家了。
之前發(fā)過一篇關(guān)于SVPWM的文章《對不起!這篇SVPWM來晚了!》,于是不少讀者朋友來詢問文中的串口示波器能否共享一下。
? ? ? ??
當(dāng)然是可以的,這款軟件非常古老,但是卻出奇地好用,用小而美來形容,絲毫不過分。
這個軟件是上學(xué)時候,參加智能車比賽的時候用來調(diào)試PID的利器,大家之前,在時域上分析時間響應(yīng)的曲線,就可以完美通過串口示波器工具來顯示,如果要采集的數(shù)據(jù)需要很高的采樣頻率,可以參考我這篇文章《一款超級好用的虛擬示波器軟件》。
隨著時間的推移,各種串口示波器軟件層出不窮,但是我還是在用這個軟件,下面我要開始安利了。
軟件功能
這是軟件主界面,支持的功能不是很多,但是完全夠用了;
主要特性如下:
最多支持四個通道;
支持拖動,縮放波形;
支持將波形數(shù)據(jù)保存為matlab數(shù)據(jù);
支持實時跟蹤波形;
下面是我測試SVPWM生成的波形。
移植到所需平臺
通常單片機(jī)上需要通過串口往PC發(fā)送數(shù)據(jù),PC接受數(shù)據(jù)并將接受的數(shù)據(jù)通過圖形顯示出來,這中間數(shù)據(jù)就需要遵循一定規(guī)則,即雙方約定好通訊協(xié)議。
所以下面我們來講一下在硬件上適配通訊協(xié)議。
這里是幾個文件列表,簡單看一下SDS.c和SDS.h
先看看頭文件SDS.h里的內(nèi)容,只提供了一個接口,SDS_OutPut_Data,只需要調(diào)用這個函數(shù)就可以向上位機(jī)發(fā)送波形了。
#ifndef?SDS_H #define?SDS_H void?SDS_OutPut_Data(float?S_Out[]); #endif我們再看一下SDS.c文件里的內(nèi)容,這里需要注意的地方是:
#define?uart_putchar(x)?usart_send_char(x)這里需要具體實現(xiàn)usart_send_char函數(shù),要適配自己的硬件平臺。這里還做了CRC校驗,可以看一下CRC_CHECK函數(shù);
以確保串口數(shù)據(jù)的可靠性。
具體源碼如下;
#include?"SDS.h" #include?"usart_driver.h" //#include?"uart.h"??//LINK?TO?UART#define?uart_putchar(x)?usart_send_char(x)//float?SDS_OutData[4]?=?{?0?};unsigned?short?CRC_CHECK(unsigned?char?*Buf,?unsigned?char?CRC_CNT) {unsigned?short?CRC_Temp;unsigned?char?i,j;CRC_Temp?=?0xffff;for?(i=0;i<CRC_CNT;?i++){??????CRC_Temp?^=?Buf[i%CRC_CNT];for?(j=0;j<8;j++)?{if?(CRC_Temp?&?0x01)CRC_Temp?=?(CRC_Temp?>>1?)?^?0xa001;elseCRC_Temp?=?CRC_Temp?>>?1;}}return(CRC_Temp); }void?SDS_OutPut_Data(float?S_Out[]) {int?temp[4]?=?{0};unsigned?int?temp1[4]?=?{0};unsigned?char?databuf[10]?=?{0};unsigned?char?i;unsigned?short?CRC16?=?0;?float?SDS_OutData[4];for(i=0;i<4;i++)?{SDS_OutData[i%4]=S_Out[i%4];}for(i=0;i<4;i++){temp[i%4]??=?(int)SDS_OutData[i%4];temp1[i%4]?=?(unsigned?int)temp[i%4];}for(i=0;i<4;i++)?{databuf[(i*2)%10]???=?(unsigned?char)(temp1[i%4]%256);databuf[(i*2+1)%10]?=?(unsigned?char)(temp1[i%4]/256);}CRC16?=?CRC_CHECK(databuf,8);databuf[8]?=?CRC16%256;databuf[9]?=?CRC16/256;for(i=0;i<10;i++)uart_putchar(databuf[i%10]);??//LINK?TO?UART? }需要實現(xiàn)硬件相關(guān)的代碼。usart_send_char,本文基于STM32的串口進(jìn)行測試的,具體代碼如下所示;
void?usart_send_char(char?ch){/*?Loop?until?the?end?of?transmission?*///while?(USART_GetFlagStatus(COM_PORT,?USART_FLAG_TC)?==?RESET){}while((COM_PORT->SR?&?USART_FLAG_TC)?!=?USART_FLAG_TC){}?USART_SendData(COM_PORT,?(uint8_t)?ch); }最后怎么使用呢?
float?user_data[4]?=?{?0?}; user_data[0]?=?sv_regs.ccr1; user_data[1]?=?sv_regs.ccr2; user_data[2]?=?sv_regs.ccr3; user_data[3]?=?svpwm.VecSector*1000; SDS_OutPut_Data(user_data);大功告成;
公眾號后臺回復(fù)【串口示波器】獲取。
—— The End?——
推薦好文??點擊藍(lán)色字體即可跳轉(zhuǎn)
??太牛了,國人純手工自制CPU,耗時半年,用了3000多個晶體管
??一個超級好用的插件—EIDE,在VSCODE下快速創(chuàng)建ARM工程
??如何在GitHub上白嫖代碼?先學(xué)會Git吧
??ARM與RISC-V的恩愛情仇
原創(chuàng)不易,歡迎轉(zhuǎn)發(fā)、留言、點贊、分享給你的朋友,感謝您的支持!
長按識別二維碼關(guān)注我
你點的每個好看,我都認(rèn)真當(dāng)成了喜歡
總結(jié)
以上是生活随笔為你收集整理的推荐一款我私藏已久的串口示波神器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 私藏的google浏览器插件
- 下一篇: 好工具,不私藏!介绍一个提高效率的利器