原子官方例程:
`if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
Res =USART_ReceiveData(USART1);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000)
{
if(Res!=0x0a)USART_RX_STA=0; //必須發0x0a
else USART_RX_STA|=0x8000;
}
else
{
if(Res==0x0d)USART_RX_STA|=0x4000; //必須發0x0d
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA(USART_REC_LEN1))
USART_RX_STA=0;
}
}
}
} `
有0xa,0x0b必須發,否則不認
//--------------------------串口通信初始化---------------------------------------------------
#include <windows.h>
HANDLE hCom = CreateFile(TEXT("COM4"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hCom == INVALID_HANDLE_VALUE)
{
cout << "打開COM失敗!" << endl;
return FALSE;
}
SetupComm(hCom, 1024, 1024);
COMMTIMEOUTS TimeOuts; //設定讀超時
TimeOuts.ReadIntervalTimeout = 1000;
TimeOuts.ReadTotalTimeoutMultiplier = 500;
TimeOuts.ReadTotalTimeoutConstant = 5000; //設定寫超時
TimeOuts.WriteTotalTimeoutMultiplier = 500;
TimeOuts.WriteTotalTimeoutConstant = 2000;
SetCommTimeouts(hCom, &TimeOuts); //設置超時
DCB dcb;
GetCommState(hCom, &dcb);
dcb.BaudRate = 9600; //波特率爲9600
dcb.ByteSize = 8; //每個字節有8位
dcb.Parity = NOPARITY; //無奇偶校驗位
dcb.StopBits = ONESTOPBIT; //一個停止位
SetCommState(hCom, &dcb);
PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);
a[0] = 100;
a[1] = -100;
a[2] = '\r';
a[3] = '\n';
WriteFile(hCom, a, 4, NUM, nullptr);
參考http://www.cnblogs.com/zahxz/archive/2012/12/24/2830535.html