OpenEdv-开源电子网

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

stm32控制GSM发送短信心得

[复制链接]

16

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2013-12-21
在线时间
8 小时
发表于 2015-3-27 20:42:04 | 显示全部楼层 |阅读模式

最近自己做了个关于gsm短信报警的毕设,调了两天终于通了,困惑期间查了很多网上的资料,发现网上也有很多朋友遇到了与我相似的问题,但都没有得到很好的解决,而且原子哥的例程是寄存器版的,很多初学者看不懂。所以我就拿出了自己改写的库函数版本讲解一下应该注意的问题。也算作回馈大家。代码如下

[mw_shl_code=c,true] USART2_printf(USART2,"AT+CSCS=\"GSM\"\r"); delay_ms(1000); USART2_printf(USART2,"AT+CMGF=1\r"); //设置短信模式中文/英文 delay_ms(1000); USART2_printf(USART2,"AT+CMGS=\"+8613009634851\"\r"); //目标好码 delay_ms(1000); USART2_printf(USART2,"HELLO\r"); delay_ms(1000); USART_SendData(USART2,0x1a);[/mw_shl_code] [mw_shl_code=c,true]大家的问题都是能打电话但发短信不行,因为拨号简单,只有一条指令。以上程序中有几点需要注意[/mw_shl_code] [mw_shl_code=c,true]1.目标号码加不加‘+86’?这个不影响,加不加都能发,因为都是中国的号码。[/mw_shl_code] [mw_shl_code=c,true]2.电话号码部分和‘GSM’这两部分的符号多了\“******\”这个,不同于其他。要注意。[/mw_shl_code] [mw_shl_code=c,true]3.每条指令后面都有‘\r’,有的版本还加了‘\n’,其实\n有没有不影响结果。[/mw_shl_code] [mw_shl_code=c,true]4.延时要合理,不要太短,特别是发完号码后的延时要足够,才能发送短信内容。原理就不讲了,很简单。[/mw_shl_code] [mw_shl_code=c,true]5.最后一条,也是最重要的。最后要发送‘0x1a’作为结束符号。不知道大家发现没有,我的最后的串口发送函数与前面的不一样,因为前面的函数要求发送的是字符串,要加双引号,这样发的“0x1a”不对,必须是作为单个字符发送,不加双引号。[/mw_shl_code]

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

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2015-3-27 22:06:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2015-3-27 22:09:05 | 显示全部楼层
1楼说的对

另外开发板有库函数版本的例程
学无止境
回复 支持 反对

使用道具 举报

16

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2013-12-21
在线时间
8 小时
 楼主| 发表于 2015-3-28 11:59:01 | 显示全部楼层
回复【2楼】nonplus:
---------------------------------
嗯,很正确。这个注意到了。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-4-12
在线时间
0 小时
发表于 2015-4-25 18:31:32 | 显示全部楼层
楼主您好,我最近也在做gsm这块,您能不能发程序发我一份,学习学习,谢谢了!QQ邮箱1837552311@qq.com
回复 支持 反对

使用道具 举报

24

主题

208

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2014-4-8
在线时间
160 小时
发表于 2015-4-26 19:11:23 | 显示全部楼层
你这个函数也仅仅是发英文的可以,你要是发中文的,你没有转换的东西,另外,你这延时函数用的,真是伤啊,别用延时啊
回复 支持 反对

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-4-19
在线时间
2 小时
发表于 2015-4-27 13:36:15 | 显示全部楼层
没有确认是否收到OK或者其他返回AT指令  printf用起来不行
回复 支持 反对

使用道具 举报

15

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2016-1-18
在线时间
61 小时
发表于 2017-4-18 10:55:38 | 显示全部楼层
您好,我毕设也是关于gsm短信报警的,请问能分享一下您的程序吗?我的邮箱:936679030@qq.com
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-5-27
在线时间
0 小时
发表于 2018-5-27 11:17:40 | 显示全部楼层
能麻烦发到我邮箱一份吗,谢谢。
2463567315@qq.com
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2019-7-26
在线时间
27 小时
发表于 2019-7-29 05:14:54 | 显示全部楼层
能麻烦发到我邮箱一份吗,最近学习gsm,谢谢。3218585684@qq.com
回复 支持 反对

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2020-3-8
在线时间
23 小时
发表于 2020-3-10 23:06:00 | 显示全部楼层
你好,请问还有stm32控制gsm发短信的程序吗,可以发一下给我吗,2517236567@qq.com
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-1-6
在线时间
6 小时
发表于 2020-4-2 18:49:40 | 显示全部楼层
请问gsm用9v方形电池驱动的了吗
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-8-9
在线时间
13 小时
发表于 2020-4-22 22:24:58 | 显示全部楼层
为啥都要求这个程序,楼主不都发出来了嘛
初始化串口2,再加上楼主那几句程序,就行了啊
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-5-26
在线时间
7 小时
发表于 2020-7-28 17:24:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-3-13
在线时间
8 小时
发表于 2020-10-3 12:05:02 | 显示全部楼层
可以发来看看吗  
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2020-11-13
在线时间
6 小时
发表于 2020-12-15 19:32:34 | 显示全部楼层
可否求个源码?
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2020-4-16
在线时间
10 小时
发表于 2021-5-5 17:32:23 | 显示全部楼层
我就来看看,谢谢大哥
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2021-3-22
在线时间
11 小时
发表于 2021-5-10 22:06:55 | 显示全部楼层
                                        printf("AT+CMGF=1\r\n");
                                                delay_ms(1000);
                                       printf("AT+CSMP=17,167,2,25\r\n");
                                                delay_ms(1000);
                                        printf("AT+CSCS=\"UCS2\"\r\n");
                                                delay_ms(1000);
                                        printf("AT+CMGS=\"234652335305630\"\r\n");    //电话号码的unicode码转换,我这里随便打的
                                                delay_ms(1000);
                                        printf("621172314F60");
                                                delay_ms(1000);
                                       USART_SendData(USART2,0x1a);          这句话是系统函数,串口改一下就能用。

还有重定义加在usart.c文件里

//重定义fputc函数
int fputc(int ch, FILE *f)
{      
        while((USART2->SR&0X40)==0);//循环发送,直到发送完毕   
    USART2->DR = (u8) ch;      
        return ch;
}
回复 支持 反对

使用道具 举报

2

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2019-5-17
在线时间
273 小时
发表于 2021-7-20 17:09:47 | 显示全部楼层
谢谢了 在调试EC200
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2022-3-28
在线时间
4 小时
发表于 2022-3-28 17:29:38 | 显示全部楼层
想问楼主GSM供电问题如何解决的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 23:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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