用M35GSM模块及STM32F103CB做基于DTMF移动数据通信的远程开关控

2019-01-12 11:57

用M35GSM模块及STM32F103CB做基于DTMF移动数据通信的远程开关控制

王昌世/wcs//2014-12-30

1.功能描述:可用手机,固话完成基于DTMF的移动数据通信的3路远程开关输出控制。

2.关键词:DTMF 移动 数据通信 M35 GSM STM32F103CB 远程 开关控制

3 硬件电路

在原M35(或其它GSM模块)和STM32F103CB(或其它单片机)为主的电路上只要加上下面的简单电路和单片机I/O脚相连即可。 4.软件

在原有GSM工作AT命令基础上

[1] 加上这5个专为DTMF通信的AT 命令

char QTONEP0[]=\选择DTMF 音源通道。 char QTONEDET1[]=\ 开放DTMF功能。

char QTONEDET413[]=\ 降低DTMF检测灵敏度,以防重复检测。 char QSFR7[]=\优先选用EFR(增强型全速率语音编码)。 char VTD3[]=\音持续时间

//选择第2通道做语音,第1通道做DTMY音远源。 原有的: //Set audio

ClearGSMReceBuffer();

SendDataPackage(\ delay_ms(500);

//Micphone

ClearGSMReceBuffer();

SendDataPackage(QMIC210);///2,10//Select MIC VALUE.

Timer20msCount=200; //在20MS 的SYSTEEM TICK 中被减一。//4S while(Timer20msCount) {

if(FindStr(RE_OK,GSMReceBuffer)) break; if(FindStr(RE_ERROR,GSMReceBuffer)) {

ClearGSMReceBuffer();

///SendDataPackage(CMIC010); delay_ms(300); }///

if(Timer20msCount<3) {

break;

}//ReStartMachine;} }

//Speaker

ClearGSMReceBuffer();

SendDataPackage(CLVL50);///Select voice SPEAKER VALUE.

Timer20msCount=200; while(Timer20msCount) {

if(FindStr(RE_OK,GSMReceBuffer)) break; if(FindStr(RE_ERROR,GSMReceBuffer)) {

ClearGSMReceBuffer();

///SendDataPackage(CMIC010); delay_ms(300); }///

if(Timer20msCount<3) {

break;

}//ReStartMachine;} } //

ClearGSMReceBuffer();

SendDataPackage(CRSL100);///Select CALLING voice VALUE. Timer20msCount=200;

//DTMF

ClearGSMReceBuffer();

SendDataPackage(\ delay_ms(500);

ClearGSMReceBuffer();

SendDataPackage(QTONEDET1);/// //SendDataPackage(QTONEDET413);///

Timer20msCount=20; while(Timer20msCount) {

if(FindStr(RE_OK,GSMReceBuffer)) break; if(FindStr(RE_ERROR,GSMReceBuffer)) {

ClearGSMReceBuffer();

SendDataPackage(QTONEDET1);/// //SendDataPackage(QTONEDET413); delay_ms(300); }///

if(Timer20msCount<3) {

break;

}//ReStartMachine;} }

ClearGSMReceBuffer();

//SendDataPackage(QTONEDET1);/// SendDataPackage(QTONEDET413);///

Timer20msCount=20; while(Timer20msCount) {

if(FindStr(RE_OK,GSMReceBuffer)) break; if(FindStr(RE_ERROR,GSMReceBuffer)) {

ClearGSMReceBuffer();

//SendDataPackage(QTONEDET1);/// SendDataPackage(QTONEDET413); delay_ms(300); }///

if(Timer20msCount<3) {

break;

}//ReStartMachine;} }

ClearGSMReceBuffer();

SendDataPackage(QSFR7);///Select voice VALUE. delay_ms(300);

ClearGSMReceBuffer();

SendDataPackage(VTD3);///Select voice VALUE. delay_ms(300);

有了这些语音设置,就可以做DTMF通信(在手机或固话与终端设备间)。

[2] DTMF接收处理函数

/***********************************************************************************/ //Editor:wcs

//Time:2014-12-23

//Function name :void ProcessDTMF(void).

//Descrip:According to controling protocol receiving and transimitting DTMF. //[1]Control protocol //(1)Confirm password // Re:*123456#

// Tr:11->Correct;999->Error. // 2) Control out command

// (1) *111#->First channel output open. // (2) *110#->First channel output close. // (3) *121#->Second channel output open. // (4) *120#->Second channel output close. // (5) *131#->Third channel output open. // (6) *130#->Third channel output close.

// \

// (7) *#->End.After this,if need processing DTMF ,THEN must again input password.

//[2]Processing mode

// (1)In GSM receiving interrupt ,Build processing flag for telling main() when get +QTONE.//+QTONEDET: 54

//Input: no. 36 //Out:No.

/******************************************************/ void ProcessDTMF(void) {//+QTONEDET: 54

u8 RepeatSendCounter3;

char CLVL0[]=\ char CLVL50[]=\ if(MuteFlag==1) {

//MuteFlag=0;

//ClearGSMReceBuffer();

//SendDataPackage(\ SendDataPackage(CLVL0);//Close voice. delay_ms(300);

///ClearBuffer(DTMF_Data,20); ///DTMF_DataCounter=0; DTMF_DataFlag=0;

goto DTMF_End; }

//Has Received a #

//Close mute,Begin voice ///ClearGSMReceBuffer();

//SendDataPackage(\ SendDataPackage(CLVL50);//open voice. delay_ms(300);

if(DTMF_Data[1]=='#') //End DTMF operating {

ConfirmPasswordFlag=0;//

ClearBuffer(DTMF_Data,20); DTMF_DataCounter=0; DTMF_DataFlag=0; }

else if(DTMF_Data[7]=='#') //Password operating {//Password

if(FindStr(mima,DTMF_Data)) {//PassWord is correct

ConfirmPasswordFlag=1;// goto DTMF_CorrectEnd; } else

goto PasswordError; }

else if(DTMF_Data[4]=='#') //End a DTMF operating {

if(ConfirmPasswordFlag==1) {

//Open output channel 1

if(FindStr(\ {//Command is correct

//respose major machine command,transmit 11 DTMF

//exec command O1ON;

goto DTMF_CorrectEnd; }

//Close output channel 1

else if(FindStr(\ {//Command is correct

//respose major machine command,transmit 11 DTMF

//exec command O1OFF;

goto DTMF_CorrectEnd; }

//Open output channel 2

else if(FindStr(\ {//Command is correct

//respose major machine command,transmit 11 DTMF

//exec command O2ON;

goto DTMF_CorrectEnd; }

//Close output channel 2

else if(FindStr(\ {//Command is correct

//respose major machine command,transmit 11 DTMF

//exec command O2OFF;

goto DTMF_CorrectEnd;


用M35GSM模块及STM32F103CB做基于DTMF移动数据通信的远程开关控.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湖南2010年教师资格证考试中学教育学真题及答案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: