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

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

QQ登錄

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

搜索
查看: 12355|回復(fù): 12
收起左側(cè)

stm32+sim800c發(fā)中文短信源程序

  [復(fù)制鏈接]
ID:473473 發(fā)表于 2019-1-27 23:04 | 顯示全部樓層 |閱讀模式
sim800c用pdu方式發(fā)送短信,很簡(jiǎn)單,下面是例程

單片機(jī)源程序如下:
  1. /**********************************************************************************
  2. * 工程名  :發(fā)送中文短信
  3. * 描述    :通過(guò)STM32開(kāi)發(fā)板控制模塊發(fā)送中文短信
  4. * 實(shí)驗(yàn)平臺(tái):STM32F10X
  5. * 庫(kù)版本  :


  6. * 硬件連接說(shuō)明
  7.          使用單片串口2與GPRS模塊通信  注:使用串口2可以避免下載和通信不會(huì)沖突
  8.          STM32      GPRS模塊
  9.          PA3 (RXD2)->RXD
  10.          PA2 (TXD2)->TXD
  11.          GND             ->GND

  12. * 軟件功能說(shuō)明
  13.    板子上電后運(yùn)行指示燈RUNING_LED會(huì)以一秒的頻率閃爍
  14.          修改短信中心號(hào)、接收方手機(jī)號(hào)和短信內(nèi)容,編譯成功后下載到單片機(jī)里面,就可以實(shí)現(xiàn)
  15.          發(fā)送一條中文短信,中文短信具體的解析可以參考串口調(diào)試筆記
  16. **********************************************************************************/

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


  23. #define Buf2_Max 200                                           //串口2緩存長(zhǎng)度
  24. /*************        本地常量聲明        **************/
  25. static char *content="0891683108706505F011000D91683197985889F90008AA0C6D4B8BD55DF27ECF5B8C6210";//發(fā)送短信內(nèi)容
  26. /************************短信內(nèi)容解析**************************************/
  27. /*
  28.    //短信中心號(hào)(倒序)      目標(biāo)手機(jī)(倒序)         短信內(nèi)容(測(cè)試已經(jīng)完成)
  29.      8613800756500F          8613798985989F         
  30. 0891 683108706505F0 11000D91 683197985889F9 0008AA0C 6D4B8BD55DF27ECF5B8C6210
  31. */
  32. /*************  本地變量聲明        *********************************************/
  33. char Uart2_Buf[Buf2_Max]; //串口2接收緩存
  34. u8 Times=0,First_Int = 0,shijian=0;
  35. vu8 Timer0_start;        //定時(shí)器0延時(shí)啟動(dòng)計(jì)數(shù)器

  36. /*************        本地函數(shù)聲明        **************/
  37. void CLR_Buf2(void);
  38. u8 Find(char *a);
  39. void Second_AT_Command(char *b,char *a,u8 wait_time);
  40. void Wait_CREG(void);
  41. void Set_Pdu_Mode(void);//設(shè)置短信模式PDU
  42. void Send_Pdu_Sms(void);//發(fā)送一條中文短信
  43. /*************  外部函數(shù)和變量聲明*****************/




  44. /*******************************************************************************
  45. * 函數(shù)名 : main
  46. * 描述   : 主函數(shù)
  47. * 輸入   :
  48. * 輸出   :
  49. * 返回   :
  50. * 注意   : 串口2負(fù)責(zé)與MG323模塊通信,串口1用于串口調(diào)試,可以避免在下載程序時(shí)數(shù)據(jù)
  51.                                          還發(fā)送到模塊
  52. *******************************************************************************/
  53. int main(void)
  54. {
  55.         SysTick_Init_Config();
  56.         GPIO_Config();
  57.         
  58.         USART2_Init_Config(115200);
  59.         Timer2_Init_Config();

  60.         Wait_CREG();    //查詢等待模塊注冊(cè)成功

  61.         Set_Pdu_Mode();//設(shè)置短信為PDU模式
  62.   Send_Pdu_Sms();//發(fā)送一條短消息
  63.         while(1)
  64.         {
  65.            ;
  66.         }
  67. }

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

  86. /*******************************************************************************
  87. * 函數(shù)名  : TIM2_IRQHandler
  88. * 描述    : 定時(shí)器2中斷斷服務(wù)函數(shù)
  89. * 輸入    : 無(wú)
  90. * 輸出    : 無(wú)
  91. * 返回    : 無(wú)
  92. * 說(shuō)明    : 無(wú)
  93. *******************************************************************************/
  94. void TIM2_IRQHandler(void)   //TIM3中斷
  95. {
  96.         static u8 flag =1;

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

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

  139. /*******************************************************************************
  140. * 函數(shù)名 : Find
  141. * 描述   : 判斷緩存中是否含有指定的字符串
  142. * 輸入   :
  143. * 輸出   :
  144. * 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
  145. * 注意   :
  146. *******************************************************************************/

  147. u8 Find(char *a)
  148. {
  149.   if(strstr(Uart2_Buf,a)!=NULL)
  150.             return 1;
  151.         else
  152.                         return 0;
  153. }

  154. /*******************************************************************************
  155. * 函數(shù)名 : Second_AT_Command
  156. * 描述   : 發(fā)送AT指令函數(shù)
  157. * 輸入   : 發(fā)送數(shù)據(jù)的指針、希望接收到的應(yīng)答、發(fā)送等待時(shí)間(單位:S)
  158. * 輸出   :
  159. * 返回   :
  160. * 注意   :
  161. *******************************************************************************/

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

  195. /*******************************************************************************
  196. * 函數(shù)名 : Set_Pdu_Mode
  197. * 描述   : 設(shè)置短信為PDU文本模式
  198. * 輸入   :
  199. * 輸出   :
  200. * 返回   :
  201. * 注意   :
  202. *******************************************************************************/
  203. void Set_Pdu_Mode(void)
  204. {
  205.         Second_AT_Command("ATE0","OK",3);                                                                                  //取消回顯        
  206.         Second_AT_Command("AT+CMGF=0","OK",3);                                                                //設(shè)置PDU模式        
  207.         Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);//所有操作都在SIM卡中進(jìn)行
  208. }
  209. /*******************************************************************************
  210. * 函數(shù)名 : Send_Pdu_Sms
  211. * 描述   : 發(fā)送PDU文本短信
  212. * 輸入   :
  213. * 輸出   :
  214. * 返回   :
  215. * 注意   :
  216. *******************************************************************************/
  217. void Send_Pdu_Sms(void)
  218. {

  219.         Second_AT_Command("AT+CMGS=27",">",3); //發(fā)送數(shù)據(jù)長(zhǎng)度:27(具體的計(jì)算方法看串口調(diào)試比較)接收到“>”才發(fā)送短信內(nèi)容
  220.         UART2_SendString(content);     //發(fā)送短信內(nèi)容
  221.         USART_SendData(USART2 ,0X1A);  //發(fā)送結(jié)束符
  222.   UART2_SendLR();
  223. }

  224. /*******************************************************************************
  225. * 函數(shù)名 : Wait_CREG
  226. * 描述   : 等待模塊注冊(cè)成功
  227. * 輸入   :
  228. * 輸出   :
  229. * 返回   :
  230. * 注意   :
  231. *******************************************************************************/
  232. void Wait_CREG(void)
  233. {
  234.         u8 i;
  235.         u8 k;
  236.         i = 0;
  237.         CLR_Buf2();
  238.   while(i == 0)                                
  239.         {
  240.                 CLR_Buf2();        
  241.                 UART2_SendString("AT+CREG?");   //查找模塊是否注冊(cè)成功
  242.                 UART2_SendLR();
  243.                 Delay_nMs(5000);                                                  
  244.             for(k=0;k<Buf2_Max;k++)                              
  245.             {
  246.                         if(Uart2_Buf[k] == ':')
  247.                         {
  248.                                 if((Uart2_Buf[k+4] == '1')||(Uart2_Buf[k+4] == '5'))  //說(shuō)明模塊已經(jīng)注冊(cè)成功
  249.                                 {
  250.                                         i = 1;
  251.                                   break;
  252.                                 }
  253.                         }
  254.                 }
  255.         }
  256. }
