找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 8492|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

GPRS A6 A7開(kāi)發(fā)板原理圖、stm32/51單片機(jī)代碼及相關(guān)工具軟件

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
安可信 GPRS A6 A7 開(kāi)發(fā)板原理圖、51/stm32代碼及相關(guān)工具。AT指令,51和stm32源代碼,以及使用手冊(cè),測(cè)試工具。


里面帶GPRS A6 A7開(kāi)發(fā)板原理圖和封裝庫(kù):Goouuu-GPRSModel-A7封裝庫(kù).PcbLib

工具軟件:

PDU短信編碼器.zip
SOCKET調(diào)試助手.rar
sscom42.zip
果云A6調(diào)試助手.rar


手冊(cè):

Goouuu_A6模塊使用手冊(cè)..pdf
安信可GSM GPRS A6_A7_A6C模組用戶(hù)開(kāi)發(fā)手冊(cè)20160721.pdf


51單片機(jī)和stm32單片機(jī)源碼:

1.撥打電話(huà).rar
2.發(fā)送TEXT短信.rar
3.發(fā)送中文短信.rar
4.接收短信控制LED燈.rar


以下是部分源碼預(yù)覽:
本程序通過(guò)手機(jī)短信控制LED的亮滅
使用單片機(jī)串口2與模塊通信;接法如下
        STC單片機(jī)   GPRS模塊
        P1.2(RXD2)->RXD
        P1.3(TXD2)->TXD
        GND          ->GND
1、板子上電后運(yùn)行指示燈RUNING_LED會(huì)以一秒的頻率閃爍;
2、通過(guò)芯片的串口1可以監(jiān)視模塊的登錄情況;
3、手機(jī)發(fā)送“onled”點(diǎn)亮LED;
4、手機(jī)發(fā)送“offled”熄滅LED;
5、使用串口2與模塊通信,串口1用于將信息打印輸出。

單片機(jī)源程序如下:
  1. /**********************************************************************************
  2.    STM32F103C8T6  
  3.          
  4.          GSM 短信控制
  5.          
  6. * 硬件連接說(shuō)明
  7.          使用單片串口2與GPRS模塊通信  注:使用串口2可以避免下載和通信不會(huì)沖突
  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.          指令: 發(fā)送短信到模塊
  18.          led1on   --- LED1  打開(kāi)
  19.          led1off  --- LED1  關(guān)閉
  20.          led2on   --- LED2  打開(kāi)
  21.          led2off  --- LED2  關(guān)閉
  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     //定義自啟動(dòng) V1.2版本起有自啟動(dòng)功能

  30. //#define Buf1_Max 60                                           //串口1緩存長(zhǎng)度
  31. #define Buf2_Max 200                                           //串口2緩存長(zhǎng)度
  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;        //定時(shí)器0延時(shí)啟動(dòng)計(jì)數(shù)器
  38. vu8 Uart2_Start;        //串口2開(kāi)始接收數(shù)據(jù)
  39. vu8 Uart2_End;          //串口2接收數(shù)據(jù)結(jié)束


  40. /*************        本地函數(shù)聲明        **************/
  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. /*************  外部函數(shù)和變量聲明*****************/




  48. /*******************************************************************************
  49. * 函數(shù)名 : main
  50. * 描述   : 主函數(shù)
  51. * 輸入   :
  52. * 輸出   :
  53. * 返回   :
  54. * 注意   : 串口2負(fù)責(zé)與GPRS模塊通信,串口1用于串口調(diào)試,可以避免在下載程序時(shí)數(shù)據(jù)
  55.                                          還發(fā)送到模塊
  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模塊短信測(cè)試程序\r\n");
  66.         UART1_SendString("GPRS模塊在注冊(cè)網(wǎng)絡(luò)\r\n");
  67.         Wait_CREG();
  68.         UART1_SendString("GPRS模塊注冊(cè)成功\r\n");
  69.         UART1_SendString("GPRS模塊短信模式設(shè)置\r\n");
  70.         Set_Text_Mode();
  71.         UART1_SendString("設(shè)置成功,短信模式:TEXT\r\n");

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

  78. /*******************************************************************************
  79. * 函數(shù)名  : USART2_IRQHandler
  80. * 描述    : 串口1中斷服務(wù)程序
  81. * 輸入    : 無(wú)
  82. * 返回    : 無(wú)
  83. * 說(shuō)明    :
  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++;                                        //緩存指針向后移動(dòng)
  91.                         if(First_Int > Buf2_Max)                       //如果緩存滿(mǎn),將緩存指針指向緩存的首地址
  92.                         {
  93.                                 First_Int = 0;
  94.                         }   
  95. }         

  96. /*******************************************************************************
  97. * 函數(shù)名  : TIM2_IRQHandler
  98. * 描述    : 定時(shí)器2中斷斷服務(wù)函數(shù)
  99. * 輸入    : 無(wú)
  100. * 輸出    : 無(wú)
  101. * 返回    : 無(wú)
  102. * 說(shuō)明    : 無(wú)
  103. *******************************************************************************/
  104. void TIM2_IRQHandler(void)   //TIM3中斷
  105. {
  106.         static u8 flag =1;

  107.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //檢查T(mén)IM3更新中斷發(fā)生與否
  108.         {
  109.                
  110.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx更新中斷標(biāo)志
  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. * 函數(shù)名 : CLR_Buf2
  134. * 描述   : 清除串口2緩存數(shù)據(jù)
  135. * 輸入   :
  136. * 輸出   :
  137. * 返回   :
  138. * 注意   :
  139. *******************************************************************************/
  140. void CLR_Buf2(void)
  141. {
  142.         u16 k;
  143.         for(k=0;k<Buf2_Max;k++)      //將緩存內(nèi)容清零
  144.         {
  145.                 Uart2_Buf[k] = 0x00;
  146.         }
  147.     First_Int = 0;              //接收字符串的起始存儲(chǔ)位置
  148. }

  149. /*******************************************************************************
  150. * 函數(shù)名 : 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. * 函數(shù)名 : Second_AT_Command
  166. * 描述   : 發(fā)送AT指令函數(shù)
  167. * 輸入   : 發(fā)送數(shù)據(jù)的指針、發(fā)送等待時(shí)間(單位: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. * 函數(shù)名 : Set_Text_Mode
  207. * 描述   : 設(shè)置短信為T(mén)EXT文本模式
  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);                                                      //短信模式設(shè)置為T(mén)EXT
  217. }

  218. /*******************************************************************************
  219. * 函數(shù)名 : Check_Message_rec
  220. * 描述   : 檢查是否有新信息,并執(zhí)行信息內(nèi)容指令
  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. * 函數(shù)名 : Wait_CREG
  255. ……………………

  256. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
GPRS A6,A7資料.7z (10.88 MB, 下載次數(shù): 198)


評(píng)分

參與人數(shù) 2黑幣 +55 收起 理由
ssvv + 5 共享資料的黑幣獎(jiǎng)勵(lì)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 2#
ID:288583 發(fā)表于 2018-3-27 23:03 | 只看該作者
void Second_AT_Command(char *b,char *a,u8 wait_time) 這個(gè)函數(shù)是用來(lái)干嘛的?
u8 Find(char *a)這個(gè)函數(shù)查找是否含有指定的字符串,指定的字符串是啥?
定時(shí)中斷函數(shù)在這里是用來(lái)控制什么的?
不是很理解,求解答,感謝
回復(fù)

使用道具 舉報(bào)

板凳
ID:250019 發(fā)表于 2018-2-1 08:39 | 只看該作者
非常感謝!
回復(fù)

使用道具 舉報(bào)

地板
ID:308085 發(fā)表于 2018-4-14 17:01 | 只看該作者
非常感謝!
回復(fù)

使用道具 舉報(bào)

5#
ID:330457 發(fā)表于 2018-5-15 15:15 | 只看該作者
非常感謝!�。。。。。。。。。。。。。。。。。。。。�!
回復(fù)

使用道具 舉報(bào)

6#
ID:95072 發(fā)表于 2018-6-29 21:43 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

7#
ID:90353 發(fā)表于 2020-3-24 22:40 | 只看該作者
thank you very much
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表