📄 gprs.c
字号:
//====================================================================================
// 文 件 名:GPRS.h
// 功能描述: 声明GPRS模块常用API函数
// 维护记录: 2007年12月18日 V1.0 by hongyan.Feng
//====================================================================================
#include "GPRS.h"
#include ".\TFT\TFT_API.h"
char full = FALSE; // 一个回应接收完成标志
char g_RecvBuf[300]; // 接收数据存储Buffer
//=============================================================
// 语法格式:void delay(int i)
// 功能描述:延时
// 入口参数:i:延时时间
// 出口参数:无
//=============================================================
void delay(int i)
{
i *= 100;
for(; i != 0; i--);
}
//=============================================================
// 语法格式:void UART_Init(void)
// 功能描述:UATR初始化,打开接收中断
// 入口参数:无
// 出口参数:无
//=============================================================
void UART_Init(unsigned int Bandrate)
{
*P_INT_MASK_CTRL1 &= ~C_INT_UART_DIS; // 打开UART中断
*P_UART_CLK_CONF = C_UART_CLK_EN
| C_UART_RST_DIS; // 使能UART模块时钟
*P_UART_INTERFACE_SEL |= C_UART_PORT_SEL; // 选择端口作为UART端口
*P_UART_BAUDRATE_SETUP = 27000000 / (Bandrate + 1); // 设置波特率
*P_UART_MODE_CTRL = C_UART_NO_PARITY // 无奇偶校验
| C_UART_STOP_1BIT // 1bit停止位
| C_UART_DATA_8BIT // 8bit数据位
| C_UART_CTRL_EN // UART使能
| C_UART_RX_INTEN; // UART接收中断使能
}
//=============================================================
// 语法格式: void UART_SendChar(char cData);
// 实现功能: 通过UART的数据发送端口,串行发送一个字符数据
// 入口参数: cData:待发送的字符数据
// 出口参数: 无
//=============================================================
void UART_SendChar(char cData)
{
while(*P_UART_TXRX_STATUS & C_UART_TXFIFO_FULL); // 发送FIFO满则等待?
*P_UART_TXRX_DATA = cData;
while(*P_UART_TXRX_STATUS & C_UART_BUSY_FLAG); // 等待发送完成
}
//=============================================================
// 语法格式: void GPRS_SendChar(char cData);
// 实现功能: 向GPRS模块发送一个字符
// 入口参数: cData: 待发送的字符数据
// 出口参数: 无
//=============================================================
void GPRS_SendChar(char cData)
{
UART_SendChar(cData);
}
//=============================================================
// 语法格式: void GPRS_SendString(char *cmd)
// 实现功能: 向GPRS模块发送一个字符串
// 入口参数: cmd:待发送的字符串
// 出口参数: 无
//=============================================================
void GPRS_SendString(char *cmd)
{
while(*cmd != '\0')
{
UART_SendChar(*cmd);
cmd++;
delay(10);
}
delay(100);
}
//=============================================================
// 语法格式: void GPRS_SendInt(unsigned int n)
// 实现功能: 向GPRS模块发送一个ASC形式的整型数
// 入口参数: n:待发送的整形数
// 出口参数: 无
//=============================================================
void GPRS_SendInt(unsigned int n)
{
int i = 0, j = 0;
char Num[32];
char ch;
do
{
Num[i++] = n % 10;
n = (int)n / 10;
}while(n > 0);
for(j = i - 1; j >= 0; j--)
{
ch = Num[j] + 48; //转化成ASC码
UART_SendChar(ch);
}
}
//=============================================================
// 语法格式: int GPRS_SendCommand(char *cmd)
// 实现功能: 向GPRS模块发送命令,如果发送不成功则循环发送命令,直到成功为止
// 入口参数: cmd:命令
// 出口参数: 0:成功
//=============================================================
int GPRS_SendCommand(char *cmd)
{
char Sign = 0;
int i;
while(Sign == 0)
{
GPRS_SendString(cmd);
for(i = 1000; i > 0; i--)
{
if(full == TRUE)
{
if(strcmp(g_RecvBuf, "OK\r\n") == 0)
{
Sign = 1;
break;
}
full = FALSE;
}
}
delay(10000);
}
return 0;
}
//=============================================================
// 语法格式: void GPRS_Reset(void)
// 实现功能: GPRS模块复位
// 入口参数: 无
// 出口参数: 无
//=============================================================
void GPRS_Reset(void)
{
unsigned int Back;
Back = *P_IOB_GPIO_SETUP;
*P_IOB_GPIO_SETUP = 0x01010100;
delay(100000);
*P_IOB_GPIO_SETUP = Back;
}
//=============================================================
// 语法格式: void GPRS_Init(unsigned int UART_Bandrate)
// 实现功能: GPRS初始化
// 入口参数: 无
// 出口参数: 无
//=============================================================
extern WIN_HANDLE Msg;
void GPRS_Init(unsigned int UART_Bandrate)
{
GPRS_Reset();
UART_Init(UART_Bandrate);
TFT_Print(Msg, "GPRS 初始化中.....\n");
GPRS_SendCommand("AT\r\n");
TFT_Print(Msg, "GPRS通信串口正常\n");
GPRS_SendCommand("AT+CMIC=0,15\r\n");
TFT_Print(Msg, "麦克设置成功\n");
GPRS_SendCommand("AT+CMGF=1\r\n"); // 设置短信为TEXT:1格式,PDU:0
TFT_Print(Msg, "设置短信格式为TEXT 成功\n");
GPRS_SendCommand("AT+CHFA=1\r\n"); // 使用耳机
TFT_Print(Msg, "耳机设置成功\n");
GPRS_SendCommand("AT+CLVL=100\r\n"); // 设置最大音量
TFT_Print(Msg, "中文短消息设置成功\n");
GPRS_SendCommand("AT+CSCS=\"UCS2\"\r\n"); // 设置USC2编码
TFT_Print(Msg, "USC2设置成功\n");
}
//=============================================================
// 语法格式: void GPRS_IRQ_Service(void)
// 实现功能: GPRS中断服务函数,该函数在IRQ42()中断服务函数中调用
// 接收GPRS的回应
// 入口参数: 无
// 出口参数: 无
//=============================================================
void GPRS_IRQ_Service(void)
{
static int iQueuePos = 0;
char uiData;
if(*P_UART_TXRX_STATUS & C_UART_RX_FLAG) // 是否是接收中断?
{
uiData = *P_UART_TXRX_DATA; // 读接收数据
g_RecvBuf[iQueuePos++] = uiData;
if(uiData == '\n')
{
g_RecvBuf[iQueuePos] = '\0';
InsertQueue(g_RecvBuf);
full = TRUE;
iQueuePos = 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -