当前位置:首页 > 单片机 > 单片机
[导读] /************************* ********GPRS调试笔记********************************调试目的:通过SPCE061A单片机控制SIM900A GPRS模块发送短信调试过程: 1.利用延时来发送PDU格式的短信(不接受GPRS

/************************* ********GPRS调试笔记********************************

调试目的:通过SPCE061A单片机控制SIM900A GPRS模块发送短信

调试过程:

1.利用延时来发送PDU格式的短信(不接受GPRS的返回值)

a.发送AT+CMGF=0rn指令

b.延时2s,确定GPRS对a步骤中发送的指令已经接受。ps:延时的时长可做适当调整,但是一定要保证在这段时间里,GPRS已经接受AT

指令,并作出回应,否则会导致发送短信失败。笔者亲测过,延时时间太短的话,真的无法发送短信,当时没有注意到这一点,调试

了好久,才发现这个问题。

c.发送AT+CMGS=21rn指令,21为你要发送的字符长度,这里我就不介绍,SIM900A说明书上讲的很详细

d.延时2s,这里的原理和b中所说的几乎一样,不再追述

e.发送pdu格式的编码,这里需要设置一些参数,比如短信中心号码,接受号码等等,这里我也不细述了,毕竟使用说明书上写得很清

楚了,我发送的是“0891683108701305F011000D86688193909435F70008A7064F60597DFF01”,引号内以字符的形式发送就行,

这一串字符里,包含了一些参数的设置,还有发送短信的内容,读者在实际操作时,可将参数的设置和内容分开发送,笔者为了

简单处理,就统一处理了。

f.最后一步了,发送结束符--0x1a,直接发送0x1a,主要这里不要发送成字符了,是16进制0x1a;到此为至,短信已经成功发送了,

短信的内容是“你好!”;

2.通过判断GPRS的返回值来发送短信

a.发送AT+CMGF=0rn指令

b.

这里是重点,记得当时卡这里卡了好长时间,几乎到了要放弃的边缘!!!这里重点分析一下吧

while(strcmp(rec_string1,"AT+CMGF=0rnrnOK")!=0)

{

*P_Watchdog_Clear= 0x0001;

}

等待接受返回值,并且利用字符串比较函数比较接受到的字符串rec_string1和正确的返回值AT+CMGF=0rnrnOK对比;

这里用到的IRQ7串口中断来接受,利用全局变量str_string1[30]和全局n模拟一个栈来缓存接收到的返回值。需要强调说明的是

,发送完AT+CMGF=0rn这条指令后gprs的返回值应该是“AT+CMGF=0rnrnOK”,也就是返回了发送过去的AT指令加上回车换行

加上OK,但是资料上说的却是"OK",简直差点把笔者坑死,经过笔者不懈地努力调试,终于发现了这里的问题。

c.能到这一步,说明之前的返回值已经收到了,但是细心的读者可能就会发现,发送“AT+CMGS=21rn”这条指令的前面有这两行

简单的代码 delay();n = 0; 一行是延时,一行是清空栈底,清空栈底这里我就不过多的解释了,很简单。有的读者会问,

delay()函数是干什么的呢?不是不利用延时来发送短息吗?这里问题有点复杂,笔者自己也没弄得很清楚,但是当去掉delay()

或将delay()和n=0;两行代码互换位置后,程序就会死卡,并且,你调试时就会发现n并不是等于0的,rec_string1字符串里面存的

并不是GPRS本次返回值,而是有一部分是上次的,也就是说n=0这句并没有起到清空栈底的作用,但是,这程序已经运行到

send_string(cmd2);

while(strcmp(rec_string1,"AT+CMGS=21rnrn>")!=0)

{

*P_Watchdog_Clear= 0x0001;

}这里了啊?当时笔者也很疑惑,不能理解,感觉完全颠覆了我的认知(曾一度怀疑是61板的问题),但是后来仔细思考了一番

,发现很有可能是IRQ7中断的原因,导致n=0,这句执行失败,n=0这句c语言代码经编译器转换成汇编代码后,有好几句,也就是说

n=0这句C代码并不是cpu执行指令时的最小原子值,因此在执行这句代码时,很有可能被IRQ7中断给打断,导致这种结果。于是,

笔者在清空栈底时,用了delay()函数,延时确保不会发生中断,保护n=0这行代码。结果证明,我的猜想是正确的。

d.剩下的就没有什么要注意的了,和方法1里面几乎一样,笔者就不啰嗦了。

如有错误,希望各位大神能及时指出,互相学习!

这里附上源代码一份,希望对你有帮助!

http://download.csdn.net/detail/qq_24478297/8936803


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