找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7038|回复: 6
收起左侧

GPRS A6 A7开发板原理图、stm32/51单片机代码及相关工具软件

  [复制链接]
ID:209529 发表于 2017-6-10 11:29 | 显示全部楼层 |阅读模式
安可信 GPRS A6 A7 开发板原理图、51/stm32代码及相关工具。AT指令,51和stm32源代码,以及使用手册,测试工具。
0.png

里面带GPRS A6 A7开发板原理图和封装库:Goouuu-GPRSModel-A7封装库.PcbLib 0.png

工具软件:

PDU短信编码器.zip
SOCKET调试助手.rar
sscom42.zip
果云A6调试助手.rar


手册:

Goouuu_A6模块使用手册..pdf
安信可GSM GPRS A6_A7_A6C模组用户开发手册20160721.pdf


51单片机和stm32单片机源码:

1.拨打电话.rar
2.发送TEXT短信.rar
3.发送中文短信.rar
4.接收短信控制LED灯.rar


以下是部分源码预览:
本程序通过手机短信控制LED的亮灭
使用单片机串口2与模块通信;接法如下
        STC单片机   GPRS模块
        P1.2(RXD2)->RXD
        P1.3(TXD2)->TXD
        GND          ->GND
1、板子上电后运行指示灯RUNING_LED会以一秒的频率闪烁;
2、通过芯片的串口1可以监视模块的登录情况;
3、手机发送“onled”点亮LED;
4、手机发送“offled”熄灭LED;
5、使用串口2与模块通信,串口1用于将信息打印输出。

