AT+CMGS 返回错误

17

我正在使用SIM900 GSM模块连接到我的AVR微控制器。 我使用FT232进行数据传输测试。 首先,微控制器发送AT指令,它会响应OK。

AT OK
AT+CMGF=1 OK
AT+CMGS="+9893XXXXXX" returns ERROR and doesn't show ">"

有人能给我建议该怎么做吗?

(关于IT技术问题)

1
你应该使用+CMEE命令启用扩展错误消息报告,并查看设备返回的ERROR代码。 - Rev
我应该什么时候发送?以及使用什么结构? - Mohammad Farahi
2
请展示一些努力,自己去查看SIM900命令手册吧。关于如何使用和确切功能的+CMEE命令都在那里详细说明了。 - Rev
5个回答

21

使用命令AT+CSCS?将回答您所使用的短信编码类型。正确的答案是“GSM”,如果不是,您应该通过命令AT+CSCS="GSM"进行设置。

请记住,在短信文本结束时使用“Ctrl+Z”(而不是“Enter”)。


AT+CSCS="GSM" 对我解决了问题。谢谢! - Matt Ruwe

6

您没有将所有参数传递给命令。

命令格式如下:

AT+CMGS=<number><CR><message><CTRL-Z>

在哪:

<CR> = ASCII character 13
<CTRL-Z> = ASCII character 26

你只传递了数字,如果没有 <CR> ,你将看不到消息中的 > 符号。

示例:

AT+CMGS="+9893XXXXXX"
> This is the message.→

响应内容为:
+CMGS:<mr>
OK

其中 <mr> 表示消息参考。


2
@MohammadFarahi <CR> 是 0x0D(=13),但 Ctrl-Z 是 0x1A(=26)。 - bvdb

2

如果AT+CSCS?命令返回UCS2,则许多参数需要编码为UTF-16编码的十六进制字符串,因此电话号码将变成“002B0039003800390033...”,短信文本也需要以同样的方式编码。如果您不需要UCS2编码,则最简单的方法是切换到GSM编码(或另一个可用集合中的其他编码,如AT+CSCS=?命令所示)。


1
有时问题出在您所处的文本模式上。输入AT+CMGF?,您应该收到+CMGF: 1。如果您收到+CMGF: 0,请输入AT+CMGF=1。这将把消息格式从PDU模式更改为文本模式。我不确定它们都确切意味着什么,但这解决了我的问题。

SIM 800 AT命令手册


回答旧问题非常好!问题不仅是为了帮助提问者,也是为了帮助所有可能有同样问题的人。 - Winter

0

我遇到了同样的错误。之前的建议都是正确的。我只是想分享我的经验。我使用SIM800L模块。在我的项目开始时,它被设置为AT+CMGF=1。但事实证明,SIM模块偶尔会忘记这个参数。程序无法发送和读取短信。我曾尝试几天寻找问题的原因。

我的建议是,在使用CMGS或CMGR命令之前,检查一些参数,如CMGF=1,CSCS="GSM",CMEE=2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接