STM32 GSM模块发送中文短信

/*
函数名: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);			 
  • 1
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值