因此,我成功将Esp8266附加到了Arduino Due。如果我选择波特率为74880,那么我可以通过串行监视器与它进行通信。然后,所有命令都能正确识别,并且可以正确读回。但是,当我发送重新启动Esp8266的命令AT+RST
时,我不能再与它通信,并需要重新打开波特率为115200的串行连接。每当我加载新的代码到Arduino,或者当我关闭Esp8266的电源。为什么在向ESP8266发送复位后需要更改波特率?
此行为从何而来?
因此,我成功将Esp8266附加到了Arduino Due。如果我选择波特率为74880,那么我可以通过串行监视器与它进行通信。然后,所有命令都能正确识别,并且可以正确读回。但是,当我发送重新启动Esp8266的命令AT+RST
时,我不能再与它通信,并需要重新打开波特率为115200的串行连接。每当我加载新的代码到Arduino,或者当我关闭Esp8266的电源。为什么在向ESP8266发送复位后需要更改波特率?
此行为从何而来?
在这里,你是在哪里有这样的行为的起源的解释:
波特率74880的Bd是发送调试消息ESP的“天然”的波特率由系统本身自动产生在开机过程中遇有26 MHz而不是40 MHz的晶振时使用板上 - 而且我们可以看到,大多数认为是的情况。
对于40 MHz晶振,波特率将与预期的一样(115200),但使用26 MHz晶振代替波特率为115200 * 26/40 = 74880
。
在引导加载程序结束后的波特率以其他方式控制,这就是为什么您有两个不同的波特率 - 第一个是默认的波特率(74880),第二个是稍后激活的波特率(可以设置的波特率)。
我通常将波特率设置为74880,这样我就可以看到自动生成的消息以及从代码发送的消息。
为了在复位后设置UART波特率持久性,您应该使用AT+UART_DEF
。
- AT + UART_DEF - 默认UART配置该命令设置UART配置并保存到闪烁。它被存储为默认的 参数,并且也将被用作此后的默认波特率。
这并不能解释为什么AT固件(在引导加载程序后运行)似乎也以74880波特进行通信。 – cranphin
是的,但我不需要改变它其他的东西,只是它可以在整个74880运行,不是吗?然而atm我需要打开与74880的初始连接,重置ESP,然后我需要连接115200波特率 – Kev1n91
@cranphin - 这是因为所有的调试消息都由ROM中包含的代码控制,所以闪存固件不能更改硬编码的时序。 –