コード例 #1
0
ファイル: Task_Gps.c プロジェクト: wwwqimo/Cube_Sw
void GPS_REV_TASK(void *p_arg)
{	
	uint8_t data_temp;
	(void)p_arg;
	
	USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
	comClearRxFifo(COM2);
	GpsRevCnt = 0;
	
	while(1)
	{
		BSP_OS_TimeDlyMs(10000);
		
		comClearRxFifo(COM2);
		GpsRevCnt = 0;	
		USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

		while(GpsRevCnt < GPS_MAX_REV_SIZE)
		{
			while(comGetChar(COM2, &data_temp))
			{
				GpsRevBuf[GpsRevCnt++] = data_temp;
			}
			BSP_OS_TimeDlyMs(10);
		}
		USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
		GPS_Analysis(&GpsCurInfo, GpsRevBuf);

	}
}
コード例 #2
0
ファイル: bsp_sim800.c プロジェクト: fangchuan/HexRobot
/*
*********************************************************************************************************
*	函 数 名: SIM800_SendAT
*	功能说明: 向GSM模块发送AT命令。 本函数自动在AT字符串口增加<CR>字符
*	形    参: _Str : AT命令字符串,不包括末尾的回车<CR>. 以字符0结束
*	返 回 值: 无
*********************************************************************************************************
*/
void SIM800_SendAT(char *_Cmd)
{
	comClearRxFifo(COM_SIM800);	/* 清零串口接收缓冲区 */	
	
	comSendBuf(COM_SIM800, (uint8_t *)_Cmd, strlen(_Cmd));
	comSendBuf(COM_SIM800, "\r", 1);
}
コード例 #3
0
/*
*********************************************************************************************************
*	函 数 名: MG323_GetNetStatus
*	功能说明: 查询当前网络状态
*	形    参: 无
*	返 回 值: 网络状态, CREG_NO_REG, CREG_LOCAL_OK 等。
*********************************************************************************************************
*/
uint8_t MG323_GetNetStatus(void)
{
	/*
		AT+CREG?
		+CREG: 0,1
		
		OK				
	*/	
	char buf[128];
	uint16_t len, i;
	uint8_t status;
	
	comClearRxFifo(COM_MG323);	/* 清零串口接收缓冲区 */	
	
	MG323_SendAT("AT+CREG?");	/* 发送 AT 命令 */
	
	len = MG323_ReadResponse(buf, sizeof(buf), 200);	/* 超时 200ms */
	if (len == 0)
	{
		return 0;		
	}
	
	for (i = 2; i < len; i++)
	{
		if (buf[i] == ',')
		{
			i++;
			
			status = buf[i] - '0';
		}
	}
	return status;
}
コード例 #4
0
/*
*********************************************************************************************************
*	函 数 名: MG323_PowerOn
*	功能说明: 给MG323模块上电
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void MG323_PowerOn(void)
{
	comClearRxFifo(COM_MG323);	/* 清零串口接收缓冲区 */
	
	MG323_Reset();

	/*
		根据MG323手册,模块上电后延迟250ms,然后驱动 TERM_ON口线为低电平 750ms 之后驱动为高,完成开机时序
	*/
	TERM_ON_1();
	bsp_DelayMS(250);

	TERM_ON_0();
	bsp_DelayMS(750);
	TERM_ON_1();	

	/* 等待模块完成上电,判断是否接收到 ^SYSSTART */
	MG323_WaitResponse("^SYSSTART", 5000);
}
コード例 #5
0
ファイル: bsp_sim800.c プロジェクト: fangchuan/HexRobot
/*
*********************************************************************************************************
*	函 数 名: SIM800_PowerOn
*	功能说明: 模块上电. 函数内部先判断是否已经开机,如果已开机则直接返回1
*	形    参: 无
*	返 回 值: 1 表示上电成功  0: 表示异常
*********************************************************************************************************
*/
uint8_t SIM800_PowerOn(void)
{
	uint8_t ret_value = 0;
	uint8_t i;
	
	/* 判断是否开机 */
	for (i = 0; i < 5; i++)
	{
		SIM800_SendAT("AT");
		if (SIM800_WaitResponse("OK", 100))
		{
			return 1;
		}
	}
	
	comClearRxFifo(COM_SIM800);	/* 清零串口接收缓冲区 */

	/*  通过拉低 PWRKEY 引脚至少 1.2 秒然后释放,使模块开机。*/
	PWRKEY_0();
	bsp_DelayMS(2000);
	PWRKEY_1();

	/* 等待模块完成上电,如果是自动波特率则收不到RDT */
	//if (SIM800_WaitResponse("RDY", 5000) == 0)
	{	
		/* 开始同步波特率: 主机发送AT,只到接收到正确的OK 
		  当模块开机后建议延迟 2 至 3 秒后再发送同步字符,用户可发送“ AT” (大写、小写均可)来和模块
		  同步波特率,当主机收到模块返回“ OK”,			
		*/
		for (i = 0; i < 50; i++)
		{
			SIM800_SendAT("OK");
			if (SIM800_WaitResponse("OK", 100))
			{
				ret_value = 1;
				break;			/* 模块上电成功 */
			}
		}		
	}
	
	return ret_value;
}
コード例 #6
0
/*
*********************************************************************************************************
*	函 数 名: MG323_GetHardInfo
*	功能说明: 读取模块的硬件信息. 分析 ATI 命令应答结果。
*	形    参: 存放结果的结构体指针
*	返 回 值: 1 表示成功, 0 表示失败
*********************************************************************************************************
*/
uint8_t MG323_GetHardInfo(MG_HARD_INFO_T *_pInfo)
{
	/*
		ATI
		Manufacture: HUAWEI
		Model: MG323
		Revision: 12.210.10.05.00
		IMEI: 351869045435933
		+GCAP: +CGSM
		
		OK	
	*/	
	char buf[255];
	uint16_t len, i, begin, num;
	uint8_t status = 0;	
	
	comClearRxFifo(COM_MG323);	/* 清零串口接收缓冲区 */	
	
	MG323_SendAT("ATI");		/* 发送 ATI 命令 */
	
	len = MG323_ReadResponse(buf, sizeof(buf), 300);	/* 超时 300ms */
	if (len == 0)
	{
		return 0;		
	}
	
	_pInfo->Manfacture[0] = 0;
	_pInfo->Model[0] = 0;
	_pInfo->Revision[0] = 0;
	_pInfo->IMEI[0] = 0;
	
	for (i = 2; i < len; i++)
	{
		if (buf[i] == ':')
		{
			i += 2;
			begin = i;
		}
		if (buf[i] == AT_CR)
		{
			num = i - begin;
			
			if (status == 0)
			{
				if (num >= sizeof(_pInfo->Manfacture))
				{
					num = sizeof(_pInfo->Manfacture) - 1;
				}
				memcpy(_pInfo->Manfacture, &buf[begin], num);
				_pInfo->Manfacture[num] = 0;
			}
			else if (status == 1)
			{
				if (num >= sizeof(_pInfo->Model))
				{
					num = sizeof(_pInfo->Model) - 1;
				}				
				memcpy(_pInfo->Model, &buf[begin], num);
				_pInfo->Model[num] = 0;
			}
			else if (status == 2)
			{
				if (num >= sizeof(_pInfo->Revision))
				{
					num = sizeof(_pInfo->Revision) - 1;
				}				
				memcpy(_pInfo->Revision, &buf[begin], num);
				_pInfo->Revision[num] = 0;
			}
			else if (status == 3)
			{
				if (num >= sizeof(_pInfo->IMEI))
				{
					num = sizeof(_pInfo->IMEI) - 1;
				}					
				memcpy(_pInfo->IMEI, &buf[begin], num);
				_pInfo->IMEI[num] = 0;
				break;
			}
			status++;	
		}
	}
	return 1;
}