标题:
GSM收发短信打电话的stm32源码
[打印本页]
作者:
SilenceZ
时间:
2018-4-8 11:58
标题:
GSM收发短信打电话的stm32源码
GSM短信发送
单片机源程序如下:
/******************** (C) COPYRIGHT 2012 WildFire Team **************************
* 文件名 :main.c
* 描述 :通过电脑的超级终端向单片机发送数据,单片机将接收到的数据发回电脑,
* :并显示在超级终端上。用的是串口1的中断方式。
* 实验平台:野火STM32开发板
* 库版本 :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};
/*
* 函数名:main
* 描述 :主函数
* 输入 :无
* 输出 :无
*/
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")) //等待设置成功
// CLR_RX();
// Delay_us(200000);
//
// USART2_Puts("ATH\r");//挂断
// while(!Hand("OK")) //等待设置成功
// CLR_RX();
// Delay_us(10000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CMGF=1\r");//设置为TXT模式
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CSCS=\"GSM\"\r");//设置当前字符集为“GSM”
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
CLR_RX();
USART2_Puts("AT+CSCA?\r");//设置当前字符集为“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")) //等待设置成功
// {
// USART2_Puts("AT+CMGR=1\r");//设置读第一条短信
// Delay_us(100000);
// }
// CLR_RX();
// Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CNMI=2,1\r\n");//设置当有新短信到来时提示
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")&&!Hand("ERROR")) //等待设置成功
{
USART2_Puts("AT+CMGD=1\r\n");//设置删除第一条短信
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
/* 设置信息中心号码 */
USART2_Puts("AT+CSCA=");
USART2_Puts(NUM_Magz);
USART2_Puts("\r");
while(!Hand("OK")); //等待设置成功
CLR_RX();
Delay_us(1000);
led2=~led2;
led1=1;
for(;;)
{
if(Hand("+CMTI")) //若缓存字符串中含有"+CMTI"就表示有新的短信
{
Delay_us(1000);
CLR_RX(); //清除缓存内容
USART2_Puts("AT+CMGR=1\r\n");//发送读取信息指令
while(!Hand("OK")); //等待设置成功
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")); //等待设置成功
CLR_RX();
Delay_us(1000);
}
if(Hand("1HX")) //收到"1HX"回复短信
{
MESSAGE(NUM_Receive,content_ZT); //发短信
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CMGD=1\r\n");//删除短信
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
}
}
if(Hand("RING")) //若缓存字符串中含有"RING"就表示有新的来电
{
Delay_us(10000);
CLR_RX(); //清除缓存内容
USART2_Puts("AT+CLCC\r");//读取来电号码
while(!Hand("OK")); //等待设置成功
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) //只回复开头为1的手机号码
{
MESSAGE(NUM_Receive,content); //发短信
}
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************/
复制代码
#include "GSM.h"
#include "usart1.h"
#include "systick.h"
#include "bit.h"
extern char RX[200];
extern char NUM_Magz[17];
/*
* 函数名:GSM_Init
* 描述 :GSM模块初始化
* 输入 :无
* 输出 :无
* 调用 :由main调用
*/
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")) //等待设置成功
// CLR_RX();
// Delay_us(200000);
//
// USART2_Puts("ATH\r");//挂断
// while(!Hand("OK")) //等待设置成功
// CLR_RX();
// Delay_us(10000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CMGF=1\r");//设置为TXT模式
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CSCS=\"GSM\"\r");//设置当前字符集为“GSM”
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
CLR_RX();
USART2_Puts("AT+CSCA?\r");//设置当前字符集为“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")) //等待设置成功
// {
// USART2_Puts("AT+CMGR=1\r");//设置读第一条短信
// Delay_us(100000);
// }
// CLR_RX();
// Delay_us(1000);
led2=~led2;
while(!Hand("OK")) //等待设置成功
{
USART2_Puts("AT+CNMI=2,1\r\n");//设置当有新短信到来时提示
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
led2=~led2;
while(!Hand("OK")&&!Hand("ERROR")) //等待设置成功
{
USART2_Puts("AT+CMGD=1\r\n");//设置删除第一条短信
Delay_us(100000);
}
CLR_RX();
Delay_us(1000);
/* 设置信息中心号码 */
USART2_Puts("AT+CSCA=");
USART2_Puts(NUM_Magz);
USART2_Puts("\r");
while(!Hand("OK")); //等待设置成功
CLR_RX();
Delay_us(1000);
led2=~led2;
led1=1;
}
复制代码
所有资料51hei提供下载:
12-GSM收发短信打电话.rar
(293.12 KB, 下载次数: 33)
2018-4-8 16:10 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1