c++とstm 32シリアル通信

3073 ワード

原子公式ルーチン:`if(USART_GetITStatus(USART 1,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;  
            }        
        }
    }            
} `

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