SIM900/SIM900A 模塊實(shí)現(xiàn)收發(fā)短信,打電話
[導(dǎo)讀]實(shí)現(xiàn)了收發(fā)短信,并且支持字符短信和PDU格式短信,支持電話撥打與接聽長期工作穩(wěn)定//SIM900.C/*************************************************
實(shí)現(xiàn)了收發(fā)短信,并且支持字符短信和PDU格式短信,支持電話撥打與接聽
長期工作穩(wěn)定
//SIM900.C
/************************************************************************************************************* ?*?文件名: SIM900.c ?*?功能: STM32?SIM900底層驅(qū)動(dòng)函數(shù) ?*?作者: cp1300@139.com ?*?創(chuàng)建時(shí)間: 2013-10-16 ?*?最后修改時(shí)間: 2013-10-16 ?*?詳細(xì): GSM_CDMA發(fā)送短信等 2014-04-22:添加字節(jié)超時(shí)與總超時(shí) *************************************************************************************************************/ #include?"system.h" #include?"usart.h" #include?"SIM900.h" #include?"delay.h" #include?"string.h" #include?"ucos_ii.h" #include?"unicode_gbk.h" #include?"main.h" //SIM900通信緩沖區(qū) u8 SIM900_Buff[SIM900_BUFF_SIZE]; //緩沖區(qū) //調(diào)試開關(guān) #define?SIM900_DBUG 0 #if?SIM900_DBUG #include?"system.h" #define?SIM900_debug(format,...) uart_printf(format,##__VA_ARGS__) #else #define?SIM900_debug(format,...) / / #endif //SIM900_DBUG //所有短信接收緩沖區(qū) //#define?PDU_BUFF_SIZE 1024*20 //20KB 可以一次讀取50條未讀短信 u8 SmsPduBuff[PDU_BUFF_SIZE]; //PDU數(shù)據(jù)緩沖區(qū) static?u8?PhoneNumtoPDUChar(u8?*pNum,?char?*pChar,u8?NumLen); //將電話號(hào)碼字符轉(zhuǎn)換為PDU要求的字符 static?u8?ChartoPhoneNum(char?*pChar,?char?*pNum,?u8?CharLen); //將字符轉(zhuǎn)換為電話號(hào)碼 static?u32?StringToUnicodeStr(char?*pStr,?char?*pucode,u32?SrtLen); //將字符串轉(zhuǎn)換為unicode,并存儲(chǔ)為16進(jìn)制樣式的字符串 static?u32?UnicodeStrToString(u8?*pucode,char?*pStr,u32?SrtLen); //將字符unicode轉(zhuǎn)換為字符串 static?u32?GSM_StringToHex(char?*pStr,?u8?NumDigits); //將16進(jìn)制樣式字符串轉(zhuǎn)換為16進(jìn)制整型數(shù)(必須保證字符串字母都是大寫) static?void?GSM_HexToString(u32?HexNum,char?*pStr,?u8?NumDigits); //將整型數(shù)字轉(zhuǎn)換為16進(jìn)制樣式字符串(字母為大寫,不帶結(jié)束符) static?int?gsmDecode7bit(const?u8*?pSrc,?char*?pDst,?int?nSrcLength);//7bit編碼解碼 static?int?gsmEncode7bit(const?char*?pSrc,u8*?pDst); static?u16?GSM_GetU2SCharOffset(char?*pBuff,u16?CharNum); static?PHONE_NUMBER?SMSServeNumber; //全局短信中心號(hào)碼 /************************************************************************************************************************* *?函數(shù) : void?SIM900_SetSMSServeNumber(char?*pSMSServeNumber,u8?NumLen) *?功能 : 設(shè)置全局短信中心號(hào)碼 *?參數(shù) : pSMSServeNumber:短信中心號(hào)碼,NumLen:短信中心號(hào)碼長度 *?返回 : 無 *?依賴 : 無 *?作者 : cp1300@139.com *?時(shí)間 : 2013-10-25 *?最后修改時(shí)間? :? 2013-10-25 *?說明 :? 用于發(fā)送短信的時(shí)候進(jìn)行調(diào)用 *************************************************************************************************************************/ void?SIM900_SetSMSServeNumber(char?*pSMSServeNumber,u8?NumLen) { u8?i; if(NumLen?>?PHONE_NUMBER_MAX_LEN)?NumLen?=?PHONE_NUMBER_MAX_LEN; //限制電話號(hào)碼長度 for(i?=?0;i?<?NumLen;i?++) { SMSServeNumber.PhoneNumBuff[i]?=?pSMSServeNumber[i]; } SMSServeNumber.PhoneNumLen?=?NumLen; SMSServeNumber.PhoneNumBuff[SMSServeNumber.PhoneNumLen]?=?'