Existe-t-il un code que je peux utiliser pour savoir à quelle vitesse le port série choisi s'exécute?
Existe-t-il un code que je peux utiliser pour savoir à quelle vitesse le port série choisi s'exécute?
Réponses:
Il n'y a pas de moyen de haut niveau facile à utiliser. Désolé. Il est probablement plus facile de simplement stocker le débit en bauds choisi dans une variable lorsque vous configurez le port série.
Quoi qu'il en soit, ce que vous pouvez essayer de faire pour les UART matériels basés sur AVR est de défaire ce qui Serial.begin
permet de configurer un débit en bauds particulier, mais c'est un peu pénible. Voici le code pour régler le débit en bauds:
// Try u2x mode first
uint16_t baud_setting = (F_CPU / 4 / baud - 1) / 2;
*_ucsra = 1 << U2X0;
// hardcoded exception for 57600 for compatibility with the bootloader
// shipped with the Duemilanove and previous boards and the firmware
// on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot
// be > 4095, so switch back to non-u2x mode if the baud rate is too
// low.
if (((F_CPU == 16000000UL) && (baud == 57600)) || (baud_setting >4095))
{
*_ucsra = 0;
baud_setting = (F_CPU / 8 / baud - 1) / 2;
}
// assign the baud_setting, a.k.a. ubrr (USART Baud Rate Register)
*_ubrrh = baud_setting >> 8;
*_ubrrl = baud_setting;
Vous pouvez trouver les résultats de cela en lisant les registres UCSRA, UBRRH et UBRRL appropriés. Sur un un, ce sont les noms de registre corrects, sur un méga son UCSR0A, UBRR0H, UBRR0L pour Serial, UCRS1A ... pour serial1 et ainsi de suite. Les planches non-avr (et Serial
sur un leonardo) seront totalement différentes.
Il y aura un seul état pour ces trois registres sur un port série matériel AVR pour une carte particulière (et la fréquence de cette carte) à chaque débit en bauds. Vous pouvez essayer de faire une équation pour obtenir le débit en bauds d'origine, mais je recommande simplement de comparer les valeurs directes avec une recherche quelconque, car les erreurs d'arrondi arithmétiques entières en feront un énorme gâchis.
Par exemple, sur mes méga UBBR0H, UBBR0L et UCSR0A, il y a 0, 207, 2 à 9600 bauds, mais ils sont 0, 51, 2 à 38400 bauds et 0, 16, 0 à 57600 bauds.