2013-02-26 38 views
3

我正在使用一些嵌入式系統,我使用的是低端uC,即Atmega128。 我的系統還包括調制解調器,通過AT命令驅動。我試圖尋找任何適當的C庫(對於GCC),但找不到任何。雖然我知道將所有可能的AT命令集放到uC內存中,因此具有「通用」庫是不合理的(我只需要大約30個命令來進行整個操作),但我只需要獲得一些合適的(即,輕量級的,穩健的)控制機制,用於處理uC中傳輸和接收的UART串。 有沒有人知道任何經過驗證的庫或函數?或者,也許任何人都可以指點我一些很好的資源/建議?用於連接微控制器和AT調制解調器的C庫

+0

您是否想要與RS-232接口對話,或者您是否已具備此功能並需要捕獲UART字符串? – 2013-02-26 17:56:31

+0

我不需要UART的幫助,我已經使其工作。我需要程序設計方面的幫助。 :) – TomiL 2013-02-26 17:59:39

+2

AT命令集和協議非常簡單,您自己編寫代碼。 – Clifford 2013-02-26 23:38:06

回答

0

我希望你可能會使用這個GSM或GPRS調制解調器接口,假設你沒有指定應用程序。

摘要:GSM,GPRS調制解調器也使用AT命令接口與外部控制器進行通信。

http://ww1.microchip.com/downloads/en/AppNotes/01373A.pdf

void UART_Buf(void) 
{ 
     ch=SCI2D; 
     if(rx_buffer[2] == 'O' && rx_buffer[3] =='K') 
     { 
      rx_buffer[5] = '\0'; 
      msgindex=2; // code for OK 
      rx_wr_i=0;  
     } 
     if(rx_buffer[2] == 'B' && rx_buffer[3] =='U' && rx_buffer[4] == 'S' && rx_buffer[5] =='Y') 
     { 
      msgindex=3; // Code for Busy 
      rx_wr_i=0;  
     } 

     if(rx_buffer[2] == 'N' && rx_buffer[3] =='O' && rx_buffer[4] == ' ' && rx_buffer[5] =='C' && rx_buffer[6] =='A' && rx_buffer[7] =='R'&& rx_buffer[8] =='R' && rx_buffer[9] =='I' && rx_buffer[10] =='E' && rx_buffer[11] =='R') 
     { 
      msgindex=3; // Code for No Carrier 
      rx_wr_i=0;  
     } 
     if(rx_buffer[2] == 'E' && rx_buffer[3] =='R' && rx_buffer[4] == 'R' && rx_buffer[5] =='O' && rx_buffer[6] =='R') 
     { 
      msgindex=4; // Code for Error 
      rx_wr_i=0; 
     } 
     if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'M' && rx_buffer[5] =='S') 
     { 
      msgindex=3; 
     } 
     if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'M' && rx_buffer[5] =='E') 
     { 
      msgindex=3; 
     }  
     if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'M' && rx_buffer[5] =='G' && rx_buffer[6]== 'R') 
     { 
      msgindex=6; 
     } 

     if(rx_buffer[2]=='E' && rx_buffer[3]=='R' && rx_buffer[4] == 'R' && rx_buffer[5] =='O' && rx_buffer[6] == 'R') 
     { 
      msgindex=3; 
     } 

     if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'S' && rx_buffer[5] =='Q') 
     { 
      msgindex=7; 
     } 

     if(rx_buffer[2]=='+' && rx_buffer[3]=='C' && rx_buffer[4] == 'O' && rx_buffer[5] =='L'&& rx_buffer[6] =='P') 
     { 
     msgindex=8; 
     } 
     if(ch == '\r') 
      linefeed++; 
} 

和ISR

__interrupt void isrVsci2rx(void) 
{ 
     SCI2S1_RDRF = 0; 
     rx_buffer[rx_ack++]= SCI2D; 
     if(rx_ack>RX_BUFFER_MASK) 
     rx_ack=0; 
     UART_Buf(); 
     rx_length++; 

} 

檢查msgindex換行知道收到響應見詳細說明。