OpenEdv-开源电子网

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

stm32控制sim900a发一条短信,结果一直不间断的发,不知道怎么了,

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-3-2
在线时间
0 小时
发表于 2015-3-7 16:08:29 | 显示全部楼层 |阅读模式
5金钱
目的:stm32(mini板子)的LED1亮了,则发送一条短信,短信发送成功则LED1灭,结束。不用键盘按键输入电话号码,直接固定电话。
问题:改了原子哥的程序以后,LED1一直亮,短信也就一直不停的发

//测试短信发送内容(70个字[UCS2的时候,1个字符/数字都算1个字])
const u8* sim900a_test_msg="这是一条发送测试短信";
//SIM900A发短信测试 
void sim900a_sms_send_test(void)
{
u8 *p,*p1,*p2;
//u8 phonebuf[20]; //号码缓存
//u8 pohnenumlen=0; //号码长度,最大15个数 
u8* phonenum="15150518392";    //固定电话15150518392

u8 smssendsta=0; //短信发送状态,0,等待发送;1,发送失败;2,发送成功 
p=mymalloc(SRAMIN,100); //申请100个字节的内存,用于存放电话号码的unicode字符串
p1=mymalloc(SRAMIN,300);//申请300个字节的内存,用于存放短信的unicode字符串
p2=mymalloc(SRAMIN,100);//申请100个字节的内存 存放:AT+CMGS=p1 
LCD_Clear(WHITE);  
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-SIM900A 发短信测试",16,240);      
Show_Str(30,50,200,16,"发送给:",16,0);  
Show_Str(30,70,200,16,"状态:",16,0);
Show_Str(30,90,200,16,"内容:",16,0);  
POINT_COLOR=BLUE;
Show_Str(30+40,70,170,90,"等待发送",16,0);//显示状态
Show_Str(30+40,90,170,90,(u8*)sim900a_test_msg,16,0);//显示短信内容

while(1)
{  
if(smssendsta)
{
smssendsta=0;
Show_Str(30+40,70,170,90,"等待发送",16,0);//显示状态
}  
Show_Str(30+40,70,170,90,"正在发送",16,0);//显示正在发送
//smssendsta=1;  
sim900a_unigbk_exchange((u8*)phonenum,p,1);//将电话号码转换为unicode字符串
sim900a_unigbk_exchange((u8*)sim900a_test_msg,p1,1);//将短信内容转换为unicode字符串.
sprintf((char*)p2,"AT+CMGS=\"%s\"",p); 
if(sim900a_send_cmd(p2,">",200)==0)//发送短信命令+电话号码
{  
u2_printf("%s",p1); //发送短信内容到GSM模块 
  if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)
smssendsta=2;//发送结束符,等待发送完成(最长等待10秒钟,因为短信长了的话,等待时间会长一些)
else 
smssendsta=1;
}  
if(smssendsta==1)
Show_Str(30+40,70,170,90,"发送失败",16,0); //显示状态
else 
Show_Str(30+40,70,170,90,"发送成功",16,0); //显示状态

USART2_RX_STA=0;

LCD_Fill(30+54,50,239,50+16,WHITE);
Show_Str(30+54,50,156,16,(u8*)phonenum,16,0);  

delay_ms(10);
if(USART2_RX_STA&0X8000)
sim_at_response(1);//检查从GSM模块接收到的数据 
}
myfree(SRAMIN,p);
myfree(SRAMIN,p1);
myfree(SRAMIN,p2); 


//sim900a短信测试
//用于读短信或者发短信
//返回值:0,正常
//    其他,错误代码
u8 sim900a_sms_test(void)
{
if(sim900a_send_cmd("AT+CMGF=1","OK",200))return 1; //设置文本模式 
if(sim900a_send_cmd("AT+CSCS=\"UCS2\"","OK",200))return 2; //设置TE字符集为UCS2 
if(sim900a_send_cmd("AT+CSMP=17,0,2,25","OK",200))return 3; //设置短消息文本模式参数 

while(1)
{
if(LED1==0)
{
sim900a_sms_send_test();  //发短信
LED1=1;
//break;
}
delay_ms(10);
sim_at_response(1); //检查GSM模块发送过来的数据,及时上传给电脑

sim900a_send_cmd("AT+CSCS=\"GSM\"","OK",200); //设置默认的GSM 7位缺省字符集
return 0;


//sim900a主测试程序

void sim900a_test(void)
{
u8 key=0; 
// u8 timex=0;
u8 sim_ready=0;
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-SIM900A 测试程序",16,240); 
while(sim900a_send_cmd("AT","OK",100))//检测是否应答AT指令 
{
Show_Str(40,55,200,16,"未检测到模块!!!",16,0);
delay_ms(800);
LCD_Fill(40,55,200,55+16,WHITE);
Show_Str(40,55,200,16,"尝试连接模块...",16,0);
delay_ms(400);  
}  
LCD_Fill(40,55,200,55+16,WHITE);
key+=sim900a_send_cmd("ATE0","OK",200);//不回显

while(1)
{
delay_ms(10); 
sim_at_response(1);//检查GSM模块发送过来的数据,及时上传给电脑
if(sim900a_gsminfo_show(40,225)==0)
sim_ready=1;
else 
sim_ready=0;

if(sim_ready)//SIM卡就绪.
{
sim900a_sms_test();
break;
}
//if((timex%20)==0)LED0=!LED0;//200ms闪烁 
//timex++;  
}
}

sim900a+Mini stm32.rar

2.37 MB, 下载次数: 657

最佳答案

查看完整内容[请看2#楼]

已经解决了,是 sim900a_sms_send_test()函数里的循环出了问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-3-2
在线时间
0 小时
 楼主| 发表于 2015-3-7 16:08:30 | 显示全部楼层
已经解决了,是 sim900a_sms_send_test()函数里的循环出了问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-7 23:01:32 | 显示全部楼层
仿真。看问题出在哪里。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-4-13
在线时间
0 小时
发表于 2015-5-2 15:00:03 | 显示全部楼层
回复【3楼】沥子嘉:
---------------------------------
你好,我现在也准备做这个,请问一下我只用到发送短信功能,要不要更新字库.?
?
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-4-4
在线时间
2 小时
发表于 2015-7-17 19:55:08 | 显示全部楼层
为什么我把这段程序用的我的板子上,还是不能发出中文短信,手机收到的任然是空白,串口打印出来的短信内容是一串0,打印出来的手机是Unicode编码
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-8-24
在线时间
0 小时
发表于 2017-8-24 15:25:56 | 显示全部楼层
楼主,你在上面的代码是最终解决好的代码么?
回复

使用道具 举报

8

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
122
金钱
122
注册时间
2017-6-1
在线时间
27 小时
发表于 2017-8-24 15:28:17 | 显示全部楼层
我现在只关心你的手机费还有多少
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 16:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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