樹莓派3b接收USB串列埠資料並解析處理

2021-10-08 18:51:18 字數 2898 閱讀 6567

通過樹莓派3b使用wiringpi接收串列埠資料,並對幀頭幀尾進行判斷,解析出符合幀協議的資料。

我們在這裡定義串列埠資料的幀頭為 0x3a 0x3b,幀尾為 0x7e 0x7f一幀最大的長度為 10個位元組

幀頭幀尾格式可自行更改。

// 最大幀長度

#define maxframelength 10 // 對最大幀長度加以限定,防止接收到過長的幀資料

// 完整的幀頭,2個位元組

#define frame_header1 0x3a // 串列埠接收訊息包的幀頭的第1個位元組

#define frame_header2 0x3b // 串列埠接收訊息包的幀頭的第2個位元組

// 完整的幀尾,2個位元組

#define frame_tail1 0x7e // 串列埠接收訊息包的幀尾的第1個位元組

#define frame_tail2 0x7f // 串列埠接收訊息包的幀尾的第2個位元組

接收到符合幀協議的資料,使用者處理在這裡定義。

其中 /* */ 分割的地方為使用者處理**。

我寫的是將接收到的資料發回去,並重新等待接收下一幀。使用者可根據需求自行更改。

/* 使用者處理** */

/* 將接收到符合幀定義的幀,原路傳送回去 */

int i = 0;

for (i = 0; i < (tnum + 1); i++)

/* 處理完使用者**,重新接收計數 */

tnum = 0;

這裡對自己使用的串列埠進行更改,我使用的是usb串列埠,波特率115200,cp2102免驅。

//hs1 = serialopen("/dev/ttys0", 115200);     // 開啟 /dev/ttys0 串列埠裝置,波特率115200

hs1 = serialopen("/dev/ttyusb0", 115200); // 開啟 /dev/ttyusb0 串列埠裝置,波特率115200

樹莓派使用usb串列埠教程:樹莓派使用usb串列埠

github倉庫:樹莓派-串列埠解析**

#include #include #include // 最大幀長度

#define maxframelength 10 // 對最大幀長度加以限定,防止接收到過長的幀資料

// 完整的幀頭,2個位元組

#define frame_header1 0x3a // 串列埠接收訊息包的幀頭的第1個位元組

#define frame_header2 0x3b // 串列埠接收訊息包的幀頭的第2個位元組

// 完整的幀尾,2個位元組

#define frame_tail1 0x7e // 串列埠接收訊息包的幀尾的第1個位元組

#define frame_tail2 0x7f // 串列埠接收訊息包的幀尾的第2個位元組

int main(void)

/* 處理完使用者**,重新接收計數 */

tnum = 0;

}else

}else // 有幀頭,無幀尾1

else // 接收訊息包中間內容}}

else // 沒有接收到幀頭

else

}else //沒有幀頭,沒有有幀頭1。下一步判斷,是否為幀頭的第1個位元組

else // 否則,標誌位清0,tnum清0}}

// 大於maxframelength個位元組的幀不接收

if (tnum > (maxframelength - 1) )}}

return 0;

}

使用ftp傳送到樹莓派中,編譯、執行:

pi@raspberrypi:~/demo/serial/c_demo $ gcc serial.c -o serial -l wiringpi

pi@raspberrypi:~/demo/serial/c_demo $ ./serial

開啟串列埠除錯助手,波特率115200,收發均為16進製制顯示。

傳送 3a 3b 11 12 12 20 7e 7f。只要是幀頭為 3a 3b,幀尾為7e 7f都可以。要跟自定義的幀協議一致。

之後接收到相同的資料。現象正確。幀頭幀尾解析正確

將幀尾改一下,使其不符合幀格式,傳送後無返回。現象正確。幀頭幀尾解析正確

傳送乙個11位元組長度的資料,驗證最大幀長度的判斷是否有用。

下方的收發記錄顯示,傳送了11位元組資料,並沒有返回。最大幀長度的判斷有效

幀長度為10時,收發一致,現象正確。最大幀長度的判斷有效

樹莓派3B 的串列埠使用

摘要 我們在使用樹莓派做串列埠開發時,需要深入了解樹莓派的串列埠,具體的參考官方文件見 簡單介紹 樹莓派有兩個內建串列埠,乙個是pl011 uart,乙個是mini uart。這兩個串列埠都由不同的硬體模組實現,所有稍微有些不同,但都是3.3v電壓的串列埠。預設情況下,pl011 uart連線了藍芽...

樹莓派3b 安裝

2019獨角獸企業重金招聘python工程師標準 一 貼散熱片 背面一片,正面兩篇。二 系統安裝 1 使用sd formatter格式化sd卡 2 使用win32diskimager寫入映象 3 將樹莓派連上電視 鍵盤 電源啟動 4 設定一些引數,連上網路。三 設定 1 在首選項中rasberry ...

樹莓派3B 安裝

之前買的樹莓派3b的板子,發現密碼忘記了,死活連線不上。通過hdmi外接顯示屏,預期的桌面系統也沒有出現。可能是hdmi的一些配置引數問題吧,懶得糾結了直接重新刷系統,系統也有了一些改動。下面開始重新刷系統之路,補充一下一些填坑之路,供自己回顧。選購及安裝參考 備註一下 散熱器 樹莓派發熱還是有點嚴...