首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > Wireless >

S3C2410没法接受GPRS AT返回命令

2013-01-04 
S3C2410无法接受GPRS AT返回命令用S3C2410向MC35I 模块发送AT命令,想接受到OK并在超级终端上显示OK,但是无

S3C2410无法接受GPRS AT返回命令
    用S3C2410向MC35I 模块发送AT命令,想接受到OK并在超级终端上显示OK,但是无法接受到。S3C2410的COM0与PC机串口1相连,S3C2410的COM1与MC35I 相连。操作系统是UCOS-II,部分程序如下:

#include "includes.h"
#include "frmwrk.h"
#include "consol.h"
#include  "mmu.h"
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>



#defineRX_BUF_SIZE1024
static char rx_buf[RX_BUF_SIZE];
static U16 rx_buf_head, rx_buf_tail;

#defineRX_BUF_EMPTY()(rx_buf_head==rx_buf_tail)
#defineRX_BUF_INC()(rx_buf_head = (rx_buf_head+1)&(RX_BUF_SIZE-1));
#defineRX_BUF_DEC()(rx_buf_tail = (rx_buf_tail+1)&(RX_BUF_SIZE-1));

void putch(char ch)
{
CONSOL_SendChar(ch);//COM0发送数据函数

}


void EnableIrq(int bit)
{
rINTMSK &= ~(bit);
}

void DisableIrq(int bit)
{
rINTMSK |= (bit);
}




//串口1接收中断处理
static void __irq Uart1RxInt(void)
{
    ClearSubPending(BIT_SUB_RXD1); //rSUBSRCPND = BIT_SUB_RXD0;          //Clear pending bit (Requested)
    ClearPending(BIT_UART1);

printf("URT1 rx interrupt!\n");
rx_buf[rx_buf_head] = RdURXH1();
RX_BUF_INC();
if(RX_BUF_EMPTY())
RX_BUF_DEC();
}

static void Echo_Rx_Data(void)
{
while(!RX_BUF_EMPTY()) {
putch(rx_buf[rx_buf_tail]);
RX_BUF_DEC();
}
}

/****************************************************************************
【功能说明】串口发送命令字符串并等待回显
****************************************************************************/
void GPRS_Cmd( char *pt )
{
int i=0;
while( pt[i] )
{
CONSOL_Select(1) ;//选择UART通道为串口1

CONSOL_SendChar( pt[i] );

CONSOL_Select( 0 ) ;//选择UART通道为串口0

i++;
}

OSTimeDly(10);
Echo_Rx_Data();
}

//****************************************************************************
【功能说明】设置开发平台的串口1波特率
****************************************************************************/
void Test_GPRS_Init()

printf("Initialize GPRS modem...\n");

rGPGCON &= ~((3<<4)|(3<<12));
rGPGCON |= (1<<4)|(1<<12);
rGPGDAT &= ~(1<<2);
rGPGDAT &= ~(1<<6);

rGPHCON |= 0xf<<12;//RTS1, CTS1
    rGPHUP  |= 3<<6;//Uart port pull-up disable


CONSOL_Select(1) ;//选择UART通道为串口1
CONSOL_Init(115200);
CONSOL_Select( 0 ) ;//选择UART通道为串口0

rx_buf_head = rx_buf_tail = 0;

   pISR_UART1 = (U32)Uart1RxInt;//串口接收数据中断
ClearSubPending(BIT_SUB_RXD1);
ClearPending(BIT_UART1);
EnableSubIrq(BIT_SUB_RXD1);
EnableIrq(BIT_UART1);

GPRS_Cmd("AT\n");
OSTimeDly(500);

static void Test_GPRS_Exit(void)
{
   DisableSubIrq(BIT_SUB_RXD1);
DisableIrq(BIT_UART1);
}

/****************************************************************************
【功能说明】发送短信
****************************************************************************/
static void GPRS_MGS(char *number, char *text)


{
GPRS_Cmd("AT\r");
OSTimeDly(500);

GPRS_Cmd("AT+CMGF=1\r");//发送修改字符集命令,TEXT模式
OSTimeDly(500);
GPRS_Cmd("AT+CMGS=");//发送发短信命令
GPRS_Cmd(number);
GPRS_Cmd("\n");

GPRS_Cmd(text);

CONSOL_Select(1) ;//选择UART通道为串口1
CONSOL_SendChar( 26 ); //"CTRL+Z"的ASCII码
CONSOL_Select(1) ;//选择UART通道为串口1

OSTimeDly(100);
Echo_Rx_Data();
}

/****************************************************************************
【功能说明】输入一组数字用作电话号码
****************************************************************************/
/*static int InputNumber(char *num)
{
int key;
int i=0;

for(i=0; i<20; i++)
num[i] = 0;
i = 0;

printf("Please input the number:\n");
while(1)
{
key = getch();
switch(key)
{
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    num[i++] = key;
printf("%c",key);
break;
case ENTER_KEY://数字输入完毕
//num[i++] = key;
return i;
break;
default://数字输入错误!!!
printf( "输入错误,请重新输入!!!\n");
return 0;
break ;
    }
}
}
*/
/****************************************************************************
【功能说明】GPRS模块Q2403实验程序
****************************************************************************/
void Test_GPRS_Q2403(void)
{
    Test_GPRS_Init();

    Test_GPRS_Exit();
}

void Task2(void *data)
{
  

   data = data;                            /* Prevent compiler warning */

    
   for(;;)
   {
       
      CONSOL_Printf("GPRS Test,please Enter 'ESC'to exit\n");
      Test_GPRS_Q2403();
      OSTimeDly(200);
   }

}



[解决办法]
首先直接用PC通过串口 发送AT指令,验证下你的模块是否正确,并验证你的AT指令是否用对了
[解决办法]
2410的串口 你要主要 COM0是带CTS和RTS的 而COM1是不带CTS和RTS的 如果你要用GPRS不只用三根线 所以要用COM0和MC35I 连接  COM1和PC连接
[解决办法]
看看串口线连接正常不?直通?交联?

热点排行