/*
函数名:void GSM_Send_CN_MSG(unsigned char *ucTargetPhone,unsigned char *ucSmsCentergetPhone,
unsigned char *ucContent)
函数功能:发送一条中文短信
参数: *ucTargetPhone 目标手机号码
*ucSmsCentergetPhone 短信中心号码
*ucContent 短信内容;
调用示例:GSM_Send_CN_MSG("8615990472896","8613800951500","你好!Hellow World!");
*/
void GSM_Send_CN_MSG(unsigned char *ucTargetPhone,unsigned char *ucSmsCentergetPhone,unsigned char *ucContent)
{
INT8U ucSMSCenter[20]; //存放颠倒后的短信中心号码
INT8U ucTgPhone[20]; //存放颠倒后的接收方电话号码
INT8U ucHead[100]; //协议头
INT8U ucMSG[200]; //协议数据
INT8U ucLEN[5]; //临时长度
INT8U ucPEnd[2]={0x1A,'\0'}; //结束符0x1A,也就是所谓的<Ctrl+Z>
GSM_TxString("AT+CMGF=0\r\n"); //设置以PDU格式发送接收短信
OSTimeDlyHMSM(0, 0, 1,0);
//颠倒短信中心号码
memset(ucSMSCenter,0,sizeof(ucSMSCenter));
GSM_InvertNumbers(ucSMSCenter,ucSmsCentergetPhone);
//颠倒接收方电话号码
memset(ucTgPhone,0,sizeof(ucTgPhone));
GSM_InvertNumbers(ucTgPhone,ucTargetPhone);
//组成协议数据
memset(ucMSG,0,sizeof(ucMSG));
GB2UnicodeStr(ucMSG,ucContent); //短信内容转成Unicode字符串,放到strMSG[]
strcat(ucMSG,ucPEnd); //在末尾加个发送结束符0x1A,也就是所谓的<Ctrl+Z>
//拼接协议头
memset(ucHead,0,sizeof(ucHead));
strcat(ucHead,"08"); //08长度
strcat(ucHead,"91"); //91 国家代码
strcat(ucHead,ucSMSCenter); //颠倒后的短信中心号码
strcat(ucHead,"11"); //11 短信消息类型 不需要状态报告 (31)需要报告
strcat(ucHead,"00"); //信息参考
I2HEXa8(ucLEN,strlen((char *)ucTargetPhone));//目标电话长度 转成十六进制形式的字符串
strcat(ucHead,ucLEN); //目标电话长度
strcat(ucHead,"91"); //91 国家代码
strcat(ucHead,ucTgPhone); //颠倒后的目标代码
strcat(ucHead,"00"); //协议标示 对于标准情况下的下 MS-to-SC 短消息传送,只需设置 PID 为 00
strcat(ucHead,"08"); //数据编码方案 08 或者04 均可发送出去
strcat(ucHead,"00"); //信息有效期 具体参考GSM 03.40 或者PDU中文的文档的计算方法
//将协议数据部分长度拼到协议头
I2HEXa8(ucLEN,strlen((char *)ucMSG)/2 ); //转成十六进制形式的字符串
strcat(ucHead,ucLEN);
//获取协议总体长度
I2DECa8(ucLEN ,(strlen((char *)ucMSG)/2)+15 );//转成十进制形式的字符串
//向串口发送AT指令
GSM_TxString("AT+CMGS="); //发送短信
GSM_TxString(ucLEN); //协议总长度
GSM_TxString("\r\n");
OSTimeDlyHMSM(0, 0, 0,800);
GSM_TxString(ucHead);
STM32 GSM模块发送中文短信
最新推荐文章于 2024-06-17 16:32:04 发布