Jeśli jesteś w granicach 1%, powinieneś być OK.
Załóżmy, że Twój UART używa na przykład zegara nadpróbkowania 16x, na przykład możesz ustawić go na 1 843 200 Hz na 16x nadpróbkę 115 200 bps. (takie nadpróbkowanie jest dość powszechne) Pozwala to UART odliczyć 8 przetaktowań od opadającej krawędzi bitu początkowego, dzięki czemu może zlokalizować środek komórek bitowych z dokładnością do +/- jednego okresu przetaktowania, po który odlicza 16 okresów przetaktowania, aby określić, kiedy próbkować dane.
Jeśli założymy, że może uderzyć w środek bitu początkowego, to aby nadal próbkować dane szeregowe w prawidłowych komórkach bitowych przez 8 bitów danych, częstotliwość zegara musi pozostać pomiędzy (8-0,5) / 8 a (8 + 0,5) ) / 8 lub +/- 6,25% zamierzonej przepływności. Wyższe podkręcanie zbliża się do idealnego stanu uderzenia w środek bitu początkowego, ale 8x lub 16x jest zwykle wystarczająco blisko, aby założyć, że 5% niedopasowania zadziała.
Nie można jednak liczyć na to, że druga strona będzie idealnie pasować do częstotliwości. Jeśli podłączysz urządzenie, które jest 4% szybkie do urządzenia, które jest 4% wolne, będziesz mieć problem. Wystąpił co najmniej jeden przypadek, w którym komputer działał trochę wolniej, a urządzenie trochę szybko, a oba mogły komunikować się tylko nieznacznie, chociaż to samo urządzenie działało dobrze z innymi komputerami, a komputer działał z innymi urządzenia. (O-scoped te przy około 112 kb / s i 119 kb / s) Z tego powodu warto starać się jak najbliżej osiągnąć częstotliwość nominalną. Nigdy nie widziałem, aby coś w granicach 2% wartości nominalnej miało problem.
Zazwyczaj stosuje się częstotliwość taktowania nadrzędnego, która zapewnia całkowitą wielokrotność zamierzonej częstotliwości nadmiernego próbkowania UART razy szybkość transmisji. Na przykład, jeśli chcesz, aby procesor działał z częstotliwością około 8 MHz, możesz użyć oscylatora 7,3728 MHz, który można podzielić przez 4, aby uzyskać 1,8432 MHz, czyli dokładnie 16 razy 115200.
Wspomniane 1% @JustJeff nie jest wymagane. Większość UART pozwala na błąd o pół tonu w ostatnim bicie. Najczęściej ramka składa się z 1 bitu początkowego, 8 bitów danych i 1 bitu stopu, co daje w sumie 10 bitów. Połowa na 10 bitów to 5% (6,25% JustJeff nie bierze pod uwagę bitu startu i stopu).
źródło
JustJeff zapomniał o bicie startowym, ale Stevenh dodał bit stopu. Zakładając, że wspólny protokół składa się z 8 bitów danych, 1 bitu początkowego i bez bitu parzystości (liczba bitów stopu nie ma znaczenia), istnieje 8 1/2 bitu razy od wiodącej krawędzi bitu początkowego do środka ostatni bit danych. Ogólnie rzecz biorąc, chcesz, aby odbiornik próbkował ten ostatni bit w czasie 1/4 bitu. Zauważ, że 1/2 bitu jest gwarantowanym progiem niepowodzenia. Wszystko w pobliżu staje się nierealne, ponieważ zawsze występuje szum elektryczny i drgania.
1/4 podzielone przez 8 1/2 = 2,94%.
Jak wspomniano JustJeff, większość implementacji UART faktycznie próbkuje przychodzące dane za pomocą asynchronicznego zegara 16x. Dodaje to kolejną niepewność czasową 1/16 bitu, ponieważ jest to błąd, z którym można zmierzyć zbocze wyprzedzające bitu początkowego. 1/16 bitów na 8 1/2 bitów to kolejne 0,74%. Wynika to z obliczonego wcześniej budżetu błędu. W rezultacie otrzymujesz 2,2% niedopasowania zegara dla odbiornika próbkującego ostatni bit w czasie 1/4 bitu od jego środka.
Jak powiedzieli inni, stosowanie kryształu 7,3728 MHz jest powszechną praktyką, gdy wymagana jest dokładna prędkość transmisji. Zwykle możesz ustawić procesor w pobliżu jego maksymalnej prędkości, jednocześnie osiągając szybkość transmisji UART w ramach błędu kryształu.
źródło
Jedną z kwestii, o których jeszcze nie wspomniano, jest to, że niektóre urządzenia oczekują przesłania bajtu danych dla każdego bajtu danych, które otrzymują. Jeśli takie urządzenie jest ciągle zasilane danymi, jego prędkość transmisji jest nawet 0,1% wolniejsza niż w urządzeniu nadawczym i nie ma możliwości wysyłania lekko skurczonych bitów stopu, jego wyjście będzie pozostawać w tyle za każdy 1000 kolejnych bajty, które wchodzą. Jeśli urządzenie jest ograniczone do 16 bajtów buforowania, usunie bajt danych po przejściu około 16 000, a następnie spadnie mniej więcej jeden bajt na tysiąc. Warto zauważyć, że tak zwane modemy „1200 bodów” faktycznie działają z prędkością nieco wyższą niż 1200 bitów / sekundę (chyba około 1202) właśnie z tego powodu (tak, że nawet jeśli nadajnik jest o 0,15% szybszy niż powinien) być,
źródło