AT+CMGR命令异常:使用GSM模块读取短信时出现两个陌生号码
问题分析与解决
从你提供的AT指令日志来看,你看到的第二个带*的号码并不是额外的发件人号码,而是短信服务中心(SMSC)的地址,属于AT+CMGR响应中的标准字段。
日志字段拆解
你的+CMGR响应对应文本模式下的标准返回结构,各字段含义大致如下:
+CMGR: "<短信状态>","<发件人号码>","<别名>","<短信时间戳>",<TOOA>,<TODA>,<PID>,<DCS>,"<SMSC号码>",<TOSCA>,<短信内容长度>
其中:
"REC UNREAD":未读收件箱短信状态"+9189******87":实际发件人号码"*+9170******00*":短信服务中心(SMSC)的地址,部分模块会用*包裹该字段作为标识
解决建议
- 只提取目标字段:在解析AT响应时,仅截取第二个双引号内的内容即可,忽略后续的SMSC字段。
- 验证字段身份:执行
AT+CSCA?命令查询当前模块配置的短信服务中心号码,对比日志中带*的号码,确认两者是否一致,以此验证该字段的属性。 - 无需修改模块配置:大部分GSM模块在文本模式下会默认返回SMSC字段,这属于正常行为,只需调整你的响应解析逻辑即可。
内容的提问来源于stack exchange,提问作者Vishnu A S
相关产品推荐
相关产品推荐

