¿Hay algún código que pueda usar para averiguar a qué velocidad de un puerto serie elegido se está ejecutando?
serial
arduino-mega
Hayden Thring
fuente
fuente
Respuestas:
No hay un nivel superior, una forma fácil de usar. Lo siento. Probablemente sea más fácil almacenar la velocidad de transmisión elegida en una variable cuando configura el puerto serie.
De todos modos, lo que puede intentar hacer para los UART de hardware basados en AVR es deshacer lo que
Serial.begin
hace para configurar una velocidad de transmisión en particular, pero es un poco molesto. Este es el código para configurar la velocidad en baudios:Puede encontrar los resultados de esto leyendo los registros correctos UCSRA, UBRRH y UBRRL. En uno, esos son los nombres de registro correctos, en un mega sus UCSR0A, UBRR0H, UBRR0L para Serial, UCRS1A ... para serial1 y así sucesivamente. Los tableros no avr (y
Serial
en un leonardo) serán totalmente diferentes.Habrá un solo estado para esos tres registros en un puerto serie de hardware AVR para una placa en particular (y la frecuencia de esa placa) a cada velocidad de transmisión. Puede intentar hacer una ecuación para obtener la velocidad de transmisión original, pero le recomiendo comparar los valores directos con una búsqueda de algún tipo porque los errores de redondeo aritmético de enteros lo harán un gran desastre.
Por ejemplo, en mi mega UBBR0H, UBBR0L y UCSR0A son 0, 207, 2 a 9600 baudios, pero son 0, 51, 2 a 38400 baudios y 0, 16, 0 a 57600 baudios.
fuente