找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17931|回复: 41
打印 上一主题 下一主题
收起左侧

SIM系列GSM GPRS模块例程(STM32源码)

  [复制链接]
跳转到指定楼层
楼主


stm32源码列表:
1.拨打电话
10.GPRS_透传模式
11.综合演示程序STM32
12.GPS测试程序
13.蓝牙测试程序
14.手机通过蓝牙控制LED
2.接听电话
3.发送TEXT短信
4.发送中文短信
5.接收短信控制LED灯
6.GPRS_TCP程序(动态IP)
7.GPRS_TCP程序(域名)
8.GPRS_UDP程序(动态IP)
9.GPRS_UDP程序(域名)

本程序通过GPRS服务器控制LED的亮灭
使用单片机串口2与模块通信;接法如下
    STM32      GPRS模块
    PA3 (RXD2)->RXD
    PA2 (TXD2)->TXD
    GND      ->GND
1、1、板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁;
2、通过单片机的串口1,可以监视模块的登录情况;
3、手机发送“onled”点亮LED;
4、手机发送“offled”熄灭LED;
5、单片机每隔10秒会向服务器发送心跳帧“OK”
6、通过串口助手监控单片机的串口1可以看到服务器发送的信息;

单片机源程序如下:
  1. /**********************************************************************************
  2. * 工程名  :GPRS_透传模式
  3. * 描述    :通过STM32开发板控制模块进入透传模式,连接上服务器后将收到服务器的数据返回给服务器
  4. * 实验平台:STM32F10X
  5. * 库版本  :


  6. * 硬件连接说明
  7.          使用单片串口2与GPRS模块通信  注:使用串口2可以避免下载和通信不会冲突
  8.          STM32      GPRS模块
  9.          PA3 (RXD2)->TXD
  10.          PA2 (TXD2)->RXD
  11.          GND              ->GND

  12. * 软件功能说明
  13.    板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁
  14.          连接上服务器后将收到服务器的数据返回给服务器
  15. **********************************************************************************/

  16. #include "stm32f10x.h"
  17. #include "usart.h"
  18. #include "Led.h"
  19. #include "SysTick.h"
  20. #include "timer.h"
  21. #include "string.h"

  22. #define Buf2_Max 200                                           //串口2缓存长度
  23. /*************        本地常量声明        **************/
  24. const char *string = "AT+CIPSTART=\"TCP\",\"14.125.48.205\",9015";//IP登录服务器,需要根据自己的IP和端口做修改

  25. /*************  本地变量声明        **************/

  26. char Uart2_Buf[Buf2_Max]; //串口2接收缓存
  27. char *p1,*p2;            
  28. u8 Times=0,shijian=0;

  29. vu8 Timer0_start;        //定时器0延时启动计数器

  30. /*************        本地函数声明        **************/
  31. void System_Initialization(void); //STM32系统初始化
  32. void Ram_Initialization(void);    //内存变量初始化
  33. void NVIC_Configuration(void);    //中断向量组初始化
  34. void CLR_Buf2(void);              //清串口2接收缓存
  35. u8 Find(char *a);                 //查找字符串
  36. void Second_AT_Command(char *b,char *a,u8 wait_time);  //发送AT指令
  37. void Wait_CREG(void);                          //查询等待模块注册成功
  38. void Set_ATE0(void);                           //取消回显
  39. void Connect_Server(void);                     //配置GPRS连接参数,并进入透传模式
  40. void Rec_Server_Data(void);                    //接收服务器数据并返回


  41. /*************  外部函数和变量声明*****************/




  42. /*******************************************************************************
  43. * 函数名 : main
  44. * 描述   : 主函数
  45. * 输入   :
  46. * 输出   :
  47. * 返回   :
  48. * 注意   : 串口2负责与MG323模块通信,串口1用于串口调试,可以避免在下载程序时数据
  49.                                          还发送到模块
  50. *******************************************************************************/
  51. int main(void)
  52. {
  53.         System_Initialization(); //系统初始化
  54.         Ram_Initialization();    //变量初始化

  55.         UART1_SendString("GPRS模块GPRS测试程序\r\n");
  56.         UART1_SendString("GPRS模块在注册网络\r\n");
  57.         Delay_nS(1);
  58.         UART2_SendString("+++");//退出透传模式,避免模块还处于透传模式中
  59.   Delay_nS(2);
  60.         Wait_CREG();   //等待模块注册成功
  61.         UART1_SendString("GPRS模块注册成功\r\n");
  62.         UART1_SendString("GPRS模块开始连接服务器\r\n");
  63.         Set_ATE0();    //取消回显
  64.         Connect_Server(); //设置GPRS参数
  65.         UART1_SendString("连接成功\r\n");

  66.         while(1)
  67.         {
  68.                 Rec_Server_Data();//接收数据并原样返回        
  69.         }
  70. }

  71. /*******************************************************************************
  72. * 函数名  : System_Initialization
  73. * 描述    : STM32系统初始化函数(初始化STM32时钟及外设)
  74. * 输入    : 无
  75. * 输出    : 无
  76. * 返回    : 无
  77. * 说明    : 无
  78. *******************************************************************************/
  79. void System_Initialization(void)
  80. {
  81.         RCC_Configuration();                //设置系统时钟为72MHZ(这个可以根据需要改)
  82.   SysTick_Init_Config();  //初始化系统滴答时钟SysTick
  83.   NVIC_Configuration();                //STM32中断向量表配配置
  84.         Timer2_Init_Config();                //定时器2初始化配置
  85.         USART1_Init_Config(115200);        //串口1初始化配置
  86.         USART2_Init_Config(115200);        //串口2初始化配置        
  87.         GPIO_Config();          //初始化GPIO
  88. }
  89. /*******************************************************************************
  90. * 函数名  : Ram_Initialization
  91. * 描述    : 变量初始化函数
  92. * 输入    : 无
  93. * 输出    : 无
  94. * 返回    : 无
  95. * 说明    : 无
  96. *******************************************************************************/
  97. void Ram_Initialization(void)
  98. {
  99.         Times=0;
  100.         shijian=0;
  101.         Timer0_start=0;
  102.         p1=Uart2_Buf;
  103.         p2=p1;
  104. }

  105. /*******************************************************************************
  106. * 函数名  : NVIC_Configuration
  107. * 描述    : STM32中断向量表配配置
  108. * 输入    : 无
  109. * 输出    : 无
  110. * 返回值  : 无
  111. * 说明    : 设置KEY1(PC11)的中断优先组
  112. *******************************************************************************/
  113. void NVIC_Configuration(void)
  114. {
  115.         NVIC_InitTypeDef NVIC_InitStructure;                                                //定义NVIC初始化结构体

  116.   /* Set the Vector Table base location at 0x08000000 */
  117.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  118.         
  119.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                                    //设置中断优先级组为2,先占优先级和从优先级各两位(可设0~3)
  120.         
  121.         /*定时器2中断向量配置*/
  122.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;                                    //设置中断向量号
  123.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;        //设置抢先优先级
  124.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                          //设置响应优先级
  125.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                    //使能NVIC
  126.         NVIC_Init(&NVIC_InitStructure);
  127.         /*串口1中断向量配置*/
  128.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;                                  //设置中断向量号
  129.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;        //设置抢先优先级
  130.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                          //设置响应优先级
  131.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                    //使能NVIC
  132.         NVIC_Init(&NVIC_InitStructure);
  133.   /*串口2中断向量配置*/
  134.   NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;                                  //设置中断向量号
  135.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;        //设置抢先优先级
  136.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                          //设置响应优先级
  137.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                    //使能NVIC
  138.         NVIC_Init(&NVIC_InitStructure);
  139. }
  140. /*******************************************************************************
  141. * 函数名  : USART2_IRQHandler
  142. * 描述    : 串口1中断服务程序
  143. * 输入    : 无
  144. * 返回    : 无
  145. * 说明    :
  146. *******************************************************************************/
  147. void USART2_IRQHandler(void)                        
  148. {
  149.                         u8 Res=0;
  150.       if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  151.                         {
  152.                         Res=USART_ReceiveData(USART2);
  153.                         *p1 = Res;            //将接收到的字符串存到缓存中
  154.                         p1++;                                        //缓存指针向后移动
  155.                         if(p1>&Uart2_Buf[Buf2_Max])                       //如果缓存满,将缓存指针指向缓存的首地址
  156.                         {
  157.                                 p1=Uart2_Buf;
  158.                         }
  159.                   }                        
  160. }         

  161. /*******************************************************************************
  162. * 函数名  : TIM2_IRQHandler
  163. * 描述    : 定时器2中断断服务函数
  164. * 输入    : 无
  165. * 输出    : 无
  166. * 返回    : 无
  167. * 说明    : 无
  168. *******************************************************************************/
  169. void TIM2_IRQHandler(void)   //TIM2中断
  170. {
  171.         static u8 flag =1;

  172.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
  173.         {
  174.                
  175.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx更新中断标志
  176.                
  177.                 if(Timer0_start)
  178.                 Times++;
  179.                 if(Times > shijian)
  180.                 {
  181.                         Timer0_start = 0;
  182.                         Times = 0;
  183.                 }
  184.                
  185.                 if(flag)
  186.                 {
  187.                         LED4_ON();
  188.                         flag=0;
  189.                 }
  190.                 else
  191.                 {
  192.                         LED4_OFF();
  193.                         flag=1;
  194.                 }
  195.         }        
  196. }

  197. /*******************************************************************************
  198. * 函数名 : CLR_Buf2
  199. * 描述   : 清除串口2缓存数据
  200. * 输入   :
  201. * 输出   :
  202. * 返回   :
  203. * 注意   :
  204. *******************************************************************************/
  205. void CLR_Buf2(void)
  206. {
  207.         u16 k;
  208.         for(k=0;k<Buf2_Max;k++)      //将缓存内容清零
  209.         {
  210.                 Uart2_Buf[k] = 0x00;
  211.         }
  212.   p1=Uart2_Buf;               //接收字符串的起始存储位置
  213. }

  214. /*******************************************************************************
  215. * 函数名 : Find
  216. * 描述   : 判断缓存中是否含有指定的字符串
  217. * 输入   :
  218. * 输出   :
  219. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  220. * 注意   :
  221. *******************************************************************************/

  222. u8 Find(char *a)
  223. {
  224.   if(strstr(Uart2_Buf,a)!=NULL)
  225.             return 1;
  226.         else
  227.                         return 0;
  228. }

  229. /*******************************************************************************
  230. * 函数名 : Second_AT_Command
  231. * 描述   : 发送AT指令函数
  232. * 输入   : 发送数据的指针、发送等待时间(单位:S)
  233. * 输出   :
  234. * 返回   :
  235. * 注意   :
  236. *******************************************************************************/

  237. void Second_AT_Command(char *b,char *a,u8 wait_time)         
  238. {
  239.         u8 i;
  240.         char *c;
  241.         c = b;                                                                                //保存字符串地址到c
  242.         CLR_Buf2();
  243.   i = 0;
  244.         while(i == 0)                    
  245.         {
  246.                 if(!Find(a))
  247.                 {
  248.                         if(Timer0_start == 0)
  249.                         {
  250.                                 b = c;                                                        //将字符串地址给b
  251.                                 for (; *b!='\0';b++)
  252.                                 {
  253.                                         while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
  254.                                         USART_SendData(USART2,*b);//UART2_SendData(*b);
  255.                                 }
  256.                                 UART2_SendLR();        
  257.                                 Times = 0;
  258.                                 shijian = wait_time;
  259.                                 Timer0_start = 1;
  260.                    }
  261.     }
  262.            else
  263.                 {
  264.                         i = 1;
  265.                         Timer0_start = 0;
  266.                 }
  267.         }
  268.         CLR_Buf2();
  269. }

  270. /*******************************************************************************
  271. * 函数名 : Wait_CREG
  272. * 描述   : 等待模块注册成功
  273. * 输入   :
  274. * 输出   :
  275. * 返回   :
  276. * 注意   :
  277. *******************************************************************************/
  278. void Wait_CREG(void)
  279. {
  280.         u8 i;
  281.         u8 k;
  282.         i = 0;
  283.   while(i == 0)                                
  284.         {
  285.                 CLR_Buf2();        
  286.                 UART2_SendString("AT+CREG?");   //查询等待模块注册成功
  287.                 UART2_SendLR();
  288.                 Delay_nMs(5000);                                                  
  289.             for(k=0;k<Buf2_Max;k++)                              
  290.             {
  291.                         if(Uart2_Buf[k] == ':')
  292.                         {
  293.                                 if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5'))   //说明注册成功
  294.                                 {
  295.                                         i = 1;
  296.                                         UART1_SendLR();
  297.                                   break;
  298.                                 }
  299.                         }
  300.                 }
  301.                 UART1_SendString("注册中.....");
  302.         }
  303. }

  304. /*******************************************************************************
  305. * 函数名 : Set_ATE0
  306. * 描述   : 取消回显
  307. * 输入   :
  308. * 输出   :
  309. * 返回   :
  310. * 注意   :
  311. *******************************************************************************/
  312. void Set_ATE0(void)
  313. {
  314.         Second_AT_Command("ATE0","OK",3);                                                                //取消回显               
  315. }
  316. /*******************************************************************************
  317. * 函数名 : Connect_Server
  318. * 描述   : GPRS连接服务器函数
  319. * 输入   :
  320. ……………………

  321. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
SIM系列GSM模块例程(STM32).7z (249.72 KB, 下载次数: 745)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:337080 发表于 2018-5-24 10:06 | 只看该作者
学习一下,感谢分享
回复

使用道具 举报

板凳
ID:145750 发表于 2018-5-29 16:07 | 只看该作者
好好学习,天天向上!
回复

使用道具 举报

地板
ID:341998 发表于 2018-5-31 10:35 | 只看该作者
看下行不行
回复

使用道具 举报

5#
ID:156653 发表于 2018-7-5 23:34 | 只看该作者
赞一个!!!!!
回复

使用道具 举报

6#
ID:159271 发表于 2018-7-14 12:01 | 只看该作者
谢谢楼主!
回复

使用道具 举报

7#
ID:379678 发表于 2018-7-27 00:36 | 只看该作者
谢谢楼主
回复

使用道具 举报

8#
ID:364328 发表于 2018-7-29 16:53 | 只看该作者
楼主用的什莫板子啊
回复

使用道具 举报

9#
ID:159271 发表于 2018-8-9 18:36 | 只看该作者
很好的资料
回复

使用道具 举报

10#
ID:339027 发表于 2018-8-11 10:58 | 只看该作者
谢谢非常不错
回复

使用道具 举报

11#
ID:341045 发表于 2018-8-11 18:04 | 只看该作者
收藏备用,谢谢分享
回复

使用道具 举报

12#
无效楼层,该帖已经被删除
13#
ID:391536 发表于 2018-8-30 14:26 | 只看该作者
楼主好人!
回复

使用道具 举报

14#
ID:391536 发表于 2018-8-31 13:50 | 只看该作者
学习一下,感谢分享
回复

使用道具 举报

15#
ID:80456 发表于 2018-9-13 10:15 | 只看该作者
感谢分享,下载看看
回复

使用道具 举报

16#
ID:412317 发表于 2018-10-19 15:53 | 只看该作者
学习一下
回复

使用道具 举报

17#
ID:435823 发表于 2018-11-29 16:02 | 只看该作者
很好的资料,学习了
回复

使用道具 举报

18#
ID:64178 发表于 2018-12-11 09:01 | 只看该作者
谢谢LZ分享,先下载
回复

使用道具 举报

19#
ID:468339 发表于 2019-1-15 10:18 | 只看该作者
我想看看,好程序,谢谢楼主
回复

使用道具 举报

20#
无效楼层,该帖已经被删除
21#
ID:301623 发表于 2019-3-1 23:19 | 只看该作者

学习学习,感谢分享
回复

使用道具 举报

22#
ID:324649 发表于 2019-3-5 14:52 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

23#
ID:365724 发表于 2019-3-5 16:36 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

24#
ID:365724 发表于 2019-3-5 16:37 | 只看该作者
我想看看,好程序,谢谢楼主
回复

使用道具 举报

25#
ID:485411 发表于 2019-3-24 15:32 | 只看该作者
研究研究 谢谢大佬分享
回复

使用道具 举报

26#
ID:498897 发表于 2019-3-27 09:19 | 只看该作者

能下载吗?
回复

使用道具 举报

27#
ID:506025 发表于 2019-4-7 00:26 来自手机 | 只看该作者
难得的资料 需要下载了
回复

使用道具 举报

28#
无效楼层,该帖已经被删除
29#
ID:550060 发表于 2019-5-29 11:57 | 只看该作者
难得的资料 需要下载了
回复

使用道具 举报

30#
ID:421518 发表于 2019-5-30 14:22 | 只看该作者
学习学习,谢谢楼主
回复

使用道具 举报

31#
ID:576684 发表于 2019-7-2 20:14 | 只看该作者
正在学习STM32
回复

使用道具 举报

32#
ID:101532 发表于 2019-7-9 10:54 | 只看该作者
谢谢分享,目前这块想搞下
回复

使用道具 举报

33#
ID:309115 发表于 2019-7-19 10:47 | 只看该作者
谢谢楼主
回复

使用道具 举报

34#
ID:220026 发表于 2019-7-20 14:23 | 只看该作者
谢谢提供
回复

使用道具 举报

35#
ID:302666 发表于 2019-7-20 15:25 | 只看该作者
谢谢版主
回复

使用道具 举报

36#
ID:190145 发表于 2019-8-5 21:15 | 只看该作者
下来研究下,谢谢分享!
回复

使用道具 举报

37#
ID:601536 发表于 2019-8-28 09:50 | 只看该作者
楼主能分享一下硬件电路吗?
回复

使用道具 举报

38#
ID:431829 发表于 2019-8-28 13:26 | 只看该作者
很有用,感谢!
回复

使用道具 举报

39#
ID:230666 发表于 2019-10-17 11:03 | 只看该作者
谢谢楼主
回复

使用道具 举报

40#
ID:621258 发表于 2019-11-25 09:41 | 只看该作者
学习一下,感谢分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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