c++與stm32串口通信

原子官方例程:
`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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章