单片机斥地板

西门子 Siemens TC35/TC35i GSM 斥地板

    笔者文章登载于2008年10月《无线电》杂志“GSM模块——完成近程节制的新锐 ”一文,文章中咱们引见了一些常用的GSM模块,此中使用最为遍及的是西门子的TC35模块,因而,咱们在2008年推出了“西门子 Siemens TC35/TC35i GSM 斥地板”,自投放市场以来,遭到了泛博用户的好评,质量、质量、唱工、材料属于一流,咱们成功斥地了短信节制继电器的源法式代码,使用C言语平台,使用51单片机来收发短信,便当了良多客户进行二次斥地,也有不少客户在咱们斥地板的平台上快速、高效地完成为二次斥地,做了一系列的GSM节制产物。此刻,咱们按照用户的反馈环境与建议,将硬件与设想的软件做了响应的完满,推出了最新款V1.3版,批改了之前的一些BUG,愈加便当了泛博客户的使用与斥地,为了答谢泛博新老客户,对于新版的代价仍是和以前一样,不加价,但咱们给用户供给了更好、更优的产物,但愿大师爱好。有良多用户常常会征询咱们TC35、TC35I、MC35、MC35I的区别,MC35系列的模块,主如果支撑GPRS,MC35I比MC35的速度要快,而TC35和TC35I的区别在于外形,体积,电压都不合,有一些指令也不合,常常咱们现实比对测试,TC35I的功耗比TC35要小一些,其它没有太多的区别,当然用户最关怀的仍是代价的问题,TC35I比TC35要贵不少,若是用户用来做一些短信和语音方面的功能,那完全能够使用TC35模块,咱们能够供给不变的货源,对于MC35和TC35,若是你必然要用到GRPS功能,那只能选择MC35系列模块,MC35I比MC35的速度要快,但代价要高一些。对于使用TC35、TC35I、MC35、MC35I的模块,都能够间接在咱们的斥地板上使用,管脚都是完全兼容的,咱们也颠末实测。

tc35斥地板
西门子 Siemens TC35/TC35i GSM 斥地板 今朝最新已更新到V1.3版

tc35i斥地板
这是2008岁尾 西门子 Siemens TC35/TC35i GSM 斥地板 V1.2版

gsm tc35i
这是2008年 西门子 Siemens TC35/TC35i GSM 斥地板 老款 V1.0版

套装清单:——售价:450元/套 (今朝最新硬件版本为V1.3,硬件进级后,代价不变)

    TC35 GSM斥地板:1块 (板上带有Siemens 西门子TC35模块,如需将标配改换成TC35i,需要补差价,请先德律和咱们联系) 

    外接电源:1个

    RS232串口线:1条

    配套光盘:1份

    GSM 公用天线:1个

    TC35 公用天线转接线:1个


光盘附送相关材料:

    AT指令集;SIEMENS_TC3x接口描述;Siemens TC35i数据手册

    TC35外围电路图及斥地板电路道理图

    TC35测试法式(PC机端法式)

    TC35经由电脑发短信的实例法式(含VB源法式代码)

    TC35经由单片机收发短信和节制继电器例子法式(含Keil C源法式代码) ——本公司全新力作,国内草创!

    串口调试助手软件

    STC芯片烧写软件

留意:该斥地板可合用于TC35/TC35i/MC35/MC35i 模块,咱们下面的引见以TC35模块为例。 

新款V1.3版与V1.2版本的区别在于:

    调整了SW开机按钮于PCB上的位置,操作更随手。

    添加了单片机40PIN扩展口和单片机之间的间距,连接杜邦线更便当。

    2010年6月24日 更新:咱们为TC35斥地板特地编写了GSM串口调试助手软件,调试AT指令,测试模块工作更为便当、快速,功能强大。 

V1.2版与V1.1版本的区别在于:

    斥地板四周添加螺丝定位孔,便当板子的固定。

    斥地板PCB板上添加天线定位孔,便当GSM天线间接固定在板子上,而不需要外拖天线。

    新增开机按键,若是是PC机和TC35/TC35I模块进行通信,按一下按键,就能够完成模块的开机操作。

    PCB进行了从头布线,完满了电源电路,不变性更好,处理了上一版中的跳线BUG,便当完成三种通信跳线编制:PC与TC35/TC35I模块通信;PC与单片机通信;单片机与TC35/TC35I模块通信。板上的STC89C51单片机芯片能够经由串口完成ISP下载法式,无需额外的编程器。

    斥地板四周添加螺丝定位孔,便当板子的固定。

V1.1版与V1.0版本的区别在于:

    在PCB走线方面做了编削,更正了PCB板SIM卡座与TC35模块之间的连接走线,处理了打孔所发生的一些问题。

这是咱们在2008年10期《无线电》杂志上登载的TC35模块引见文章,大师也能够间接翻阅《无线电》杂志。

TC35i


这是咱们在2009年3期《无线电》杂志上登载的西门子TC35斥地板引见文章,大师也能够间接翻阅《电子制造》杂志。

    这是咱们的“西门子 Siemens TC35/TC35i GSM 斥地板”的操作演示视频录像,大师能够点击下载视频文件进行傍观,视频中咱们引见了进修板的硬件和软件材料的环境以及初度使用的使用实例。留意,为了达到最好的显示成果,请全屏播放进行傍观

-->>下载高质量视频文件 /tc35/tc35.rar

 

点击上面窗口进行在线播放,双击进行全屏傍观

tc35i斥地板

概述

     西门子GSM模块 (TC35/TC35i/MC35/MC35i) 斥地(评估)板是采用51单片机+TC35(GSM)为核心部件分析测验考试板。单片机采用STC89C51系列MCU,最高工作速度可达90MHz,片内FLASH法式存储器和8K摆布的片内EEROM,多达36个通用I/O口。经由RS232完成ISP编程;

    TC35(TC35i/MC35/MC35i)无线GSM/GPRS通信模块, 集成为尺度的RS232接口以及SIM卡,能够在PC机上用AT号令经由串口对它进行设置。这使它成为在声音和数据通信上通用的一个GSM/GPRS双频终端产物。 你能够快速的把它使用到产物斥地上,同时它也能够作为产物的一个构成部门和产物连系在一路。在无线短信工业节制、近程通信,现场监控等诸多无线通信范畴斥地板将会给您的工作带来极大的便当.

    该板便当用户测验考试、斥地,按照用户的设想思维自由组合很快将思惟变为产物,无论用户有无GSM方面的学问累积,该板都是优良助手。

硬件申明:

    STC89Cxx,最高频次可达90MHz,片内4K以上FLASH法式存储器,8K摆布的片内EEROM ,512B-1208B片内RAM,36个IO口。

    TC35模块,集成为尺度的RS232接口以及SIM卡。

    1个LED唆使灯:一个电源唆使。

    LM2941 4.2V电源IC。

    ISP接口(用于法式下载、串口监视)。

    RS232接口ISP;支撑串口调试

    12V直流电源输入,带电源唆使灯

    8路LED发光管唆使

    板载话筒、听筒接口,接上话筒、听筒后能够完成语音通话功能。

    板载数字式温度传感器DS18B20公用接口,用户能够经由编程完成温度值的无线传输使用。

    16通道开关量输出,此中8路接继电器节制输出,另8路TTL电平输出可供用户扩展。 (继电器节制负载:250V/10A) 

    TC35模块串口通信模式能够选择:能够别离与单片机进行串口通信,或者模块与PC机电脑完成串口通信。

测验考试申明:

    ◆ 短信收发测验考试。

    ◆ 话音呼叫测验考试。

    ◆ AT指令测验考试。

串口调试助手
GSM串口调试助手软件 2010年6月24日更新发布 
这是咱们为TC35斥地板特地编写了GSM串口调试助手软件,调试AT指令,测试模块工作更为便当、快速,功能强大。
大师能够从窗体中看到上半部门为出名的串口调试助手软件全数功能,下面咱们特地编写了GSM调试功能,同时支撑SIM300 GRPS模块的调试。

TC35/TC35i 测试法式
TC35模块经由电脑联机,DEMO法式。

TC35/TC35i 中文短信

这是模块DEMO测试法式,咱们能够用来读取模块预存的各类出厂消息,以及发送中文短信的实例使用。 间接点击图片放大傍观。

TC35/TC35i 英文短信

这是模块DEMO测试法式,咱们能够用来读取模块预存的各类出厂消息,以及发送英文短信的实例使用。 间接点击图片放大傍观。

tc35 测试法式
另一款TC35模块测试法式,这个法式能够完成拨号操作,同时及时显示模块操作的各条AT指令,上图为连接模块初始化成功的反馈消息 “OK”。

TC35/TC35i 短信 另一款短信发送领受软件。

gsm tc35i

8路LED发光管唆使

gsm tc35i

与PC电脑连接的RS232串口

gsm tc35i

8路继电器节制输出

gsm tc35i

8路继电器输出接线柱,每路别离3个接线孔,别离为:公共端、常初步、常闭端。

gsm tc35i

手机SIM卡座

gsm tc35i

打开卡座,插入GSM手机SIM卡即可。

gsm tc35i

    下面咱们一路来看一下斥地板供给的“TC35经由单片机收发短信和节制继电器例子法式”。

    先来看一下咱们的“西门子 Siemens TC35 GSM 斥地板”的短信节制指令引见与使用方式:

    1. 给斥地板供上12v直流电源后,板子上LD1点亮,表白斥地板曾经一般上电。

    2. 此时会看到LD2一闪一秒,亮灭间隔时间不异,此情况表白TC35正处于搜索收集情况。大体一分钟当前(不确定具体时间,看当时所处环境的信号强度)。
    
    3. 当LD2出现短灭常亮的情况时,表白TC35曾经搜索到收集信号,处于待机情况。

    4. 此时能够经由手机发送指令经由TC35模块领受来完成对单片机的节制,进而完成对继电器的节制。

    以下为具体指令引见:

    假如模块SIM卡上的手机号码为:13675857933

    经由手机发送短信到13675857933;

指令如下:

    1.打开继电器

    发送open?(?代表选择第几个继电器,留意open是小写),如发送open1到方针号码,顷刻后将会看到板子上的D2灯点亮,并听到继电器打开的声音,此时能够发觉继电器1曾经打开,此时手机将收到来自方针号码的主动答复,答复内容为:Operate Successfully!。此时表白此次操作曾经成功。若是你发送的指令错误,手机将会收到来自方针手机的短信提示,告诉你当前的操作失败,操作失败的短信答复内容为:Operate Failed,try again!此时你能够反省能否发送精确指令给模块,再次操作!(板子上矣忠淮尾有8路继电器,所以发送的指令如下open1,open2,open3,open4,open5,….open8,一次只能打开一个继电器,下一次操作不会影响前一次的操作)。

    2.封闭继电器

    发送shut?(?代表选择第几个继电器,留意shut是小写),如发送shut1到方针号码,若是先前继电器1是处于开启情况的话,则会看到如下成果,LD2灯熄灭,并会听到“咔嚓“声响表白继电器1曾经封闭。若是先前继电器是处于封闭情况的话则不会有任何反映。一会儿以背工机将收到来自方针号码的主动答复,答复内容为:Operate Successfully!。此时表白此次操作曾经成功。若是你发送的指令错误,手机将会收到来自方针手机的短信提示,告诉你当前的操作失败,操作失败的短信答复内容为:Operate Failed,try again!过一会儿你能够反省能否发送精确指令给模块,再次操作!(板子上矣忠淮尾有8路继电器,所以发送的指令如下shut1,shut2,….shut8,一次只能打开一个继电器,下一次操作不会影响前一次的操作)。

    3.扩展开关的开启与封闭

    在板子的右边J4排针是扩展开关的接口,开启的编制同继电器的编制一样。独一不合的open后面的指令,openA暗示打开开关1,shutA暗示封闭开关1。板子上共有八个开关,所以open或者shut后面操作对象的范畴(A~H)。过一会儿手机将收到来自方针号码的主动答复,答复内容为:Operate Successfully!。此时表白此次操作曾经成功。若是你发送的指令错误,手机将会收到来自方针手机的短信提示,告诉你当前的操作失败,操作失败的短信答复内容为:Operate Failed,try again!此时你能够反省能否发送精确指令给模块,再次操作!

    4.继电器,开关的全数打开和全数封闭

    发送指令openO暗示打开所有继电器和开关,shutS暗示封闭所有继电器和开关。过一会儿手机将收到来自方针号码的主动答复,答复内容为:Operate Successfully!。此时表白此次操作曾经成功。若是你发送的指令错误,手机将会收到来自方针手机的短信提示,告诉你当前的操作失败,操作失败的短信答复内容为:Operate Failed,try again!此时你能够反省能否发送精确指令给模块,再次操作!

    5. 情况查问

    发送open?代表查问开关情况,如发送open?到斥地板上SIM卡的号码,顷刻之后,将会收到来自方针号码的短信:如:111111000000000 Operate Successfully! 的短信.此中1暗示此路继电器处于开着的情况.0暗示此刻继电器处于封闭情况.

    以下为部门测验考试演示图片:

TC35/TC35i 短信节制

起首,将咱们的短信节制继电器的法式烧入STC89C51芯片后,插上12V外接电源,SIM卡找到收集信号成功注册后,此时会看到LD2一闪一秒,亮灭间隔时间不异,此情况表白TC35正处于搜索收集情况。大体一分钟当前(不确定具体时间,看当时所处环境的信号强度)。下面,咱们预备打开第一路继电器。

TC35/TC35i 短信节制TC35/TC35i 短信节制TC35/TC35i 短信节制TC35/TC35i 短信节制

咱们使用的是Nokia6300手机,编缉短信内容为:open1 , 发送到号码为13675857933的斥地板,接动手机显示“正在发送短信”,发送成功后,手机显示“已发送至XXXXXXXX号码”,之后,斥地板收到了短信指令,随即打开第一路继电器,并反馈节制成功的短信给手机操作者。

TC35/TC35i 短信

    咱们此刻看到板子上的D2灯点亮,并听到继电器打开的声音,此时能够发觉继电器1曾经打开,此时手机将收到来自方针号码的主动答复,答复内容为:Operate Successfully!。此时表白此次操作曾经成功。

TC35/TC35i 短信TC35/TC35i 短信TC35/TC35i 短信TC35/TC35i 短信

    咱们此刻来测试一下全开继电器的功能,编缉短信内容为:openO , 发送到号码为13675857933的斥地板,发送成功后,手机显示“已发送至XXXXXXXX号码”,之后,斥地板收到了短信指令,随即打开全数继电器,并反馈节制成功的短信给手机操作者。

TC35/TC35i 短信

TC35/TC35i 短信TC35/TC35i 短信TC35/TC35i 短信TC35/TC35i 短信

    咱们此刻来测试一下封闭第一路继电器的功能,编缉短信内容为:shut1 , 发送到号码为13675857933的斥地板,发送成功后,手机显示“已发送至XXXXXXXX号码”,之后,斥地板收到了短信指令,随即封闭第一路继电器,并反馈节制成功的短信给手机操作者。

TC35/TC35i 短信

TC35/TC35i 短信

串口调试助手

    这是咱们给斥地板上电时,经由串口调试助手软件看到的,TC35模块初始化时的各条指令。留意:+8613800571500 是浙江省杭州地域的挪动短信办事核心号码,您给斥地板使用不合地域的SIM卡,请在法式中设置精确的本地ISP挪动德律办事商供给的短信核心号码。

串口调试助手

    这是收到来自13185018567手机短信后的指令环境,斥地板做出节制继电器的动作后,反馈给手机用户“Operate Successfully!”的成功节制短信消息。

TC35 源法式

    这是咱们供给的“TC35经由单片机收发短信和节制继电器例子”源法式代码,使用Keil C环境编写,大部门语句都加了中文正文,闪斥地者很容易上手,缩短了二次斥地的周期,提高了斥地效率。

TC35 源法式

部门法式代码截图。

TC35 源法式

函数的定义与申明。

TC35 源法式

短信指令的识别与继电器的节制代码。

TC35 源法式

初始化TC35模块代码。

下面咱们再来看一下V1.2版的出色照片,以及一些奇异的细节设想:

tc35i斥地板
    这是V1.2版的 西门子 Siemens TC35/TC35i GSM 斥地板 , 右边是GSM天线和天线连接线。

tc35i斥地板
    三种通信编制跳线:PC与单片机通信;PC与TC35/TC35I模块通信;单片机与TC35/TC35I模块通信。

    若是要使用电脑来收发短信或进行语音呼叫测验考试,请将跳线设置成:PC与TC35/TC35I模块通信。
    若是要给单片机芯片烧写法式,即完成ISP下载功能, 请将跳线设置成:PC与单片机通信。
    若是要使用单片机来节制TC35/TC35I模块,请将跳线设置成:单片机与TC35/TC35I模块通信。

tc35i斥地板
    V1.2版中新增的模块开机按钮,便当用户上电时,进行手动开机。

tc35i斥地板
    V1.2版中新增的螺丝定位孔,位于PCB板四周,在模块附近新增了两个天线定位孔,以适合不合孔径的GSM天线安装。

tc35i斥地板
    一流的波峰焊生产加工工艺,焊点很是标致、整洁。

tc35i斥地板

tc35i斥地板

tc35i斥地板
    下面咱们预备给斥地板加装GSM天线,咱们来一路看一下。

tc35i斥地板
    起首把天线连接线的一头与TC35/TC35I模块的天线口相连, 留意:该接口比力软弱的,拔插时请千万小心,不成乱花力,必然要对准了再下压。

tc35i斥地板
     将天线连接线的线头与TC35/TC35I模块的天线孔对准了,再压下去,听到“喀喳”一声,申明连接到位了,若是需要将其再取下,请务必小心,慢慢将线头拔出。

tc35i斥地板
    一头已连接好的天线连接线,另一头预备固定在斥地板定位孔上。

tc35i斥地板
    取下天线头上的垫片和垫圈,预备将其固定在板子上。

tc35i斥地板
    将天线连接线穿过PCB板的过孔,然后将天线头固定在PCB板上。

tc35i斥地板
    最后,再将GSM天线拧上即可。

tc35i斥地板
    斥地板的硬件版本号在PCB板上有标,如图所示为V1.2新版。

tc35i斥地板
    若是拆下天线时,能够将小红帽套上天线端子,免得尘埃进入,庇护其接触优良。

tc35i斥地板

tc35进修板
批量现货供应的TC35斥地板

-------------------------------------------------------------------------------------------------------------------------------

西门子 TC35i模块引见

    TC35i新版西门子工业GSM模块是一个支撑中文短消息的工业级GSM模块,工作在EGSM900和GSM1800双频段,电源范畴为直流3.3~4.8V ,电流耗损——休眠情况为3.5mA,空闲情况为25mA,发射情况为300mA(平均),2.5A峰值;可传输语音和数据信号, 功耗在EGSM900(4类)和GSM1800(1类)别离为2W和1W ,经由接口连接器和天线连接器别离连接SIM卡读卡器和天线。SIM电压为3V/1.8V,TC35i的数据接口(CMOS电平)经由AT号令可双向传输指令和数据,可选波特率为300b/s~115kb/s , 主动波特率为1.2kb/s~115kb/s。它支撑Text和PDU格局的SMS(Short Message Service,短动静),可经由AT号令或关断信号完成重启和毛病恢复,中文材料如下:

    TC35i由供电模块(ASIC)、闪存、ZIF连接器、天线接口等6部门构成。作为TC35i的核心基带处置器次要处置GSM终端内的语音和数据信号,并涵盖了蜂窝射频设备中的所有模仿和数字功能。

TC35i硬件设想:

    TC35i模块有40个引脚,经由一个ZIF(Zero Insertion Force,零阻力插座)连接器引出。这40个引脚能够划分为5类,即电源、数据输入/输出、SIM卡、音频接口和节制。

    TC35i的第1~5引脚是正电源输入脚凡是保举值4.2V,第6~10引脚是电源地。11、12为充电引脚,能够外接锂电池,13为对外输出电压(共外电路使用),14为ACCU-TEMP接负温度系数的热敏电阻,用于锂电池充电庇护节制。

    15脚是启动脚IGT,系统加电后为使TC35i进入工作情况,必需给IGT加一个大于100ms的低脉冲,电平下降持续时间不成逾越1ms。

    16~23为数据输入/输出,别离为DSR0、RING0、RxD0、TxD0、CTS0、RTS0、DTR0 和DCD0。tc35i模块的数据输入/输出接口现实上是一个串行异步收发器,合适ITU-T RS232接口尺度。它有固定的参数:8位数据位和1位遏制位,无校验位,波特率在300bps~115kbps之间可选,默认9600。硬件握手信号用RTS0/CTS0,软件流量节制用XON/XOFF,CMOS电平,支撑尺度的AT号令集。

    此中18脚RXD、19脚TXD为TTL的串口通信脚,需要和单片机或者PC通信。

    TC35i使用外接式SIM卡, 24~29为SIM卡引脚,SIM卡同TC35i是多么连接的:SIM上的CCRST、CCIO、CCCL、CCVCC和CCGND经由SIM卡阅读器与TC35i的同名端间接相连,ZIF连接座的CCIN引脚用来检测SIM卡能否插好,若是连接精确,则CCIN引脚输出高电平,不然为低电平。

    TC35i的第32脚SYNC引脚有两种工作模式,一种是唆使发射情况时的功率添加环境,另一种是唆使TC35i的工作情况,可用AT号令AT+SYNC进行切换,本模块使用的是后一种。当LED熄灭时,表白TC35i处于封闭或睡眠情况;当LED为600 ms亮/600ms熄时,表白SIM卡没有插入或TC35i正在进行收集登录;当LED为75 ms亮/3s熄时,表白TC35i已登录进收集,处于待机情况。

    30、31、32脚为节制脚,此中30为RTC backup,31为Power down,32 为SYNC。

    35~38为语音接口,35、36接扬声器放音。37、38能够间接接驻极体话筒来采集声音(37是话筒正端,39是话筒负端)

TC35I斥地技能:

    模块的供电电压若是低于3.3V会主动关机。同时模块在在发射时,电流峰值可高达2A。同时在此电流峰值时,电源电压(送入模块的电压)下降值不能逾越0.4V。所以该模块对电源的要求较高,电源的内阻+FFC连接线的电阻必需小于200mΩ。

    单片机经由两根I/O口节制TC35的开关机、复位等,经由串口与TC35进行数据通信,通信速度为9600Kbps,采用8位异步通信编制,1位起始位,8位数据位,1位遏制位。

    TC35模块输入输出的TTL正电平逻辑不是+5V,而是+2.9V,因而需要时加端口庇护。

    新版德国西门子工业级GSM模块TC35i套装 ,清单如下:

1、TC35i模块一个
2、SIM卡座一个
3、GSM天线转接线一根 
4、GSM小天线一根 
5、40芯公用排线及接插件一个

TC35i模块的细致英文PDF材料 >>下载

tc35i

TC35I西门子工业GSM模块 250元一个

40pin

40芯0.5mm间距扁平排线3厘米长 5元一个

40PIN 间距0.5mm 翻盖式公用排线卡座 5元一个 次要用于连接TC35I与方针板的连接。

天线转接线

TC35I公用天线转接线 10元一根 村田头转成SMA接口,次要用于TC35I模块和GSM天线的连接。是每个西门子模块必备的产物.

天线

GSM小天线(SMA接口) 10元一个

sim

这是SIM卡座 5元一个

lm2941

    LM2941CS 7元一片 它是开关型可调高机能微波电路公用稳压芯片,上图中最右边的第一脚是电压调整端,供给1.28V的基准电压,能够经由外围两个电阻的分压比能矫捷改变输出电压,第二脚是节制端,高电日常普通封闭电源模块,低电日常普通模块一般工作,第三脚是地,第四脚是电源输入端,第五脚是电压输出端,例如TC35抱负工作电压是4.2V。

    良多客户对TC35I不太熟悉,对若何调试无从下手,咱们以TC35I试验板为例来简单说一下,起首将内正外负的12V直流电源接通试验板的插座中,丈量LM2941CS的第5脚能否输出4.2V的直流电压?若是没有反省2941的第2脚能否接地?然后经由排线连接TC35I,插好手机卡并接好天线转接线和GSM天线,再通电丈量TC35I的第1~5脚能否有4.2V电压?将TC35I的第16脚也便是单片机的P1.3脚对地短路一下,这时TC35I就能启动,等1分钟后,用其他德律拨打手机卡号,若是不能接通重点反省排线座和SIM卡的6根线能否有接触不良?若是能接通申明TC35I一般,若是间接用单片机调试是很是坚苦的,能够将TC35I的串口分开单片机经由RS232电平转换后连接电脑的串口,先用咱们斥地的短消息收发公用软件(点击下载) 进行测试,若是能一般工作再用串口调试助手软件(点击下载)进行AT号令测试。最后用单片机调试。

以下是咱们对TC35i模块进行维修中的照片,TC35和TC35i使用上根底上差不多,在外观外形上,TC35i比TC35略有不合。

tc35i
取下TC35i模块的樊篱罩
tc35i
这是取下樊篱罩后的样子,内部又一次有IC。
tc35i
使用热风枪对BGA芯片进行焊接
tc35i
使用热风枪对BGA芯片进行焊接

    进行串口调试时,能够先发送AT,看看TC35I模块能否能回覆AT OK,若是行申明串口部门硬件一般,若是不能答复,请顺着串口的两根PCB走线反省,看看4053的两根飞线能否连接精确?TC35I排线座上的两根串口线能否接触不良?若是TC35I和单片机的供电电压不异,能够去掉220欧姆的庇护电阻。

    又一次有AT号令比力复杂,不合生产日期的TC35I模块的AT指令可能有一些区别,请客户以实践为滓劳心调试,一个复杂的系统完全希望别人是不成能成功的,请务必保持必然的心理预备。

-->>点击这里能够下载到细致的TC35I英文使用申明书

-->>点击这里能够下载到简编的中文AT指令

下面咱们列举一些常用的AT指令:

节制端发送的AT指令
TC35回覆
指令的功能
备注
AT
OK
通信握手
 
AT+CLCC
OK
来德律时有信号输出
串口输出:RING
AT+CMGL=0
 
读取全数未读过的SMS动静
 
AT+CMGL=2
 
列出已有的短消息
 
AT+CMGL=4
 
读取全数SMS动静
 
AT+CMGR=X
 
读取第X条短动静
 
AT+CMGF=0
 
用PDU格局
 
AT+CMGD=X
 
删除第X条短动静
 
AT+CGSN
 
读取TC35I的序列号
例如:351254004238596
AT+CSCA
 
显示短消息核心地址
 
AT+CMGW
 
写短消息并存储。
 
ATD051383082087;
 
拨打051383082087德律
留意需要最后的分号
AT+CNMI=1,1,2
OK

设置收到短动静提示

例如:+CMTI:“SM”,4 4暗示手机内短动静数量

    这是用串口调试助手成功发送的中文短消息完整过程,短信核心号码:13800513500 短信领受方号码:13306285091 短信内容:晚上好123 红色暗示发送的内容,蓝色暗示领遭到的数据,黑色暗示备注。

AT(回车)通信握手
OK
AT+CMGF=0 设置为PDU模式,由于要发送中文汉字
OK
AT+CMGS=6
 发送短动静的字节数
暗示能够领受数据
0891683108503105F011000B813103265890F10008A90C665A4E0A597D003100320033 包含短信核心、领受方手机号码和短信内容的数据
1A 发送结束标记,必然要十六进制大写模式,不是ASIC码!(能够在串口调试助手中勾选十六进制选项)只需最后发送1A十六进制码后短信才会被成功发出!
+CMGS: 45

OK 暗示第45条短信发送成功

下面阐发这条消息:
08——暗示短动静核心地址长度;
91——暗示短动静核心号码类型;
68----中国代码
3108200905F0——暗示短动静房层核心号码;1380 0290 500
0103——暗示发送短动静的编码编制;
0D——暗示方针地址长度;
91——暗示方针地址类型;
683199312523F9——暗示领受短动静的手机号码为13991352329(后面68是固定的,后面的手机号码每2位掉换一下位置,最后一位后面插手F)
3208——暗示发送中文字符编制;
0C——暗示短动静长度;
665A4E0A597D003100320033——暗示发送中文字符的UNICODE码
汉字的中文内码: 665A{晚} 4E0A{上} 597D{好} 0031{1} 0032{2} 0033{3}。

单片机完成短信主动发送

进行短信发送的前提是短信内容的精确编码。颠末以上对短信发送过程的阐发,能够经由单片机对其进行完成。下面是完成法式例程:

/*-------------------------------------------------------------------------

函数名:PDU_SMS()

功能 :发送短信

参数申明:SMS_Center为短信核心号码 11位

SMS_Telenum为短信领受方的号码 11位

SMS_Context为短信的内容

--------------------------------------------------------------------------------*/

int PDU_SMS(char *SMS_Center, char *SMS_Telenum,

char *SMS_Context,char is_GB)

{

int i,j;

unsigned char len,time;

char lens[3];

time=0;

for(i=0;i<300;i++) PDU_Code[i]=PDU_t[i];

/*----------设置短信核心号码--------------*/

for (i = 0, j = 0; i < strlen(SMS_Center) / 2; i++)

{

PDU_Code[6+(j++)] = SMS_Center[2 *i + 1];

PDU_Code[6+(j++)] = SMS_Center[2 *i];

}

PDU_Code[6+j++] = 'F'; //在最后补上的F

PDU_Code[6+j] = SMS_Center[strlen(SMS_Center) - 1];

/*---------------------------------------------*/

/*----------设置领受号码--------------*/

for (i = 0, j = 0; i < strlen(SMS_Telenum) / 2; i++)

{

PDU_Code[26+(j++)] = SMS_Telenum[2 *i + 1];

PDU_Code[26+(j++)] = SMS_Telenum[2 *i];

}

PDU_Code[26+j++] = 'F';

PDU_Code[26+j] = SMS_Telenum[strlen(SMS_Telenum) - 1];

/*---------------------------------------------*/

/*----------设置短信内容长度--------------*/

if(is_GB==0)

len = strlen(SMS_Context) *2;

else

len = strlen(SMS_Context);

PDU_Code[44] = (len >> 4) > 9 ? (len >> 4) + 55: (len >> 4) + 48;

PDU_Code[45] = (len &0x0f) > 9 ? (len &0x0f) + 55: (len &0x0f) + 48;

/*---------------------------------------------*/

/*----------编码短信内容--------------*/

if(is_GB==0)//若是不是GB码,短信内容为ascii码字符串

{

for (i = 0,j=0; i<strlen(SMS_Context);i++)

{

szzh16(SMS_Context[j++],lens);

PDU_Code[46+i*4] = '0';

PDU_Code[46+i*4+1] = '0';

PDU_Code[46+i*4+2] = lens[0];

PDU_Code[46+i*4+3] = lens[1];

}

PDU_Code[46+i*4] = 0x1a;

PDU_Code[46+i*4+1] = 0xff;

}

else

//短信内容为GB码,若是要使手机能够大概显示,改到UNICODE编码

{

for (i = 0,j=0; i<strlen(SMS_Context);i++)

{

szzh16((int)SMS_Context[j++],lens);

PDU_Code[46+i*2] = lens[0];

PDU_Code[46+i*2+1] = lens[1];

}

PDU_Code[46+i*2] = 0x1a;

PDU_Code[46+i*2+1] = 0xff;

}

/*---------------------------------------------*/

if(PDU_HandShake())

{

do

{

//LCD_PutChn(5,96,"SS...");

//if(is_GB)

PDU_EnablePDU();

if(is_GB==0)

PDU_SetLength(Strlen(SMS_Context)*2);

else

PDU_SetLength(Strlen(SMS_Context));

PDU_Send(PDU_Code);

//LCD_PutEng(5,96,"SS");

for(i=0;i<25;i++)

delay(20000);

sbuf[counter]=0;

//LCD_PutNum16(5,96,time);

counter=0;

time++;

}

//判断能否发送成功,若是不成功继续发送,最多4次,如仍不成功,前去0

while(strpos(sbuf+strlen(sbuf)-20,'G')==-1&&time<4);

if(strpos(sbuf+strlen(sbuf)-20,'G')==-1)

return 0;

else

return 1; //成功的话前去0

}

else

{

//LCD_PutEng(5,96,"LL");

sbuf[counter]=0;

//LCD_PutEng(0,0,sbuf);

counter=0;

return 0;

}

}

以上法式成功完成短信的发送,此中的一些函数限于篇幅可自行完成。

(6)单片机对短信的读取与解码

单片机能够经由AT指令对短信猫中的短信进行读取,并对读入的短信数据进行阐发与解码。

读出的短信格局与发送时的短信编码大致是不异的。下面给出响应的法式例程,读者能够在自行测验考试中对照验证。

1. 读取某一条短信,并将其进行显示

/*-------------------------------------------------------

函数名:LAD_SMS()(short for "Load And Display the Short MessageS")

功能:用户函数,读取第n条短信,并在LCD的(x,y)位置显示出来

----------------------------------------------------------*/

unsigned char LAD_SMS(unsigned char n,unsigned char x,unsigned char y)

{

unsigned char i,len,t;

char temp[5];

char temp1[3];

//IN_Draw_BlankorBlackRect(0,20,30,72,0);

szzh10(n,temp1);

//将n转为响应的字符串,如n=21,则字符串为"21",用以与AT指令拼接。

t=85;

clear_sbuf();

counter=0;

send_s("AT+CMGR=");//AT+CMGR为读取短信的AT指令

send_s(temp1);//上面所得的字符串

send(0x0d);

send(0x0a);

for(i=0;i<10;i++) delay(10000); //等待读取完毕

sbuf[counter]=0; //在收到的数据末尾附加'\0'

temp[0]=sbuf[23];

temp[1]=sbuf[24];

temp[2]=sbuf[25];

temp[3]=0;

if(sbuf[25]!=0x0d) t++;

for(i=0;i<strlen(temp);i++) if(temp[i]==0x0d) temp[i]=0;

len=atoi(temp); //获取收到的短信内容长度

//LCD_PutEng(23,76,"(SM:");

//LCD_PutNum16(27,76,n);

//LCD_PutEng(29,76,")");

if(len==0)

{

//LCD_PutEng(5,96,"EMP");

//LCD_PutChn(x,y,">短信空");

delay(50000);

return 0;

}

len-=20;

if(len>90)

{

//LCD_PutEng(5,96,"MTL");

//LCD_PutChn(x,y,">短信太长");

delay(50000);

return 0;

}

for(i=0;i<len;i++)

{

temp[0]=sbuf[t+2*i];

temp[1]=sbuf[t+2*i+1];

temp[2]=0;

sbuf[i]=_hex_(temp);

//收到的短信内容是内存编制的显示暗示,转为十六进制数

}

sbuf[i]=0;

Analysis_Pro();//解码后的内容在sbuf中,此函数对其进行显示输出

//LCD_PutEng(x,y,inf_bw.Date);

//LCD_PutEng(x,y,sbuf+29); 

delay(50000);

clear_sbuf();

counter=0;

return 1;

}

2. 检测新短信

/*-------------------------------------------------------

函数名:Check_New()

功能:用户函数,检测有无新的短信,若是有前去1,不然前去0

----------------------------------------------------------*/

unsigned char Check_New()

{int i;

send_s("AT+CMGL=0"); //AT+CMGL=0为读取新短信的AT指令

send(0x0d);

send(0x0a); //发送回车

delay(10000); //等待领受完毕

if(sbuf[12]=='O') return 0xff;

if(sbuf[12]=='+')

{

for(i=18;i<23;i++)

if(sbuf[i]==',') sbuf[i]=0;

return atoi(sbuf+19); //前去新短信的位置

}

}

3. 删除某条短信

/*-------------------------------------------------------

函数名:Delete()

功能:用户函数,删除第n条短信

----------------------------------------------------------*/

unsigned char Delete(unsigned char n)

{

char t[10];

char t1[5];

strcpy(t,"AT+CMGD="); //AT+CMGD为删除短信的AT指令

szzh10(n,t1);

strcpy(t+8,t1);

while(Send_AT_CMD(t)!=1);

//LCD_PutEng(5,96,"SM");

//LCD_PutNum16(7,96,n);

//LCD_PutEng(10,96,"De");

delay(60000);

return 1;

}

TC35的节制次要包含如下几类指令:

  (1)初始化指令

  设置短动静发送格局AT+CMGF=1<CR>,设置1代表PDU模式,<CR>是回车符号,也便是0x0d,指令精确则模块前去<CRLF>OK<CRLF>,<CRLF>是回车换行符号。

  (2)设置/读取短动静核心

  短动静核心号码由挪动运营商供给。

  设置短动静核心的指令格局为:

  AT+CSCA=″+8613800531500″(短动静核心)<CR>

  设置精确则模块前去<CRLF>OK<CRLF>。

  读取短动静办事核心则使用号令:

AT+CSCA=?<CR>

  TC35模块该当前去:

<CRLF>+CSCA:″8613800531500″<CRLF>。

  (3)设置短动静达到主动提示

  设置短动静达到主动提示的指令格局为:

AT+CNMI=1,1,0,0,1<CR>

  设置精确则TC35模块前去:

<CRLF>OK<CRLF>。

  设置此号令可使模块在短动静达到后向串口发送指令:

<CRLF>+CMTI:″SM″,INDEX(消息存储位置)<CRLF>。

  经由TC35发送短动静的方式为:

  PC上的节制软件按照PDU的格局发送和领受数据,短动静的内容能够是中文或者其他字符。在PDU模式,若是发送短动静,则起首发送短动静数据的长度:

AT+CMGS=<length><CR>

  等待TC35模块前去ASCII字符">",则能够将PDU数据输入,PDU数据以<Z>(也便是0x1a)作为结束符。短动静发送成功,模块前去:

<CRLF>OK<CRLF>

  经由TC35领受短动静的方式为:

  短动静到来后,串口上会领遭到指令

