久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3278|回復: 1
收起左側

SIM系列GSM模塊手機短信控制LED的亮滅等STM32代碼

[復制鏈接]
ID:450884 發表于 2018-12-20 16:59 | 顯示全部樓層 |閱讀模式
0.png


本程序通過手機短信控制LED的亮滅
使用單片機串口2與模塊通信;接法如下
    STM32      GPRS模塊
    PA3 (RXD2)->RXD
    PA2 (TXD2)->TXD
    GND      ->GND
1、板子上電后運行指示燈RUNING_LED會以一秒的頻率閃爍;
2、通過芯片的串口1可以監視模塊的登錄情況;
3、手機發送“onled”點亮LED;
4、手機發送“offled”熄滅LED;
5、使用串口2與模塊通信,串口1用于將信息打印輸出。

單片機源程序如下:
  1. /**********************************************************************************
  2. * 工程名  :
  3. * 描述    :通過手機發送短信控制LED
  4. * 實驗平臺:STM32F10X
  5. * 庫版本  :

  6. **********************************************************************************/

  7. #include "stm32f10x.h"
  8. #include "usart.h"
  9. #include "Led.h"
  10. #include "SysTick.h"
  11. #include "timer.h"
  12. #include "string.h"

  13. #define Automatic_Startup 1     //定義自啟動 V1.2版本起有自啟動功能

  14. //#define Buf1_Max 60                                           //串口1緩存長度
  15. #define Buf2_Max 200                                           //串口2緩存長度
  16. /*************        本地常量聲明        **************/


  17. /*************  本地變量聲明        **************/
  18. //char Uart1_Buf[Buf1_Max];
  19. char Uart2_Buf[Buf2_Max];

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

  21. vu8 Timer0_start;        //定時器0延時啟動計數器
  22. vu8 Uart2_Start;        //串口2開始接收數據
  23. vu8 Uart2_End;          //串口2接收數據結束


  24. /*************        本地函數聲明        **************/
  25. void CLR_Buf2(void);
  26. u8 Find(char *a);
  27. void Second_AT_Command(char *b,u8 wait_time);
  28. void Set_Text_Mode(void);
  29. void Check_New_Message(void);
  30. void Wait_CREG(void);

  31. /*************  外部函數和變量聲明*****************/




  32. /*******************************************************************************
  33. * 函數名 : main
  34. * 描述   : 主函數
  35. * 輸入   :
  36. * 輸出   :
  37. * 返回   :
  38. * 注意   : 串口2負責與GPRS模塊通信,串口1用于串口調試,可以避免在下載程序時數據
  39.                                          還發送到模塊
  40. *******************************************************************************/
  41. int main(void)
  42. {
  43.         SysTick_Init_Config();
  44.         GPIO_Config();
  45.         
  46.         USART1_Init_Config(115200);
  47.         USART2_Init_Config(115200);
  48.         Timer2_Init_Config();
  49.         UART1_SendString("GPRS模塊短信測試程序\r\n");
  50.         UART1_SendString("GPRS模塊在注冊網絡\r\n");
  51.         Wait_CREG();
  52.         UART1_SendString("GPRS模塊注冊成功\r\n");
  53.         UART1_SendString("GPRS模塊短信模式設置\r\n");
  54.         Set_Text_Mode();
  55.         UART1_SendString("設置成功,短信模式:TEXT\r\n");
  56.         //Second_AT_Command("AT+CMGD=1,4",3);//刪除卡上所有短信
  57.         
  58.         UART1_SendString("初始化完成\r\n");
  59.         while(1)
  60.         {
  61.                 Check_New_Message();
  62.         }
  63. }

  64. /*******************************************************************************
  65. * 函數名  : USART2_IRQHandler
  66. * 描述    : 串口1中斷服務程序
  67. * 輸入    : 無
  68. * 返回    : 無
  69. * 說明    :
  70. *******************************************************************************/
  71. void USART2_IRQHandler(void)                        
  72. {
  73.                         u8 Res=0;
  74.                         Res =USART_ReceiveData(USART2);
  75.                         Uart2_Buf[First_Int] = Res;            //將接收到的字符串存到緩存中
  76.                         First_Int++;                                        //緩存指針向后移動
  77.                         if(First_Int > Buf2_Max)                       //如果緩存滿,將緩存指針指向緩存的首地址
  78.                         {
  79.                                 First_Int = 0;
  80.                         }   
  81. }         

  82. /*******************************************************************************
  83. * 函數名  : TIM2_IRQHandler
  84. * 描述    : 定時器2中斷斷服務函數
  85. * 輸入    : 無
  86. * 輸出    : 無
  87. * 返回    : 無
  88. * 說明    : 無
  89. *******************************************************************************/
  90. void TIM2_IRQHandler(void)   //TIM3中斷
  91. {
  92.         static u8 flag =1;

  93.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //檢查TIM3更新中斷發生與否
  94.         {
  95.                
  96.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx更新中斷標志
  97.                
  98.                 if(Timer0_start)
  99.                 Times++;
  100.                 if(Times > shijian)
  101.                 {
  102.                         Timer0_start = 0;
  103.                         Times = 0;
  104.                 }
  105.         
  106.                 if(flag)
  107.                 {
  108.                         LED4_ON();
  109.                         flag=0;
  110.                 }
  111.                 else
  112.                 {
  113.                         LED4_OFF();
  114.                         flag=1;
  115.                 }
  116.         }        
  117. }

  118. /*******************************************************************************
  119. * 函數名 : CLR_Buf2
  120. * 描述   : 清除串口2緩存數據
  121. * 輸入   :
  122. * 輸出   :
  123. * 返回   :
  124. * 注意   :
  125. *******************************************************************************/
  126. void CLR_Buf2(void)
  127. {
  128.         u16 k;
  129.         for(k=0;k<Buf2_Max;k++)      //將緩存內容清零
  130.         {
  131.                 Uart2_Buf[k] = 0x00;
  132.         }
  133.     First_Int = 0;              //接收字符串的起始存儲位置
  134. }

  135. /*******************************************************************************
  136. * 函數名 : Find
  137. * 描述   : 判斷緩存中是否含有指定的字符串
  138. * 輸入   :
  139. * 輸出   :
  140. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  141. * 注意   :
  142. *******************************************************************************/

  143. u8 Find(char *a)
  144. {
  145.   if(strstr(Uart2_Buf,a)!=NULL)
  146.             return 1;
  147.         else
  148.                         return 0;
  149. }

  150. /*******************************************************************************
  151. * 函數名 : Second_AT_Command
  152. * 描述   : 發送AT指令函數
  153. * 輸入   : 發送數據的指針、發送等待時間(單位:S)
  154. * 輸出   :
  155. * 返回   :
  156. * 注意   :
  157. *******************************************************************************/

  158. void Second_AT_Command(char *b,u8 wait_time)         
  159. {
  160.         u8 i;
  161.         char *c;
  162.         c = b;                                                                                //保存字符串地址到c
  163.         CLR_Buf2();
  164.   i = 0;
  165.         while(i == 0)                    
  166.         {
  167.                 if(!Find("OK"))
  168.                 {
  169.                         if(Timer0_start == 0)
  170.                         {
  171.                                 b = c;                                                        //將字符串地址給b
  172.                                 for (; *b!='\0';b++)
  173.                                 {
  174.                                         while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
  175.                                         USART_SendData(USART2,*b);//UART2_SendData(*b);
  176.                                 }
  177.                                 UART2_SendLR();        
  178.                                 Times = 0;
  179.                                 shijian = wait_time;
  180.                                 Timer0_start = 1;
  181.                    }
  182.     }
  183.            else
  184.                 {
  185.                         i = 1;
  186.                         Timer0_start = 0;
  187.                 }
  188.         }
  189.         CLR_Buf2();
  190. }

  191. /*******************************************************************************
  192. * 函數名 : Set_Text_Mode
  193. * 描述   : 設置短信為TEXT文本模式
  194. * 輸入   :
  195. * 輸出   :
  196. * 返回   :
  197. * 注意   :
  198. *******************************************************************************/
  199. void Set_Text_Mode(void)
  200. {
  201.         Second_AT_Command("ATE0",3);                                                                                //取消回顯        
  202.         Second_AT_Command("AT+CNMI=3,2,0,0,0",3);                                                        //新短信直接輸出
  203.         Second_AT_Command("AT+CMGF=1",3);                                                                //TEXT模式        
  204.         Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"",3);                //所有操作都在SIM卡中進行        
  205. }

  206. /*******************************************************************************
  207. * 函數名 : Check_Message_rec
  208. * 描述   : 檢查是否有新信息,并執行信息內容指令
  209. * 輸入   :
  210. * 輸出   :
  211. * 返回   :
  212. * 注意   :
  213. *******************************************************************************/

  214. void Check_New_Message(void)
  215. {
  216.         if(strstr(Uart2_Buf,"+CMT")!=NULL)                   //若緩存字符串中含有"+CMT"就表示有新的短信
  217.         {
  218.                 Delay_nMs(50);//等待數據全部接收完成
  219.                 UART1_SendString("收到新短信:\r\n");
  220.                 UART1_SendString(Uart2_Buf);                        //把模塊返回的信息原樣輸出
  221.                 if(strstr(Uart2_Buf,"onled")!=NULL)
  222.                 {
  223.                         LED1_ON();
  224.                 }
  225.                 if(strstr(Uart2_Buf,"offled")!=NULL)
  226.                 {
  227.                         LED1_OFF();
  228.                 }
  229.                 CLR_Buf2();
  230.                 //Second_AT_Command("AT+CMGD=1,4",3);//刪除短信
  231.         }
  232. }

  233. /*******************************************************************************
  234. * 函數名 : Wait_CREG
  235. * 描述   : 等待模塊注冊成功
  236. ……………………

  237. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
SIM系列GSM模塊例程(STM32).7z (268.96 KB, 下載次數: 66)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:583243 發表于 2019-7-13 11:22 | 顯示全部樓層
太好了,感謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线播放视频 | 亚洲成av人片在线观看 | 亚洲精品乱码 | 男女免费视频网站 | 国产黄色麻豆视频 | 成人av电影在线 | 日本一区二区影视 | 日本久久黄色 | 国产精品美女久久久久久免费 | 一本岛道一二三不卡区 | 中文在线一区二区 | 夜夜精品浪潮av一区二区三区 | 黄一区二区三区 | av成人在线观看 | 国产高清视频在线观看播放 | 久久久久国产一级毛片高清网站 | 91精品国产91久久久久久不卞 | 蜜桃视频在线观看免费视频网站www | 欧美中文字幕一区 | 免费网站国产 | 国产亚洲精品久久久久久牛牛 | 中文字幕在线二区 | 亚洲精品一区二三区不卡 | 视频在线观看一区二区 | 日本成人免费观看 | 亚洲性视频 | 日韩高清中文字幕 | 男人的天堂久久 | 久久久久久高清 | 精品国产区 | 国产精品久久久久影院色老大 | 日韩欧美视频 | 国产精品久久久久一区二区三区 | 欧美日本在线 | 成人h片在线观看 | 伊人精品国产 | 日韩精品在线看 | 日韩看片 | 羞羞视频在线观看网站 | 欧美国产视频一区二区 | 97人澡人人添人人爽欧美 |