復(fù)制代碼

所有資料51hei提供下載:
4.發(fā)送中文短信.7z (187.88 KB, 下載次數(shù): 252)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:477792 發(fā)表于 2019-3-2 11:39 | 顯示全部樓層
這個(gè)挺好的,有試過(guò)長(zhǎng)短信的測(cè)試嗎?
回復(fù)

使用道具 舉報(bào)

ID:116773 發(fā)表于 2019-3-2 14:03 | 顯示全部樓層
好資料,原來(lái)也準(zhǔn)備做,還買了一塊GPRS A6模塊,后來(lái)爛尾了,改天有空時(shí)繼續(xù)玩玩。
回復(fù)

使用道具 舉報(bào)

ID:388859 發(fā)表于 2019-3-11 14:18 | 顯示全部樓層
如果是模塊發(fā)送短信到手機(jī),手機(jī)會(huì)顯示什么內(nèi)容?
回復(fù)

使用道具 舉報(bào)

ID:226658 發(fā)表于 2019-3-11 15:57 | 顯示全部樓層
好資料,先學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:81544 發(fā)表于 2019-3-20 10:43 | 顯示全部樓層
好好好,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:575960 發(fā)表于 2019-7-1 21:54 | 顯示全部樓層
非常感謝!
回復(fù)

