標題: 2440裸機編程之十一 GPRS [打印本頁]
作者: aabbcc 時間: 2014-11-12 13:36
標題: 2440裸機編程之十一 GPRS
GPRS (General Packet Radio Service)是一種基于包的無線通訊服務。它將使得通訊速率從56一直上升到114Kbps,并且支持計算機和移動用戶的持續連接。較高的數據吞吐能力使得可以使用手持設備和筆記本電腦進行電視會議和多媒體頁面以及類似的應用。GPRS是基于Global System for Mobile(GSM),并且能完成現有的一些服務,例如:蜂窩電話電路交換(circuit-switched)連接和短消息服務(SMS)。
GPS/GPRS 的AT命令是對早期調制解調器AT命令的一個擴充,在早其AT命令的基礎上加上對GSM/GPRS業務支持的擴展AT命令集,擴展AT命令集基本格式為“AT+”+命令字符及相關設置參數。
一、GPRS模塊通過串口和PC機相連,用超級終端測試AT指令:

應答
AT
返回:OK
讀取日期時間
AT+CCLK?
返回:+CCLK: "02/01/01,00:29:55"
撥打電話
ATDT電話號碼;
讀取設備名稱
AT+GMI
返回:SIEMENS
讀取軟件名稱
AT+GMM
返回:MC39i
讀取信號強度
AT+CSQ
返回:+CSQ: 28,99
讀取電話簿用戶
AT+CPBR=1,2
返回:
+CPBR: 1,"137xxxx9236",129," "
+CPBR: 2,"138xxxx6183",129," "
單條讀取短信
AT+CMGR=5
返回:
+CMGR: 1,,44
0891683108200205F0240D91683115829952F000080111615184202318989876EEFF1F62114E0D6E
05695A30026D176FA14E0DFF1F
下面用超級終端發送一條短信:
AT<CR>
OK
AT+CMGF=1<CR> (發送修改字符集命令,TEXT模式)
OK
AT+CSMP=17,167,0,0<CR> (設置文本模式的參數)
OK
AT+CSCS=GSM<CR>
OK
AT+CMGS=159xxxx9928<CR> (發送發短信命令)
><SP>Hello!How are you?<CTRL+Z> (發送短信內容)
+CMGS: 86
OK
發送成功

二、利用2440的串口接GPRS模塊實驗

