推荐一款我私藏已久的串口示波神器
大家好,我是小麥,實不相瞞,關于串口示波器軟件的文章,我之前寫過一期了,具體可以看這個項目《一個超贊的開源串口虛擬示波器項目,玩起來!》。
這是一款開源的Qt庫,非常簡單,容易上手,還能二次開發,所以我就強烈推薦給大家了。
之前發過一篇關于SVPWM的文章《對不起!這篇SVPWM來晚了!》,于是不少讀者朋友來詢問文中的串口示波器能否共享一下。
? ? ? ??
當然是可以的,這款軟件非常古老,但是卻出奇地好用,用小而美來形容,絲毫不過分。
這個軟件是上學時候,參加智能車比賽的時候用來調試PID的利器,大家之前,在時域上分析時間響應的曲線,就可以完美通過串口示波器工具來顯示,如果要采集的數據需要很高的采樣頻率,可以參考我這篇文章《一款超級好用的虛擬示波器軟件》。
隨著時間的推移,各種串口示波器軟件層出不窮,但是我還是在用這個軟件,下面我要開始安利了。
軟件功能
這是軟件主界面,支持的功能不是很多,但是完全夠用了;
主要特性如下:
最多支持四個通道;
支持拖動,縮放波形;
支持將波形數據保存為matlab數據;
支持實時跟蹤波形;
下面是我測試SVPWM生成的波形。
移植到所需平臺
通常單片機上需要通過串口往PC發送數據,PC接受數據并將接受的數據通過圖形顯示出來,這中間數據就需要遵循一定規則,即雙方約定好通訊協議。
所以下面我們來講一下在硬件上適配通訊協議。
這里是幾個文件列表,簡單看一下SDS.c和SDS.h
先看看頭文件SDS.h里的內容,只提供了一個接口,SDS_OutPut_Data,只需要調用這個函數就可以向上位機發送波形了。
#ifndef?SDS_H #define?SDS_H void?SDS_OutPut_Data(float?S_Out[]); #endif我們再看一下SDS.c文件里的內容,這里需要注意的地方是:
#define?uart_putchar(x)?usart_send_char(x)這里需要具體實現usart_send_char函數,要適配自己的硬件平臺。這里還做了CRC校驗,可以看一下CRC_CHECK函數;
以確保串口數據的可靠性。
具體源碼如下;
#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? }需要實現硬件相關的代碼。usart_send_char,本文基于STM32的串口進行測試的,具體代碼如下所示;
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);大功告成;
公眾號后臺回復【串口示波器】獲取。
—— The End?——
推薦好文??點擊藍色字體即可跳轉
??太牛了,國人純手工自制CPU,耗時半年,用了3000多個晶體管
??一個超級好用的插件—EIDE,在VSCODE下快速創建ARM工程
??如何在GitHub上白嫖代碼?先學會Git吧
??ARM與RISC-V的恩愛情仇
原創不易,歡迎轉發、留言、點贊、分享給你的朋友,感謝您的支持!
長按識別二維碼關注我
你點的每個好看,我都認真當成了喜歡
總結
以上是生活随笔為你收集整理的推荐一款我私藏已久的串口示波神器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 私藏的google浏览器插件
- 下一篇: 好工具,不私藏!介绍一个提高效率的利器