在串口接收的時候,有些通訊每一幀數據有幀頭尾標識,這種情況比較好判定。
但是也有些情況是,頭尾沒有固定的標識,也不知道一幀有多少字節,
那么我們只能靠檢測幀之間的間隔來判斷是不是幀完成了
例串口設置:9600波特率、8個數據位、1個停止位、無校驗。
9600波特率表示,每秒傳輸9600個位,即每秒傳輸9600/(8位數據位+1位停止)=1066字節,
那么每秒傳輸一個字節的時間就是:1/1066=9.38*10^-4s≈0.94ms;
考慮硬件的損耗,保證數據傳輸的可靠性,留出余量,假設一個字節的傳輸時間為2ms。
那么我們就可以配置定時器,通過對時間的判斷識別接收一幀未知長度的串口數據,
以定時2ms來說,當接收到一個字節的時候,我們打開定時器,開始計時,定時周期2ms。
如果過了2ms,沒有新數據,那么我們認為一幀數據接收完成。
如果在2ms這個時間內,有新數據到來,那么我們認為是同一幀數據,此時定時器計數清零,重新計數。
初始化定義:一個足夠大數組和一個記錄字節數的變量。