串口接入檢測與串口命令解析


一 串口接入檢測的方法:

  如果單片機的串口RX引腳被設置成輸入下拉IPD,當串口線接入時,因為與RX對接的是對方的TX(復用推挽),測試來讀RX的話就為高電平,就可以更改模式,提醒單片機有串口接入!!!然后初始化串口將RX配置成浮動輸入,就可以利用串口進行收發了。

二串口命令解析:以下命令解析的技巧:

  2.1 只需要設置幀頭幀尾,中間部分的16進制就是結構體中的字符串(命令碼的字符串提示)

       2.2解析:先解析幀頭幀尾(有效數據才放入字符串),然后將接收的數據強制類型轉換成字符串,與結構體數組中的定義的每條命令字符串進行匹配,匹配成功就輸出對應的命令碼。

 

if(au8Buf[u8Length - 2] == 0x0D && au8Buf[u8Length - 1] == 0x0A)
{
  const struct SCmd {
    const char *m_szCmd;
    uint8 m_u8Cmd;
  } asCmd[] = {
{"\r\nON\r\n",ZMCOMM_START}, //0D 0A 4F 4E 0D 0A /*命令1*/
{"\r\nOFF\r\n",ZMCOMM_STOP}, //0D 0A 4F 46 46 0D 0A/*命令2*/
{"\r\nMODE=1\r\n",ZMCOMM_SPEED}, //0D 0A 4D 4F 44 45 3D 31 0D 0A
{"\r\nMODE=0\r\n",ZMCOMM_HIGH}, //0D 0A 4D 4F 44 45 3D 30 0D 0A
{"\r\nO=1\r\n",ZMCOMM_SIGNAL_DEST}, //0D 0A 4F 3D 31 0D 0A
{"\r\nO=2\r\n",ZMCOMM_SIGNAL_SPEED}, //0D 0A 4F 3D 32 0D 0A
{"\r\nDEBUG0\r\n",ZMCOMM_DEBUG0}, //0D 0A 44 45 42 55 47 30 0D 0A
{"\r\nDEBUG1\r\n",ZMCOMM_DEBUG1}, //0D 0A 44 45 42 55 47 31 0D 0A
{"\r\nMODE=2\r\n",ZMCOMM_DEGREE}, //0D 0A 4d 4f 44 45 3d 32 0D 0A
};
  for(uint8 u8Index = 0; u8Index < sizeof(asCmd)/sizeof(asCmd[0]); u8Index++)
  {
    const struct SCmd *psCmd = &asCmd[u8Index];
    uint8 u8Length = strlen(psCmd->m_szCmd);
    if(strncmp((const char*)au8Buf,psCmd->m_szCmd,u8Length) == 0)
    {
      uint8 u8Cmd = psCmd->m_u8Cmd;
      this->m_pListener->bOnZMComm(u8Cmd);
      break;
    }
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM