我所拥有的GSM调制解调器默认设置为115200波特率。我连接了PIC18微控制器,波特率为19200。我将调制解调器波特率更改为19200然后保存了设置,但每次重置调制解调器时,波特率都会变回115200.
以下是我使用的命令。
更改波特率
AT+IPR=19200
然后我以19200波特率重新打开超级终端(Putty)以保存当前设置。
保存设置
AT&W
但是在调制解调器复位后,波特率会变回115200.我正在使用M6000 GSM / GPS模块(Tk115 Gps Tracker)但是它没有很多支持,这里是{{ 3}}供参考。
我是否正确保存设置?
我在考虑在PIC18F87j11上将波特率更改为115200,但目前的8 mhz振荡器无法实现。任何反馈都会有所帮助。
谢谢!
答案 0 :(得分:3)
可能的解决方法(但可能不是最佳选择)是将波特率保存到内部闪存存储器中,然后使用单独的线程连续设置端口的波特率。
或强> 一个像;
的线程while (true)
{
MySerialPort.BaudRate = 19200; //this will set/update baud rate
Thread.Sleep(30000); //this will sleep for 30 seconds
}
将每30秒保存一次波特率;
第一个例子
或者继续我的第一个例子(将波特率保存到闪存中)
是在你的程序启动时,你读取你的内部闪存存储,并从存储的值中分配波特率。
至于在超级终端/等中设置波特率 - 这些只是“临时”波特率 - 有点像调整收音机 - 你可以从不同的波特率听到不同的东西 - 这就是超级终端的工作原理 - 它不是'保存'波特率,只分配一段时间(直到你关闭和打开你的收音机)。
对于BootLoader,应该有一种'退出'引导加载程序模式的方法 - 看看你的微控制器文档,因为它只应该在你更新你的MC或'闪烁'更新时 - 而不是经常( Bootloader就像按下PC上的“重置”按钮一样!
答案 1 :(得分:2)
您尝试通过合并AT+IPR
和AT&W
来修复波特率是正确的,但不幸的是,它并不一定有效。
AT&W
命令实际上没有在任何标准中指定(请参阅我的问题Which standard specifies the AT&W AT command?),这意味着AT&W
确切保存的内容完全取决于制作者和你(不幸的是)不能假设保存或不保存波特率。
当然,如果制造商明确指出AT&W
确实可以保存波特率,那么您(对于该特定设备)很方便,但您链接的文档甚至不包括{{1}在命令列表中...所以当你测试并发现调制解调器不能保存波特率时,那么你必须接受这是一个不幸的事实。
当你说无法改变波特率时,我认为你的意思是问题是8MHz不容易分割到115200,这样误差就会变得不可忽略,如{8MHz表中{0}所示。 3}},对吧?
该表显示8MHz的误差为7.8%,但调制解调器在接收时是否容忍?如果X中的一个尝试成功,那就是您需要的所有内容,因为速度将设置为您所需的速度,例如在115200尝试AT&W
,然后在19200测试AT+IPR=19200
。如果成功,完成,否则再试一次。也许这会足够好并在合理的时间后解决自己?我认为值得尝试。
或者你可以尝试编写一个中断例程,以便在GPIO引脚上以速度115200发送AT
的起始+数据+停止位,然后连接以查看是否可以通过这种方式快速启动调制解调器速度(有关降低频率的计算,请参阅WormFood's AVR Baud Rate Calculator)。您可能还需要一些额外的电信号适配,并找到一些多路复用GPIO和UART的方法。
答案 2 :(得分:-1)
不确定为什么你需要改变波特率,特别是因为我认为很多动态会由连接驱动,不是吗?自从我完成调制解调器编程以来已经很久了。
无论如何,海报Demetris确实注意到了AT& W的重要性 - 它实际上是在做什么改变。认为你需要在脚本中拥有它。
如果这有帮助,这个网站至少会记录一些你可以使用这种调制解调器做的基本内容。可能你已经找到它,但也许其他读者没有找到它!
答案 3 :(得分:-1)
必须以新的波特率发送命令AT& W. 换句话说,在将波特率更改为19200之后,调制解调器无法继续以旧速度接收命令。尝试在发送AT& W命令之前将主机波特率更改为19200。