c++とstm 32シリアル通信
原子公式ルーチン:`if(USART_GetITStatus(USART 1,USART_IT_RXNE)!=RESET) { Res =USART_ReceiveData(USART1);
0 xaがあって、0 x 0 bは必ず出さなければならなくて、さもなくば認めません
リファレンスhttp://www.cnblogs.com/zahxz/archive/2012/12/24/2830535.html
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;
}
}
}
} `
0 xaがあって、0 x 0 bは必ず出さなければならなくて、さもなくば認めません
//-------------------------- ---------------------------------------------------
#include
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] = '
';
WriteFile(hCom, a, 4, NUM, nullptr);
リファレンスhttp://www.cnblogs.com/zahxz/archive/2012/12/24/2830535.html