【问题标题】:C library for interfacing microcontroller and AT modem用于连接微控制器和 AT 调制解调器的 C 库
【发布时间】:2013-02-12 07:21:16
【问题描述】:

我正在开发一些嵌入式系统,我在其中使用低端 uC,即 Atmega128。 我的系统还包括调制解调器,通过 AT 命令驱动。我试图寻找任何合适的 C 库(用于 GCC),但找不到。虽然我知道将“所有”可能的 AT 命令集放入 uC 内存中,因此拥有“通用”库是不合理的(整个操作我只需要大约 30 个命令),我只需要获得一些合适的(即 轻量级,健壮) 控制机制,用于在 uC 中处理发送和接收的 UART 字符串。 有人知道任何经过验证的库或功能吗?或者,也许有人可以向我指出一些好的资源/建议?

【问题讨论】:

  • 您想要与 RS-232 接口通信的能力,还是您已经具备这种能力并需要捕获 UART 字符串?
  • 我不需要 UART 方面的帮助,我已经让它工作了。我需要程序设计方面的帮助。 :)
  • 见:git.ozlabs.org/?p=ppp.git;a=blob;f=chat/chat.c;hb=HEAD 你没有说什么许可证。我认为chat.c 是 BSD。
  • ATcommands 只需要简单的串行传输,这就是为什么不需要库的原因,我自己用 SIM900 模块做了很多,XBee 等从未想过需要它。

标签: gcc embedded microcontroller modem uart


【解决方案1】:

我希望你可以将它用于 GSM 或 GPRS 调制解调器接口,假设你没有指定应用程序。

简介:GSM、GPRS 调制解调器也使用 AT 命令接口与外部控制器通信。

在这里查看详细说明:

Microchip AN1373 - Using PIC32 MCUs to Develop GSM/GPRS/GPS Solutions

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++;
  
}

检查 msgindexlinefeed 以了解收到的响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多