|
這個像是Modbus通訊
1,當(dāng)串口接收到第1個數(shù)據(jù)時,啟動定時器,并把數(shù)據(jù)保存到緩沖池中
2,接收到結(jié)束符,并且一定時間之后,如果再沒接收到新的數(shù)據(jù),就認(rèn)為這是一個完整的數(shù)據(jù)幀
3,把緩沖池的數(shù)據(jù)復(fù)制到另一個緩沖池中,在主程序?qū)α硪粋緩沖池的數(shù)據(jù)進(jìn)行處理,因為有可能你在處理的時候,來了新的數(shù)據(jù),緩沖池的數(shù)據(jù)結(jié)構(gòu)就不一樣了,讀取出來的就不一定是原始的數(shù)據(jù)了
我一般用的是結(jié)構(gòu)struct //串口Buffer結(jié)構(gòu)
{
unsigned char buf_uart[32]; //留32個地址來存放串口的數(shù)據(jù)
unsigned char cnt_Byte; //接收到的字節(jié)數(shù)量
}Buffer0,Buffer1; //兩個結(jié)構(gòu)變量,讓串口接收和保存不相互影響
接收到一個完整的數(shù)據(jù)幀之后,就直接
Buffer1=Buffer0;//把串口緩存的數(shù)據(jù)復(fù)制過來
memset(&Buffer0,0,sizeof(Buffer0));//清除串口接收緩沖
STM32有足夠的能力處理串口這點小數(shù)據(jù)的
讀取數(shù)據(jù)出來不就是很簡單的事情嗎?就是直接讀取數(shù)組的數(shù)據(jù)而已,9#已經(jīng)給出方法了
|
|