程序:
//***********************************************************************************
//***********************************************************************************
/*
*********************************************************
* 變量
*********************************************************
*/
char sms[50];
/*
*********************************************************
* 函數介紹:本函數被使用來做測試串口傳輸數據的功能。
* 輸入參數:無
* 輸出參數:無
* 返回值 :無
*********************************************************
*/
//***************************************************************************
#define RX_BUF_SIZE 1024
static char rx_buf[RX_BUF_SIZE];
static U16 rx_buf_head, rx_buf_tail;
#define RX_BUF_EMPTY() (rx_buf_head==rx_buf_tail)
#define RX_BUF_INC() (rx_buf_head = (rx_buf_head+1)&(RX_BUF_SIZE-1));
#define RX_BUF_DEC() (rx_buf_tail = (rx_buf_tail+1)&(RX_BUF_SIZE-1));
//串口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()) {
Uart_SendByte(rx_buf[rx_buf_tail]);
RX_BUF_DEC();
}
}
/****************************************************************************
【功能說明】串口發送命令字符串并等待回顯
****************************************************************************/
void GPRS_Cmd( char *pt )
{
Uart_Select( 1 ) ; //選擇UART通道為串口1
Uart_Printf( pt );
Uart_Select( 0 ) ; //選擇UART通道為串口0
Delay(10);
Echo_Rx_Data();
}
/****************************************************************************
【功能說明】初始化開發平臺
****************************************************************************/
void GPRS_Init(void)
{
U32 mpll_val = 0 ;
Port_Init(); //端口初始化
Isr_Init(); //中斷初始化
mpll_val = (92<<12)|(1<<4)|(1);
//init FCLK=400M, so change MPLL first
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(14, 12);
cal_cpu_bus_clk();
Uart_Init(0,0,115200); //串口初始化 波特率為115200
Uart_Init(0,1,115200);
Uart_Select(0); //選者串口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);
Clk0_Disable();
Clk1_Disable();
}
/****************************************************************************
【功能說明】發送掛機命令ATH
****************************************************************************/
void GPRS_HOLD()
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATH\r");
}
/****************************************************************************
【功能說明】發送接聽命令ATA
****************************************************************************/
void GPRS_ANSWER()
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATA\r");
}
/****************************************************************************
【功能說明】發送撥打命令ATDT
****************************************************************************/
void GPRS_CALL(char *number)
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("ATDT");
GPRS_Cmd(number);
GPRS_Cmd(";\r");
}
/****************************************************************************
【功能說明】發送短信
****************************************************************************/
static void GPRS_MGS(char *number, char *text)
{
GPRS_Cmd("AT\r");
Delay(500);
GPRS_Cmd("AT+CMGF=1\r");//發送修改字符集命令,TEXT模式
Delay(500);
GPRS_Cmd("AT+CSMP=17,167,0,0\r");//設置文本模式的參數。
Delay(500);
GPRS_Cmd("AT+CSCS=GSM\r");
Delay(500);
GPRS_Cmd("AT+CMGS=\""); //發送發短信命令
GPRS_Cmd(number);
GPRS_Cmd("\"\r");
Delay(500);
GPRS_Cmd(text);
Uart_Select( 1 ) ; //選擇UART通道為串口1
Uart_SendByte( 26 ); //"CTRL+Z"的ASCII碼
Uart_Select( 0 ) ; //選擇UART通道為串口0
Delay(100);
Echo_Rx_Data();
Delay(5000); //等待5秒
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 = Uart_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;
Uart_Printf("%c",key);
break;
case ENTER_KEY: //數字輸入完畢
//num[i++] = key;
return i;
break;
default: //數字輸入錯誤!!!
Uart_Printf( "輸入錯誤,請重新輸入!!!\n");
return 0;
break ;
}
}
}
/****************************************************************************
【功能說明】GPRS模塊Q2403實驗程序
****************************************************************************/
void Main(void)
{
U16 key ;
char number[20];
GPRS_Init();
Test_Again:
Uart_Printf( "\nGSM/GPRS TEST, press ESC key to exit !\n" ) ;
Uart_Printf(" 1 : Send sh1111111ort message\n");
Uart_Printf(" 2 : Call the number\n");
Uart_Printf(" 3 : Ring off\n");
Uart_Printf(" 4 : Pick up\n");
while(1)
{
key = Uart_Getch();
if(key==ESC_KEY)
break;
/* if(key) {
putch(key);
WrUTXH1(key);
}
*/
Echo_Rx_Data();
switch( key )
{
case '1':
Uart_Printf("Send short message\t\t\n");
Uart_Printf("Please enter the phone number:\n");
if( !InputNumber(number) )break;
Uart_Printf("\nPlease enter the context in English:\n");
Uart_GetString(sms);
Uart_Printf("\nNow send short message...\n");
GPRS_MGS(number,sms);
//printf("\n");
//break;
goto Test_Again;
case '2':
Uart_Printf("Call the number\t\t\n");
Uart_Printf("Please enter the phone number.\n");
if( !InputNumber(number) ) break;
Uart_Printf("\nNow send a call...\n");
GPRS_CALL(number);
//printf("\n");
//break;
goto Test_Again;
case '3': Uart_Printf("Ring off\t\t\n");
GPRS_HOLD();
//break;
goto Test_Again;
case '4': Uart_Printf("Pick up\t\t\n");
GPRS_ANSWER();
//break;
goto Test_Again;
}
}
}
//***********************************************************************************
//***********************************************************************************
實驗結果:

作者: ahljj 時間: 2015-9-11 19:11
2440裸機編程之十一 GPRS
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
九九久久免费视频
|
二区在线视频
|
a在线观看免费
|
在线观看中文字幕亚洲
|
日韩欧美高清
|
操操网站
|
久久国产精品免费一区二区三区
|
成人影院网站ww555久久精品
|
日本网站在线看
|
激情五月激情综合网
|
亚洲一区综合
|
久久久精品一区
|
黄色日本片
|
国产精品一区二区三
|
久久久国产一区二区三区四区小说
|
亚洲一区二区视频在线观看
|
欧美日韩视频在线第一区
|
av在线免费不卡
|
午夜免费视频
|
91精品国产91久久综合桃花
|
99国产精品99久久久久久粉嫩
|
国产精品一区二区三区久久久
|
国产精品免费视频一区
|
国产成人高清在线观看
|
国产精品视频综合
|
久久精品国内
|
精品一区二区三区视频在线观看
|
日韩欧美一级
|
日韩精品网站
|
一区二区国产在线观看
|
香蕉久久久
|
女人精96xxx免费网站p
|
中文字幕日韩欧美
|
亚洲国产成人av好男人在线观看
|
别c我啊嗯国产av一毛片
|
精品国产亚洲一区二区三区大结局
|
av特级毛片|
日韩精品一区二区在线
|
热久久久久|
欧美视频二区
|
欧美 日韩 中文
|