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