SIM900/SIM900A 模塊實(shí)現(xiàn)收發(fā)短信,打電話
[導(dǎo)讀]實(shí)現(xiàn)了收發(fā)短信,并且支持字符短信和PDU格式短信,支持電話撥打與接聽長(zhǎng)期工作穩(wěn)定//SIM900.C/*************************************************
實(shí)現(xiàn)了收發(fā)短信,并且支持字符短信和PDU格式短信,支持電話撥打與接聽
長(zhǎng)期工作穩(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)碼長(zhǎng)度
*?返回 : 無(wú)
*?依賴 : 無(wú)
*?作者 : cp1300@139.com
*?時(shí)間 : 2013-10-25
*?最后修改時(shí)間? :? 2013-10-25
*?說(shuō)明 :? 用于發(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)碼長(zhǎng)度
for(i?=?0;i?<?NumLen;i?++)
{
SMSServeNumber.PhoneNumBuff[i]?=?pSMSServeNumber[i];
}
SMSServeNumber.PhoneNumLen?=?NumLen;
SMSServeNumber.PhoneNumBuff[SMSServeNumber.PhoneNumLen]?=?'
