通過樹莓派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的一些配置引數問題吧,懶得糾結了直接重新刷系統,系統也有了一些改動。下面開始重新刷系統之路,補充一下一些填坑之路,供自己回顧。選購及安裝參考 備註一下 散熱器 樹莓派發熱還是有點嚴...