OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5421|回复: 5

STM32 与gprs

[复制链接]

15

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2013-11-2
在线时间
0 小时
发表于 2013-12-19 10:24:52 | 显示全部楼层 |阅读模式
我想用stm32通过GPRS模块发送一条短信到我手机来,不知道怎么的。就是发送失败啊。我贴了一张程序图
[mw_shl_code=c,true]/单片机给GSM发送短信,实际为该条信息的unicode码 //GSM会将这串unicode码转换成中英文的信息发送给目标手机 这个不需要我们管 我们只要把信息翻译成unicode 码通过串口发送给模块 //函数返回0表示成功发出短信 返回其他值表示失败 const u8 *Message="欢迎来到湖南university!"; //const u8 *Unicode_Message="6B228FCE676552306E5653570075006E006900760065007200730069007400790021";//欢迎来到湖南university! u8 GSM_Send_Message(void) { u8 res=1; // u8 *p_phone="18975870559"; u8 *Unicode_Message; u8 *unicode_phone; u8 p_at[50]; //unicode_phone=malloc(50);//申请50个字节的内存用来存放手机号码转换成的unicode码 // Unicode_Message=malloc(150);//申请150个字节内存用于存放要发送的信息的unicode码 //p_at=malloc(100); //申请100个字节内存用于存放AT指令 unicode_phone="00310038003900370035003800370030003500350039"; //18975870559 Unicode_Message="6B228FCE676552306E5653570075006E006900760065007200730069007400790021"; LCD_ShowString(20,165,Unicode_Message);//显示短信内容 //发送的命令后面必须加换行符 \r\n if(MCU_Send_Cmd("AT+CMGF=1\r\n","OK",200)!=0) res+=3; //设置为文本模式 if(MCU_Send_Cmd("AT+CSMP=17,167,2,25\r\n","OK",200)!=0) res+=1; //设置文本模式参数 if(MCU_Send_Cmd("AT+CSCS=\"UCS2\"\r\n","OK",200)!=0) res+=2;//设置为UCS32字符编码集,支持中英文 sprintf((char*)p_at,"AT+CMGS=\"%s\"\r\n",unicode_phone); printf("%s\n",p_at); if(MCU_Send_Cmd((u8*)p_at,">",200)==0) { // printf("发送的消息内容是:\r\n"); MCU_Send_Message(Unicode_Message); if(MCU_Send_Cmd((u8*)0X1A,"+CMGS:",1000)==0)//0X1A用于启动短信发送 发送成功返回指令+CMGS: { //printf("成功发送一条短信!\n"); // LCD_ShowString(20,170,"successed in sending a message"); res=0; } } // free(unicode_phone); // free(Unicode_Message); // free(p_at); return res; } 在发送完0X1A这个启动发送指令后,就是收不到+CMGS:的回应,其他指令调试的时候都能收到响应 gprs就是原子店里的SIM900A[/mw_shl_code] [mw_shl_code=c,true]望大家帮忙解决一下啊,,搞了几天就是弄不出来 [/mw_shl_code]

 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2013-11-2
在线时间
0 小时
 楼主| 发表于 2013-12-19 10:45:15 | 显示全部楼层
这是我的MCU_Send_Cmd()的函数
//单片机发送AT指令cmd 成功发送命令且得到要的回应则返回0   返回其他表示失败
//GPRS模块响应信号ack  若不需要响应则为空0
//设定一个等待响应的时间,避免单片机无限的等待下去
u8 MCU_Send_Cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=2;
if((u32)cmd<=0XFF) //这只是一个16进制的数字
{
  USART2->DR=(u32)cmd;
}
else
{
while(*cmd!='\0') //单片机发送命令字符串
{

USART2->DR=*cmd;//串口自动发送
cmd+=1;
    while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待一帧数据发送结束

}
}
if(ack&&waittime)
{
while(--waittime)
{
delay_ms(5);
if((USART_RX_STA&0x8000)!=0)
{
if(Ack_Cmmand(ack)!=0)  break;
USART_RX_STA=0;
}

}
}
if(waittime==0)  res=1;
else             res=0;
return res;  
   
}
回复 支持 反对

使用道具 举报

15

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2013-11-2
在线时间
0 小时
 楼主| 发表于 2013-12-19 10:45:55 | 显示全部楼层
请原子哥和大家帮忙解决下啊,实在头疼了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-12-19 16:26:28 | 显示全部楼层
u8 p_at[50];
数组不够长。。。
其他的,跟踪代码,看看出错在哪一步?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2013-11-2
在线时间
0 小时
 楼主| 发表于 2013-12-19 21:11:02 | 显示全部楼层
我已经调出来了,谢谢回答
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2012-4-26
在线时间
1 小时
发表于 2014-5-5 20:48:26 | 显示全部楼层
回复【5楼】longdaoyuntai:
---------------------------------
哪里出错了,最后是怎么调出来的?楼主说说呗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表