本帖最后由 颩色四葉愺 于 2015-1-7 17:41 编辑 用到sim908进行拨话,与短信、GPS、GPRS服务,需要对模块返回来的信息进行处理,源程序如下:- #include "sim908.h"
- #include "stdio.h"
- #include "string.h"
- #include "usart.h"
- #include "ff.h"
- #include "includes.h"
- #include "rtc.h"
- #include "i2c_ee.h"
- #include "includes.h"
- u8 Sim_Battery[4]; //电池
- u8 Sim_RSSI[3]; //信号强度
- u8 Sim_Operator = 0; //运营商 1为中国移动
- u8 GSM_Response[10];
- u8 RingNumber[20]; //来电号码
- u8 Messagenum; //保存短信数目
- u8 Messagebuff[50]; //保存短信状态 0 空 1 未读 2 命令短信 3非命令短信
- char ADMINISTRATORPHONE[20] = "13729058953";
- char IPADDR[20] = "220.170.79.210";
- char COM[6] = "40487";
- char PASSWORD[10] = "0000000000";
- u8 LOCATION[30];
- Messagestr MES_STR;
- GPSStruct GPS_STR;
- /*
- 函数名:Sim908_IOConfig
- 描述: 复位
- 输入: 无
- 输出: 无
- */
- void Sim908_IOConfig( void )
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- }
- void Sim908_Reset( void )
- {
- OS_ERR err;
- GPIO_SetBits(GPIOA, GPIO_Pin_1);
- OSTimeDlyHMSM( 0, 0, 2, 0, OS_OPT_TIME_HMSM_STRICT, &err);
- GPIO_ResetBits(GPIOA, GPIO_Pin_1);
- }
- /*
- 函数名:Sim908_SendCmd
- 描述: 发送at命令,并检验是否收到想要的响应
- 输入: u8 *cmd 要发送的命令
- u8 *ack 期待的响应
- u16 waittime 等待时间 单位10ms
- u8 *pBuff 接收响应的缓存区地址 为NULL则不保存响应数据
- 输出:
- */
- u8 Sim908_SendCmd(u8 *cmd, u8 *ack, u16 waittime, u8 *pBuff)
- {
- u8 res = SIM_ERR_OTHER;
- u8 *pdata = NULL;
- CPU_TS ts;
- OS_ERR err;
- OS_MSG_SIZE msg_size;
-
- OSMutexPend(&Mutex_USART2, 30000, OS_OPT_PEND_BLOCKING, &ts, &err);
- if( (u32)cmd <= 0xff ) //用于发送结束标志 0x1A
- {
- USART2->DR = (u32)cmd;
- }
- else
- {
- printf("%s\r\n", ( char *)cmd);
- }
- if(ack != NULL)
- {
- strcpy((char *)&GSM_Response[0], (char *)ack);
- while(waittime--)
- {
- //OSSemPend(&Sem_GSMResponse, 10, OS_OPT_PEND_BLOCKING, &ts, &err); //等待信号量
- pdata = OSQPend(&Q_GSMResponse, 10, OS_OPT_PEND_BLOCKING, &msg_size, &ts, &err);
- if(err == OS_ERR_NONE)
- {
- if((NULL != pBuff)&&(NULL != pdata))
- {
- strcpy((char *)pBuff, (char *)pdata);
- }
- OSMemPut(&MyPartition, pdata, &err);
- res = SIM_ERR_NONE;
- break;
- }
- }
- if(err != OS_ERR_NONE)
- {
- res = SIM_ERR_TIMEOUT;
- }
- }
- OSMutexPost(&Mutex_USART2, OS_OPT_POST_NONE, &err);
-
- return res;
- }
复制代码 |