-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Add a workaround-delay in Serial.flush() #3714
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
In relation to #2536 and #2502 Tested at 80MHz and 160MHz with flash-frequency at both 40MHz and 80MHz, the bug mentioned in the above issues manifests in all cases. The proposed workaround seems to work fine, I tested at 2400bps, 9600bps, 115200bps, 230400bps and 2Mbps and didn't see anomalous output.
cores/esp8266/HardwareSerial.cpp
Outdated
@@ -152,6 +152,9 @@ void HardwareSerial::flush() | |||
} | |||
|
|||
uart_wait_tx_empty(_uart); | |||
//Workaround for a bug in serial not actually being finished yet | |||
//Wait for 8 data bits, 1 parity and 2 stop bits, just in case | |||
delayMicroseconds(1100000 / uart_get_baudrate(_uart) + 1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your original comment in the issue said this worked:
delayMicroseconds((int)(1000000.0 / uart_get_baudrate(_uart) * 11 + 1))
There is a difference of a factor of 10. Which is correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1000000 * 11 == 11000000. Nuff said.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, but 1100000 != 11000000
I think your PR is missing a zero.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, good catch. I don't know how that did happen.
* Add a workaround-delay in Serial.flush() In relation to esp8266#2536 and esp8266#2502 Tested at 80MHz and 160MHz with flash-frequency at both 40MHz and 80MHz, the bug mentioned in the above issues manifests in all cases. The proposed workaround seems to work fine, I tested at 2400bps, 9600bps, 115200bps, 230400bps and 2Mbps and didn't see anomalous output. * Remove extraneous character * Update HardwareSerial.cpp
In relation to #2536 and #2502
Tested at 80MHz and 160MHz with flash-frequency at both 40MHz and 80MHz, the bug mentioned in the above issues manifests in all cases. The proposed workaround seems to work fine, I tested at 2400bps, 9600bps, 115200bps, 230400bps and 2Mbps and didn't see anomalous output.