【问题标题】:Can't save baud rate settings?无法保存波特率设置?
【发布时间】:2014-09-05 20:26:31
【问题描述】:

我的 GSM 调制解调器默认设置为 115200 波特率。我有 PIC18 微控制器以 19200 波特率连接到它。我将调制解调器的波特率更改为 19200,然后保存设置,但每次重置调制解调器时,波特率都会变回 115200。

这些是我使用的以下命令。

更改波特率

AT+IPR=19200

然后我以 19200 波特率重新打开超级终端 (Putty) 以保存当前设置。

保存设置

AT&W

但是在调制解调器重置后,波特率变回 115200。我正在使用 M6000 GSM/GPS 模块(Tk115 Gps 跟踪器)但没有太多支持,这里是 datasheet以供参考。

我是否正确保存了设置?

我正在考虑将我的 PIC18F87j11 上的波特率更改为 115200,但对于当前的 8 mhz 振荡器来说这是不可能的。任何反馈都会有所帮助。

谢谢!

【问题讨论】:

  • 当您发送 AT&W 命令时,调制解调器是否响应“OK”?
  • 是的,我认为 gsm/gps 模块有一个脚本(引导加载程序)每隔几分钟将其重置为默认波特率。这是终端进入引导加载程序模式的picture,此时波特率变为 115200 或电源重置时。因为他们在中国,所以我无法从模块支持团队那里得到任何支持。我不知道脚本是否对此负责或其他原因。希望我没有让您感到困惑,如果有,请告诉我您是否需要更多信息。
  • 每次启动加载程序或重新启动模块时,我都必须以 115200 波特率打开超级终端(Putty),然后将其重新编程为 19200。
  • 有什么建议吗?
  • 为什么要降低波特率?另外,这可能是我对超级终端的误解,但它实际上并没有“改变”波特率(它只在打开期间保持这种状态)。超级终端没有永久更改波特率的“权力”或“权限”。

标签: serial-port command microcontroller gsm at-command


【解决方案1】:

一种可能的解决方法(但可能不是最佳选择)是将波特率保存到内部闪存中,然后有一个单独的线程不断设置端口的波特率。

类似的线程;

while (true)
{
  MySerialPort.BaudRate = 19200; //this will set/update baud rate
  Thread.Sleep(30000); //this will sleep for 30 seconds 
}

每 30 秒保存一次波特率;

第一个例子

或者使用我的第一个示例(将波特率保存到闪存)

是在你的程序启动时,你读取了你的内部闪存,并从那里存储的值中分配波特率。

至于在超级终端/等中设置波特率 - 这些只是“临时”波特率 - 有点像调谐收音机 - 你可以从不同的波特率听到不同的东西 - 这就是超级终端的工作方式 - 它不是保存'波特率,只分配一个临时时间(直到你关闭和打开你的收音机)。

至于 BootLoader,应该有一种“退出”引导加载程序模式的方法 - 查看您的微控制器文档,因为它应该只在您更新 MC 或“刷新”更新时开启 - 而不是经常开启(引导加载程序就像按下 PC 上的“重置”按钮)!

【讨论】:

    【解决方案2】:

    您尝试通过组合AT+IPRAT&W 来修复波特率是正确的,但不幸的是它不一定有效。


    AT&W 命令实际上没有在任何标准中指定(请参阅我的问题Which standard specifies the AT&W AT command?),这意味着AT&W 保存的确切内容完全取决于制造商,您(不幸的是)不能假设任何事情关于波特率是否保存。

    当然,如果制造商明确指定 AT&W 确实节省了波特率,那么您就可以开始(对于该特定设备),但您链接的文档甚至不包括命令列表中的 AT&W ...因此,当您测试并发现您的调制解调器不保存波特率时,您必须接受这是一个不幸的事实。


    当您说无法更改波特率时,我假设您的意思是,问题在于 8MHz 不容易分解为 115200,因此误差幅度g 变得不可忽视,如@987654322 的 8MHz 表中所示@,对吧?

    该表显示 8MHz 的误差为 7.8%,但也许调制解调器在接收方面是可以容忍的?如果 X 次尝试中的一次成功,这就是您所需要的,因为速度将设置为您需要的速度,例如在 115200 尝试 AT+IPR=19200,然后在 19200 测试 AT。如果成功,则完成,否则再试一次。也许这会足够好并在合理的时间后自行解决?我认为值得一试。

    或者,您也可以尝试编写一个中断例程,以在 GPIO 引脚上以 115200 的速度发送 "AT+IPR=19200\r" 的开始+数据+停止位,然后连接以查看是否有可能以这种方式启动调制解调器速度(有关降低频率的计算,请参阅http://www.fpga4fun.com/SerialInterface2.html)。您可能还需要为此进行一些额外的电信号调整,并找到一些复用 GPIO 和 UART 的方法。

    【讨论】:

      【解决方案3】:

      不确定为什么需要更改波特率,尤其是因为我认为其中很多都是由连接动态驱动的,不是吗?自从我完成调制解调器编程以来已经有很多年了。

      无论如何,发帖人 Demetris 确实注意到了 AT&W 的重要性——这才是真正需要改变的地方。认为您需要在脚本中包含它。

      如果这有帮助,这个网站至少记录了一些你可以用这种调制解调器做的基本事情。可能您已经找到它,但也许其他读者还没有!

      http://smsiseasy.com/technicalinfo.html

      【讨论】:

        【解决方案4】:

        命令 AT&W 必须以新的波特率发送。 换句话说,在将波特率更改为 19200 后,调制解调器无法继续以旧速度继续接收命令。在发送 AT&W 命令之前尝试将主机波特率更改为 19200。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多