<CRLF>+CMTI:″SM″,INDEX(消息存储位置)<CRLF>

  PC上的节制软件经由读取PDU数据的AT号令

AT+CMGR=INDEX<CRLF>

  将TC35模块中PDU格局的短动静内容读出。若是用+CMGL代替+CMGR,则可一次性读出全数短动静。

  经由TC35删除短动静的方式为:

  PC上的节制软件收到一条短动静并处置后,需要将其在SIM卡上删除,以防止SIM卡饱和。删除短动静的指令为:

AT+CMGD=INDEX<CR>

  删除后模块前去

<CRLF>OK<CRLF>

2.法式实例

  由于本文的主旨在于讲解串口通信,因而,咱们樊篱图形用户界面的细节,制造一个简单的短信收发软件,它包含了节制短信终端的所有串口通信内容。现实上,一个抱负的短信收发软件的界面应类似于Outlook或Foxmail,包含收件箱、发件箱、已发送短信箱等内容,可是这些东西都与咱们要引见的串口通信无关,因而,下面的软件界面虽"败絮其外",但仍可称得上"金玉此中":

  关于界面上控件的描述如下:

BEGIN
  EDITTEXT IDC_SMSCONTENT_EDIT,39,61,242,38,ES_AUTOHSCROLL
  PUSHBUTTON "发送",IDC_SEND_BUTTON,316,80,45,18
  GROUPBOX "领受短动静",IDC_STATIC,28,124,361,167
  LTEXT "对方手机号",IDC_STATIC,41,35,42,11
  EDITTEXT IDC_PHONENUM_EDIT,88,30,192,17,ES_AUTOHSCROLL
  PUSHBUTTON "断根",IDC_CLEAR_BUTTON,316,30,45,18
  GROUPBOX "发送短动静",IDC_STATIC,29,19,361,95
  LISTBOX IDC_RECVSMS_LIST,43,137,331,127,LBS_SORT | 
  LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
  PUSHBUTTON "领受",IDC_RECV_BUTTON,77,269,55,16
  PUSHBUTTON "清空",IDC_DELETEALL_BUTTON,273,268,45,14
END

  对话框类的动静映照为:

BEGIN_MESSAGE_MAP(CSMSControlDlg, CDialog)
//{{AFX_MSG_MAP(CSMSControlDlg)
  ON_WM_SYSCOMMAND()
  ON_WM_PAINT()
  ON_WM_QUERYDRAGICON()
  ON_BN_CLICKED(IDC_CLEAR_BUTTON, OnClearButton)
  ON_BN_CLICKED(IDC_SEND_BUTTON, OnSendButton)
  ON_BN_CLICKED(IDC_RECV_BUTTON, OnRecvButton)
  ON_BN_CLICKED(IDC_DELETEALL_BUTTON, OnDeleteallButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

 下面是对本例程软件的次要数据布局和核心函数的引见:

  数据布局

// 用户消息编码编制
#define GSM_7BIT 0
#define GSM_8BIT 4
#define GSM_UCS2 8 
// 短动静参数布局,编码/解码共用
// 此中,字符串以0结尾
typedef struct
{
  char SCA[16]; // 短动静办事核心号码(SMSC地址)
  char TPA[16]; // 方针号码或答复号码(TP-DA或TP-RA)
  char TP_PID; // 用户消息和谈标识(TP-PID)
  char TP_DCS; // 用户消息编码编制(TP-DCS)
  char TP_SCTS[16]; // 办事时间戳字符串(TP_SCTS), 领受时用到
  char TP_UD[161]; // 原始用户消息(编码前或解码后的TP-UD)
  char index; // 短动静序号,在读取时用到
} SM_PARAM;

  发送短动静

  发送按钮对应的函数为CSMSControlDlg::OnSendButton,它读取用户输出并按照方针德律号码和短消息内容构成SM_PARAM(源PDU参数)的内容,接着进行发送:

void CSMSControlDlg::OnSendButton() 
{
  // TODO: Add your control notification handler code here
  //获得用户输入
  CString desPhoneNum;
  CString smsContent;
  GetDlgItemText(IDC_PHONENUM_EDIT,desPhoneNum);
  GetDlgItemText(IDC_SMSCONTENT_EDIT,smsContent);

 //填充SM_PARAM布局体内容
  SM_PARAM smParam;
  smParam = CreateSMPARAMStruct(desPhoneNum,smsContent);

 //发送短消息
  gsmSendMessage(smParam);
}

  此中调用的gsmSendMessage函数暗示了串口通信的核心内容,它按照第1节阐述的GSM模块发送短动静的串口节制流程进行短信的发送:

BOOL gsmSendMessage(const SM_PARAM *pSrc // pSrc: 源PDU参数指针)
{
  int nPduLength; // PDU串长度
  unsigned char nSmscLength; // SMSC串长度
  int nLength; // 串口收到的数据长度
  char cmd[16]; // 号令串
  char pdu[512]; // PDU串
                                                        char ans[128]; // 应对串

 nPduLength = gsmEncodePdu(pSrc, pdu); // 按照PDU参数,编码PDU串
  strcat(pdu, "\x01a"); // 以Ctrl-Z结束

 gsmString2Bytes(pdu, &nSmscLength, 2); // 取PDU串中的SMSC消息长度
  nSmscLength++; // 加上长度字节本身

 // 号令中的长度,不包罗SMSC消息长度,以数据字节计
  sprintf(cmd, "AT+CMGS=%d\r", nPduLength / 2-nSmscLength); // 生成号令

 WriteComm(cmd, strlen(cmd)); // 先输出号令串

 nLength = ReadComm(ans, 128); // 读应对数据
  
  // 按照可否找到"\r\n> "决定成功与否
  if (nLength == 4 && strncmp(ans, "\r\n> ", 4) == 0)
  {
   WriteComm(pdu, strlen(pdu)); // 获得必定回覆,继续输出PDU串

  nLength = ReadComm(ans, 128); // 读应对数据
                                                                                     
   // 按照可否找到"+CMS ERROR"决定成功与否
   if (nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
   {
    return TRUE;
   }
  }
  return FALSE;
}

  读取短动静

  点击"领受"按钮会经由gsmReadMessage函数的调用获得所有短动静,最后在列表控件中显示所有短信:

void CSMSControlDlg::OnRecvButton() 
{
  // TODO: Add your control notification handler code here
  SM_PARAM smParam[100];//短信缓冲区
  int smsNum;//短信条数
  smsNum = gsmReadMessage(smParam);//读取短信

 //显示短信
  for(int i=0;i<smsNum;i++)
  {
   m_recvlist.AddString(CString(smsNum[i].TPA)+smsNum[i].TP_UD);
  } 

   此中调用的gsmReadMessage函数完成最核心的短信领受功能,它按照第1节阐述的GSM模块领受短动静的串口节制流程进行短信的领受:

// 参数:pMsg 短动静缓冲区,必需足够大
// 前去:短动静条数
int gsmReadMessage(SM_PARAM* pMsg)
{
  int nLength; // 串口收到的数据长度
  int nMsg; // 短动静计数值
  char* ptr; // 内部用的数据指针
  char cmd[16]; // 号令串
  char ans[1024]; // 应对串

 nMsg = 0;
  ptr = ans;

 sprintf(cmd, "AT+CMGL\r"); // 生成号令,用+CMGL可一次性读出全数短动静
                   
  WriteComm(cmd, strlen(cmd)); // 输出号令串
  nLength = ReadComm(ans, 1024); // 读应对数据
  // 按照可否找到"+CMS ERROR"决定成功与否
  if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
  {
   // 轮回读取每一条短动静, 以"+CMGL:"开首
   while((ptr = strstr(ptr, "+CMGL:")) != NULL)
   {
    ptr += 6; // 跳过"+CMGL:"
    sscanf(ptr, "%d", &pMsg->index); // 读取序号
                    
    ptr = strstr(ptr, "\r\n"); // 找下一行
    ptr += 2; // 跳过"\r\n"

   gsmDecodePdu(ptr, pMsg); // PDU串解码
    pMsg++; // 预备读下一条短动静
    nMsg++; // 短动静计数加1
   }
  }
   return nMsg;
}

删除短动静

  咱们能够在读取完所有短消息后调用gsmDeleteMessage函数在GSM模块上删除那些曾经被领遭到PC上的短消息,它按照第1节阐述的GSM模块删除短动静的串口节制流程进行短信的删除:

// index: 短动静序号,从1起头
BOOL gsmDeleteMessage(const int index)
{
  int nLength; // 串口收到的数据长度
  char cmd[16]; // 号令串
  char ans[128]; // 应对串

 sprintf(cmd, "AT+CMGD=%d\r", index); // 生成号令

 // 输出号令串
  WriteComm(cmd, strlen(cmd));

 // 读应对数据
  nLength = ReadComm(ans, 128);

 // 按照可否找到"+CMS ERROR"决定成功与否
  if (nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
  {
   return TRUE;
  }
  return FALSE;
}

  在PC节制软件的短信列表框中删除所有短动静的"清空"按钮函数为:

void CSMSControlDlg::OnDeleteallButton() 
{
  // TODO: Add your control notification handler code here
  m_recvlist.ResetContent();
}

  设置/读/写串口

  在使用法式启动与退出及gsmSendMessage、gsmReadMessage和gsmDeleteMessage函数中遍及使用的串口相关函数用WIN32 API完成:

// 串口设备句柄
HANDLE hComm;

// 打开串口
// pPort: 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种编制,建议用后者
// nBaudRate: 波特率
// nParity: 奇偶校验
// nByteSize: 数据字节宽度
// nStopBits: 遏制位
BOOL OpenComm(const char *pPort, int nBaudRate, int nParity, int nByteSize, int
nStopBits)
{
  DCB dcb; // 串口节制块
  COMMTIMEOUTS timeouts =
  {
   // 串口超时节制参数
   100, // 读字符间隔超不时间: 100 ms
   1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
   500, // 根底的(额外的)读超不时间: 500 ms
   1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
   100
  }; // 根底的(额外的)写超不时间: 100 ms

 hComm = CreateFile(pPort, // 串口名称或设备路径
   GENERIC_READ | GENERIC_WRITE, // 读写编制
   0, // 共享编制:独有
   NULL, // 默认的平安描述符
   OPEN_EXISTING, // 建立编制
   0, // 不需设置文件属性
   NULL); // 不需参照模板文件

 if (hComm == INVALID_HANDLE_VALUE)
   return FALSE;
  // 打开串口失败

 GetCommState(hComm, &dcb); // 取DCB
  dcb.BaudRate = nBaudRate;
  dcb.ByteSize = nByteSize;
  dcb.Parity = nParity;
  dcb.StopBits = nStopBits;

 SetCommState(hComm, &dcb); // 设置DCB
  
  SetupComm(hComm, 4096, 1024); // 设置输入输出缓冲区大小

 SetCommTimeouts(hComm, &timeouts); // 设置超时
  return TRUE;
}

// 封闭串口
BOOL CloseComm()
{
  return CloseHandle(hComm);
}

// 写串口
// pData: 待写的数据缓冲区指针
// nLength: 待写的数据长度
void WriteComm(void *pData, int nLength)
{
  DWORD dwNumWrite; // 串口发出的数据长度
  WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}

// 读串口
// pData: 待读的数据缓冲区指针
// nLength: 待读的最大数据长度
// 前去: 现实读入的数据长度
int ReadComm(void *pData, int nLength)
{
  DWORD dwNumRead; // 串口收到的数据长度
  ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
  return (int)dwNumRead;

  编/解码GSM短动静

  陷于本文的篇幅,这里只给出编解码函数的原型,具体请参看GSM尺度及《经由串口收发短动静》一文。

// UCS2编码 前去: 方针编码串长度
int gsmEncodeUcs2(const char *pSrc, // 源字符串指针
  unsigned char *pDst, // pDst: 方针编码串指针
  int nSrcLength // nSrcLength: 源字符串长度
);

// UCS2解码 前去: 方针字符串长度
int gsmDecodeUcs2(const unsigned char *pSrc, //源编码串指针
char *pDst, // pDst: 方针字符串指针
int nSrcLength // nSrcLength: 源编码串长度
);

//可打印字符串转换为字节数据 前去: 方针数据长度
//如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
int gsmString2Bytes(const char *pSrc, // pSrc: 源字符串指针
unsigned char *pDst, // pDst: 方针数据指针
int nSrcLength // nSrcLength: 源字符串长度 
);

// 字节数据转换为可打印字符串 前去: 方针字符串长度
// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"
int gsmBytes2String(const unsigned char *pSrc, // pSrc: 源数据指针
char *pDst, // pDst: 方针字符串指针
int nSrcLength // nSrcLength: 源数据长度;

前去列表