单片机源程序如下:
  1. /**********************************************************************************
  2.    STM32F103C8T6  
  3.          
  4.          GSM 短信控制
  5.          
  6. * 硬件连接说明
  7.          使用单片串口2与GPRS模块通信  注:使用串口2可以避免下载和通信不会冲突
  8.          STM32      GPRS模块
  9.          PA3 (RXD2)->RXD
  10.          PA2 (TXD2)->TXD
  11.          GND              ->GND

  12.    PA9 PA10 串口1
  13.          
  14.    PB5 LED1 指示灯1
  15.    PB6 LED2 指示灯2         
  16.          
  17.          指令: 发送短信到模块
  18.          led1on   --- LED1  打开
  19.          led1off  --- LED1  关闭
  20.          led2on   --- LED2  打开
  21.          led2off  --- LED2  关闭
  22. **********************************************************************************/

  23. #include "stm32f10x.h"
  24. #include "usart.h"
  25. #include "Led.h"
  26. #include "SysTick.h"
  27. #include "timer.h"
  28. #include "string.h"

  29. #define Automatic_Startup 1     //定义自启动 V1.2版本起有自启动功能

  30. //#define Buf1_Max 60                                           //串口1缓存长度
  31. #define Buf2_Max 200                                           //串口2缓存长度
  32. /*************        本地常量声明        **************/


  33. /*************  本地变量声明        **************/
  34. //char Uart1_Buf[Buf1_Max];
  35. char Uart2_Buf[Buf2_Max];

  36. u8 Times=0,First_Int = 0,shijian=0;

  37. vu8 Timer0_start;        //定时器0延时启动计数器
  38. vu8 Uart2_Start;        //串口2开始接收数据
  39. vu8 Uart2_End;          //串口2接收数据结束


  40. /*************        本地函数声明        **************/
  41. void CLR_Buf2(void);
  42. u8 Find(char *a);
  43. void Second_AT_Command(char *b,u8 wait_time);
  44. void Set_Text_Mode(void);
  45. void Check_New_Message(void);
  46. void Wait_CREG(void);

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




  48. /*******************************************************************************
  49. * 函数名 : main
  50. * 描述   : 主函数
  51. * 输入   :
  52. * 输出   :
  53. * 返回   :
  54. * 注意   : 串口2负责与GPRS模块通信,串口1用于串口调试,可以避免在下载程序时数据
  55.                                          还发送到模块
  56. *******************************************************************************/
  57. int main(void)
  58. {
  59.         SysTick_Init_Config();
  60.         GPIO_Config();
  61.         
  62.         USART1_Init_Config(115200);
  63.         USART2_Init_Config(115200);
  64.         Timer2_Init_Config();
  65.         UART1_SendString("GPRS模块短信测试程序\r\n");
  66.         UART1_SendString("GPRS模块在注册网络\r\n");
  67.         Wait_CREG();
  68.         UART1_SendString("GPRS模块注册成功\r\n");
  69.         UART1_SendString("GPRS模块短信模式设置\r\n");
  70.         Set_Text_Mode();
  71.         UART1_SendString("设置成功,短信模式:TEXT\r\n");

  72.         UART1_SendString("初始化完成\r\n");
  73.         while(1)
  74.         {
  75.                 Check_New_Message();
  76.         }
  77. }

  78. /*******************************************************************************
  79. * 函数名  : USART2_IRQHandler
  80. * 描述    : 串口1中断服务程序
  81. * 输入    : 无
  82. * 返回    : 无
  83. * 说明    :
  84. *******************************************************************************/
  85. void USART2_IRQHandler(void)                        
  86. {
  87.                         u8 Res=0;
  88.                         Res =USART_ReceiveData(USART2);
  89.                         Uart2_Buf[First_Int] = Res;            //将接收到的字符串存到缓存中
  90.                         First_Int++;                                        //缓存指针向后移动
  91.                         if(First_Int > Buf2_Max)                       //如果缓存满,将缓存指针指向缓存的首地址
  92.                         {
  93.                                 First_Int = 0;
  94.                         }   
  95. }         

  96. /*******************************************************************************
  97. * 函数名  : TIM2_IRQHandler
  98. * 描述    : 定时器2中断断服务函数
  99. * 输入    : 无
  100. * 输出    : 无
  101. * 返回    : 无
  102. * 说明    : 无
  103. *******************************************************************************/
  104. void TIM2_IRQHandler(void)   //TIM3中断
  105. {
  106.         static u8 flag =1;

  107.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
  108.         {
  109.                
  110.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx更新中断标志
  111.                
  112.                 if(Timer0_start)
  113.                 Times++;
  114.                 if(Times > shijian)
  115.                 {
  116.                         Timer0_start = 0;
  117.                         Times = 0;
  118.                 }
  119.         
  120.                 if(flag)
  121.                 {
  122.                         LED4_ON();
  123.                         flag=0;
  124.                 }
  125.                 else
  126.                 {
  127.                         LED4_OFF();
  128.                         flag=1;
  129.                 }
  130.         }        
  131. }

  132. /*******************************************************************************
  133. * 函数名 : CLR_Buf2
  134. * 描述   : 清除串口2缓存数据
  135. * 输入   :
  136. * 输出   :
  137. * 返回   :
  138. * 注意   :
  139. *******************************************************************************/
  140. void CLR_Buf2(void)
  141. {
  142.         u16 k;
  143.         for(k=0;k<Buf2_Max;k++)      //将缓存内容清零
  144.         {
  145.                 Uart2_Buf[k] = 0x00;
  146.         }
  147.     First_Int = 0;              //接收字符串的起始存储位置
  148. }

  149. /*******************************************************************************
  150. * 函数名 : Find
  151. * 描述   : 判断缓存中是否含有指定的字符串
  152. * 输入   :
  153. * 输出   :
  154. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  155. * 注意   :
  156. *******************************************************************************/

  157. u8 Find(char *a)
  158. {
  159.   if(strstr(Uart2_Buf,a)!=NULL)
  160.             return 1;
  161.         else
  162.                         return 0;
  163. }

  164. /*******************************************************************************
  165. * 函数名 : Second_AT_Command
  166. * 描述   : 发送AT指令函数
  167. * 输入   : 发送数据的指针、发送等待时间(单位:S)
  168. * 输出   :
  169. * 返回   :
  170. * 注意   :
  171. *******************************************************************************/

  172. void Second_AT_Command(char *b,u8 wait_time)         
  173. {
  174.         u8 i;
  175.         char *c;
  176.         c = b;                                                                                //保存字符串地址到c
  177.         CLR_Buf2();
  178.   i = 0;
  179.         while(i == 0)                    
  180.         {
  181.                 if(!Find("OK"))
  182.                 {
  183.                         if(Timer0_start == 0)
  184.                         {
  185.                                 b = c;                                                        //将字符串地址给b
  186.                                 for (; *b!='\0';b++)
  187.                                 {
  188.                                         while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
  189.                                         USART_SendData(USART2,*b);//UART2_SendData(*b);
  190.                                 }
  191.                                 UART2_SendLR();        
  192.                                 Times = 0;
  193.                                 shijian = wait_time;
  194.                                 Timer0_start = 1;
  195.                    }
  196.     }
  197.            else
  198.                 {
  199.                         i = 1;
  200.                         Timer0_start = 0;
  201.                 }
  202.         }
  203.         CLR_Buf2();
  204. }

  205. /*******************************************************************************
  206. * 函数名 : Set_Text_Mode
  207. * 描述   : 设置短信为TEXT文本模式
  208. * 输入   :
  209. * 输出   :
  210. * 返回   :
  211. * 注意   :
  212. *******************************************************************************/
  213. void Set_Text_Mode(void)
  214. {
  215.         Second_AT_Command("ATE0",3);                                                                                  //取消回显        
  216.         Second_AT_Command("AT+CMGF=1",3);                                                      //短信模式设置为TEXT
  217. }

  218. /*******************************************************************************
  219. * 函数名 : Check_Message_rec
  220. * 描述   : 检查是否有新信息,并执行信息内容指令
  221. * 输入   :
  222. * 输出   :
  223. * 返回   :
  224. * 注意   :
  225. *******************************************************************************/

  226. void Check_New_Message(void)
  227. {
  228.         if(strstr(Uart2_Buf,"+CMT:")!=NULL)                   //若缓存字符串中含有"+CMT:"就表示有新的短信
  229.         {
  230.                
  231.                 UART1_SendString("收到新短信:\r\n");
  232.                 UART1_SendString(Uart2_Buf);                        //把模块返回的信息原样输出
  233.                 if(strstr(Uart2_Buf,"led1on")!=NULL)
  234.                 {
  235.                         LED1_ON();
  236.                 }
  237.                 if(strstr(Uart2_Buf,"led1off")!=NULL)
  238.                 {
  239.                         LED1_OFF();
  240.                 }
  241.                 if(strstr(Uart2_Buf,"led2on")!=NULL)
  242.                 {
  243.                         LED2_ON();
  244.                 }
  245.                 if(strstr(Uart2_Buf,"led2off")!=NULL)
  246.                 {
  247.                         LED2_OFF();
  248.                 }
  249.                  CLR_Buf2();
  250.                  
  251.         }
  252. }

  253. /*******************************************************************************
  254. * 函数名 : Wait_CREG
  255. ……………………

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

所有资料51hei提供下载:
GPRS A6,A7资料.7z (10.88 MB, 下载次数: 197)

评分

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

查看全部评分

回复

使用道具 举报

ID:288583 发表于 2018-3-27 23:03 | 显示全部楼层
void Second_AT_Command(char *b,char *a,u8 wait_time) 这个函数是用来干嘛的?
u8 Find(char *a)这个函数查找是否含有指定的字符串,指定的字符串是啥?
定时中断函数在这里是用来控制什么的?
不是很理解,求解答,感谢
回复

使用道具 举报

ID:250019 发表于 2018-2-1 08:39 | 显示全部楼层
非常感谢!
回复

使用道具 举报

ID:308085 发表于 2018-4-14 17:01 | 显示全部楼层
非常感谢!
回复

使用道具 举报

ID:330457 发表于 2018-5-15 15:15 | 显示全部楼层
非常感谢!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

ID:95072 发表于 2018-6-29 21:43 | 显示全部楼层
非常感谢
回复

使用道具 举报

ID:90353 发表于 2020-3-24 22:40 | 显示全部楼层
thank you very much
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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