[原创]关于PDU模式接收短信,千万可别被误导

本文详细介绍了如何通过设置AT指令在GSM模块中处理短信接收,特别是PDU模式下的短信处理。针对某些模块无法直接将PDU串送到串口的问题,提出了一种通过监测串口数据并解析的方式来读取和处理短信。通过设置AT+CNMI命令,并结合Win32 API的串口事件处理,实现了短信到达时的自动读取。对于不支持一次性删除所有短信的模块,提出了逐条删除短信的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发送短信的时候,我们是确切地知道何时发送的;而接收数据的时候, 我们则不知道何时数据会到来,因此,在短信到达时,我们需要一种方式来获知它的到来并将其读出来。有两种方式:一是查询,二是触发事件。前一种方式我们不会用的,后一种方式是上选。我们可以预先对GSM模块设置一些参数,那么当它收到短信的时候,就会自动将数据送到串口上,我们就可以接着控制我们的程序去读取它了。

在这里,你必须非常清楚一些概念。不要以为短信到来的时候,GSM模块就一定可以将短信的内容直接送到串口上,然后我们直接读就可以了。如果你这样想,那么只能说你把事情想得太美好。事实上,模块给我们的回复是比较“乱”的,需要做不少处理(例如里面不仅有PDU串的内容,还有其他字符());不仅如此,甚至于很多GSM模块根本就不能在接收到短信的时候自动把PDU串送到串口上!例如,我所使用的GSM模块(它里面用的是西门子MC39i芯片)就是这样一个“弱智”的模块,你要使用事件触发的方式,最多最多只能让它做到:短信到来的时候,它会把短信写入SIM卡中(MC39i唯一的选择就是写存储器,然后再读出来),然后它会送一些提示信息到串口上,这时,你便可以监测到串口有数据来了,然后你再分析串口中数据的格式(里面包含了收到的短信写入了SIM卡上的位置号),然后再去SIM卡上找到那条短信,再读出来。是不是超级麻烦?的确!认了吧!

下面我们来看看怎么做:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值