標(biāo)題:
GSM收發(fā)短信打電話的stm32源碼
[打印本頁]
作者:
SilenceZ
時間:
2018-4-8 11:58
標(biāo)題:
GSM收發(fā)短信打電話的stm32源碼
GSM短信發(fā)送
單片機(jī)源程序如下:
/******************** (C) COPYRIGHT 2012 WildFire Team **************************
* 文件名 :main.c
* 描述 :通過電腦的超級終端向單片機(jī)發(fā)送數(shù)據(jù),單片機(jī)將接收到的數(shù)據(jù)發(fā)回電腦,
* :并顯示在超級終端上。用的是串口1的中斷方式。
* 實驗平臺:野火STM32開發(fā)板
* 庫版本 :ST3.5.0
*********************************************************************************/
#include "stm32f10x.h"
#include "usart1.h"
#include "systick.h"
#include "bit.h"
#include "GSM.h"
#define led1 PE5
#define led2 PE6
int seat=0; //接收字符串的存儲位置
extern vu32 TimingDelay;
extern u8 Uart1_Get_Data;
extern u8 Uart1_Get_Flag;
extern char RX[200];
char content[]="Hi!I am xioawenjun,I have another telephone number,Please call me with 625073,Thanks";
char content_ZT[]="ALL OK";
char NUM_Magz[17]={0x22,0x2b,0x38,0x36,0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36,0x22};
char NUM1[14]={0x22,0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36,0x22};
char NUM_Receive[12]={0x31,0x38,0x30,0x32,0x32,0x33,0x30,0x35,0x38,0x36,0x36};
/*
* 函數(shù)名:main
* 描述 :主函數(shù)
* 輸入 :無
* 輸出 :無
*/
int main(void)
{
u16 i,j,FLAG=0;
SysTick_Init(); /*systick 初始化*/
/* USART1 config 115200 8-N-1 */
// USART1_Config();
USART2_Config();
NVIC_Configuration();
led1=0;
led2=1;
GSM_Init();
///////////////////////////////////////////////////////////////////
GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000); //延時1s
GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000);
while(!Hand("Interpreter ready"))
{
CLR_RX();
GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000); //延時1s
GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000);
}
led1=1;
Delay_us(500000);
led1=0;
USART2_Puts("\r\nAT\r\n"); //握手
CLR_RX();
Delay_us(10000);
while(!Hand("OK"))
{
led1=~led1;
USART2_Puts("AT\r"); //握手
Delay_us(100000);
}
CLR_RX();
Delay_us(10000);
// USART2_Puts("ATD611123;\r");//撥號“611123”
// while(!Hand("OK")) //等待設(shè)置成功
// CLR_RX();
// Delay_us(200000);
//
// USART2_Puts("ATH\r");//掛斷
// while(!Hand("OK")) //等待設(shè)置成功
// CLR_RX();
// Delay_us(10000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CMGF=1\r");//設(shè)置為TXT模式
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CSCS=\"GSM\"\r");//設(shè)置當(dāng)前字符集為“GSM”
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
CLR_RX();
USART2_Puts("AT+CSCA?\r");//設(shè)置當(dāng)前字符集為“GSM”
Delay_us(100000);
}
for(i=0;i<200;i++)
{
if(RX[i]==0x22) //找到8
{
for(j=0;j<16;j++)
{
NUM_Magz[j]=RX[i]; //讀消息中心的號碼
i++;
}
i=200;
}
}
CLR_RX();
Delay_us(1000);
led2=~led2;
// led2=~led2;
// while(!Hand("OK")) //等待設(shè)置成功
// {
// USART2_Puts("AT+CMGR=1\r");//設(shè)置讀第一條短信
// Delay_us(100000);
// }
// CLR_RX();
// Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CNMI=2,1\r\n");//設(shè)置當(dāng)有新短信到來時提示
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")&&!Hand("ERROR")) //等待設(shè)置成功
{
USART2_Puts("AT+CMGD=1\r\n");//設(shè)置刪除第一條短信
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
/* 設(shè)置信息中心號碼 */
USART2_Puts("AT+CSCA=");
USART2_Puts(NUM_Magz);
USART2_Puts("\r");
while(!Hand("OK")); //等待設(shè)置成功
CLR_RX();
Delay_us(1000);
led2=~led2;
led1=1;
for(;;)
{
if(Hand("+CMTI")) //若緩存字符串中含有"+CMTI"就表示有新的短信
{
Delay_us(1000);
CLR_RX(); //清除緩存內(nèi)容
USART2_Puts("AT+CMGR=1\r\n");//發(fā)送讀取信息指令
while(!Hand("OK")); //等待設(shè)置成功
for(i=0;i<200;i++)
{
if(RX[i]==0x22)
{
FLAG++;
}
if(FLAG==3)
{
FLAG=0;
for(j=0;j<11;j++)
{
i++;
NUM_Receive[j]=RX[i];
if(RX[i]==0x22)
{
NUM_Receive[j]='\0';
j=11;
}
}
i=200;
}
}
if(Hand("1HD")) //收到"1HD"回電話
{
CLR_RX();
Delay_us(1000);
USART2_Puts("ATD"); //打電話
USART2_Puts(NUM_Receive);
USART2_Puts(";\r");
while(!Hand("OK"));
while(!Hand("NO CARRIER"));
CLR_RX();
Delay_us(1000);
USART2_Puts("AT+CMGD=1\r\n");//刪除短信
while(!Hand("OK")); //等待設(shè)置成功
CLR_RX();
Delay_us(1000);
}
if(Hand("1HX")) //收到"1HX"回復(fù)短信
{
MESSAGE(NUM_Receive,content_ZT); //發(fā)短信
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CMGD=1\r\n");//刪除短信
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
}
}
if(Hand("RING")) //若緩存字符串中含有"RING"就表示有新的來電
{
Delay_us(10000);
CLR_RX(); //清除緩存內(nèi)容
USART2_Puts("AT+CLCC\r");//讀取來電號碼
while(!Hand("OK")); //等待設(shè)置成功
for(i=0;i<200;i++)
{
if(RX[i]==0x22)
{
for(j=0;j<11;j++)
{
i++;
NUM_Receive[j]=RX[i];
if(RX[i]==0x22)
{
NUM_Receive[j]='\0';
j=11;
}
}
i=200;
}
}
CLR_RX();
USART2_Puts("ATH\r\n");//掛斷電話
while(!Hand("OK"));
if(NUM_Receive[0]==0x36) //只回復(fù)開頭為1的手機(jī)號碼
{
MESSAGE(NUM_Receive,content); //發(fā)短信
}
CLR_RX();
Delay_us(300000);
USART2_Puts("ATD"); //打電話
USART2_Puts(NUM_Receive);
USART2_Puts(";\r");
while(!Hand("OK"));
while(!Hand("NO CARRIER"));
CLR_RX();
Delay_us(10000);
USART2_Puts("ATD"); //打電話
USART2_Puts(NUM_Receive);
USART2_Puts(";\r");
while(!Hand("OK"));
CLR_RX();
Delay_us(1500000);
USART2_Puts("ATH\r\n");//掛斷電話
while(!Hand("OK"));
CLR_RX();
}
}
}
/******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
復(fù)制代碼
#include "GSM.h"
#include "usart1.h"
#include "systick.h"
#include "bit.h"
extern char RX[200];
extern char NUM_Magz[17];
/*
* 函數(shù)名:GSM_Init
* 描述 :GSM模塊初始化
* 輸入 :無
* 輸出 :無
* 調(diào)用 :由main調(diào)用
*/
void GSM_Init(void)
{
u16 i,j;
GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000); //延時1s
GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000);
while(!Hand("Interpreter ready"))
{
CLR_RX();
GPIO_ResetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000); //延時1s
GPIO_SetBits(GPIOA, GPIO_Pin_8); //啟動信號開始
Delay_us(100000);
}
led1=1;
Delay_us(500000);
led1=0;
USART2_Puts("\r\nAT\r\n"); //握手
CLR_RX();
Delay_us(10000);
while(!Hand("OK"))
{
led1=~led1;
USART2_Puts("AT\r"); //握手
Delay_us(100000);
}
CLR_RX();
Delay_us(10000);
// USART2_Puts("ATD611123;\r");//撥號“611123”
// while(!Hand("OK")) //等待設(shè)置成功
// CLR_RX();
// Delay_us(200000);
//
// USART2_Puts("ATH\r");//掛斷
// while(!Hand("OK")) //等待設(shè)置成功
// CLR_RX();
// Delay_us(10000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CMGF=1\r");//設(shè)置為TXT模式
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CSCS=\"GSM\"\r");//設(shè)置當(dāng)前字符集為“GSM”
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
CLR_RX();
USART2_Puts("AT+CSCA?\r");//設(shè)置當(dāng)前字符集為“GSM”
Delay_us(100000);
}
for(i=0;i<200;i++)
{
if(RX[i]==0x22) //找到8
{
for(j=0;j<16;j++)
{
NUM_Magz[j]=RX[i]; //讀消息中心的號碼
i++;
}
i=200;
}
}
CLR_RX();
Delay_us(1000);
led2=~led2;
// led2=~led2;
// while(!Hand("OK")) //等待設(shè)置成功
// {
// USART2_Puts("AT+CMGR=1\r");//設(shè)置讀第一條短信
// Delay_us(100000);
// }
// CLR_RX();
// Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待設(shè)置成功
{
USART2_Puts("AT+CNMI=2,1\r\n");//設(shè)置當(dāng)有新短信到來時提示
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")&&!Hand("ERROR")) //等待設(shè)置成功
{
USART2_Puts("AT+CMGD=1\r\n");//設(shè)置刪除第一條短信
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
/* 設(shè)置信息中心號碼 */
USART2_Puts("AT+CSCA=");
USART2_Puts(NUM_Magz);
USART2_Puts("\r");
while(!Hand("OK")); //等待設(shè)置成功
CLR_RX();
Delay_us(1000);
led2=~led2;
led1=1;
}
復(fù)制代碼
所有資料51hei提供下載:
12-GSM收發(fā)短信打電話.rar
(293.12 KB, 下載次數(shù): 33)
2018-4-8 16:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1