⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprs.c

📁 GPRS模组资料包含DEMO
💻 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 + -