使用道具 舉報(bào)

ID:44626 發(fā)表于 2019-9-12 14:32 | 顯示全部樓層
這個(gè)程序不好用,我下載試過(guò)了
回復(fù)

使用道具 舉報(bào)

ID:741708 發(fā)表于 2020-4-30 14:44 | 顯示全部樓層
這個(gè)工程是STM32給GSM模塊一條指令后,GSM模塊直接發(fā)送一條短信到手機(jī)的吧?我用的是STM32F103跟sim800cGSM模塊,我弄的程序跟你這個(gè)感覺(jué)差不多,但是實(shí)現(xiàn)不了發(fā)送短信到手機(jī),不知道什么原因,查不出來(lái)。
回復(fù)

使用道具 舉報(bào)

ID:569445 發(fā)表于 2020-5-14 19:38 | 顯示全部樓層
為什么總是出不去Second_AT_Command函數(shù)了?
回復(fù)

使用道具 舉報(bào)

ID:279416 發(fā)表于 2020-6-16 16:20 | 顯示全部樓層
憂傷丶牽線木偶 發(fā)表于 2020-5-14 19:38
為什么總是出不去Second_AT_Command函數(shù)了?

我也遇到了這個(gè)問(wèn)題,請(qǐng)問(wèn)你解決了嗎
回復(fù)

使用道具 舉報(bào)

ID:580067 發(fā)表于 2020-8-12 14:09 | 顯示全部樓層
17670524699 發(fā)表于 2019-3-11 14:18
如果是模塊發(fā)送短信到手機(jī),手機(jī)會(huì)顯示什么內(nèi)容?

你這問(wèn)題問(wèn)得有點(diǎn)兒高深哦
回復(fù)

使用道具 舉報(bào)

ID:396513 發(fā)表于 2022-4-6 05:47 | 顯示全部樓層
這個(gè)代碼不全  小白別研究了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产999精品久久久久久 | 91热爆在线观看 | 天天爽夜夜操 | 日韩三级电影一区二区 | 欧美福利视频 | 亚洲精品2 | 久久这里只有精品首页 | 亚洲精品一区二区三区蜜桃久 | 在线欧美小视频 | 欧美一区二区三区四区在线 | 亚洲精品久久久久中文字幕欢迎你 | 成年人网站在线观看视频 | 日韩电影中文字幕 | 亚洲国产精品一区二区久久 | 日韩国产中文字幕 | 久久逼逼 | 日本特黄a级高清免费大片 成年人黄色小视频 | 福利av在线 | 一区二区三区国产 | www性色| 波多野结衣一区二区 | 亚洲九九色 | 亚洲va欧美va天堂v国产综合 | 精品国产一二三区 | 日韩精品免费视频 | 18成人在线观看 | 国内精品伊人久久久久网站 | 久久三级影院 | 色婷婷婷婷色 | 欧美精品91| 精品国产乱码久久久久久中文 | 九九热这里只有精品在线观看 | 6996成人影院网在线播放 | 97caoporn国产免费人人 | 久久久久中文字幕 | 日韩成人在线免费观看 | 午夜激情影院 | 欧美a级成人淫片免费看 | 99精品国产一区二区青青牛奶 | 99久久婷婷国产综合精品电影 | 欧美日韩综合一区 |