Я прокомментировал ответ Грега, но хотел бы добавить еще одну вещь. Для такого рода проблем золотой метод отладки состоит в том, чтобы сначала понять асинхронную последовательную связь, затем получить осциллограф и посмотреть, что происходит на линии. Если символы обмениваются, и это просто проблема скорости передачи, это будет особенно полезно, так как вы можете рассчитать скорость передачи, которую вы видите, а затем соответствующим образом настроить делитель.
Вот супер быстрый учебник, без сомнения, вы можете найти что-то более всеобъемлющее в Википедии или где-то еще.
Давайте предположим, что 8 бит, без контроля четности, 1 стоповый бит (самая распространенная установка). Тогда, если передаваемый символ, скажем, 0x3f (= ascii '?'), То строка выглядит так:
...--+ +---+---+---+---+---+---+ +---+--...
| S | 1 1 1 1 1 1 | 0 0 | E
+---+ +---+---+
Высокий (1) уровень составляет + 5 В на чипе и -12 В после преобразования в уровни RS232.
Низкий (0) уровень составляет 0 В на кристалле и + 12 В после преобразования в уровни RS232.
S - стартовый бит.
Тогда у нас есть 8 бит данных, сначала младший, поэтому здесь 00111111 = 0x3f = '?'.
E - это стоп-бит (e для конца).
Время движется слева направо, точно так же, как на дисплее осциллографа. Если скорость передачи данных составляет 4800, то интервал каждого бита (1/4800) секунд = 0,21 миллисекунды (приблизительно).
Приемник работает путем выборки линии и поиска падающего фронта (линия покоя просто логическая «1» все время). Приемник знает скорость передачи данных и количество начальных битов (1), поэтому он измеряет половину бита времени от заднего фронта, чтобы найти середину начального бита, а затем дискретизирует строку 8 раз подряд после этого, чтобы собрать биты данных. Затем приемник ожидает еще один бит (до середины прохода через стоп-бит) и начинает поиск другого стартового бита (т.е. падающего фронта). Тем временем чтение символов становится доступным для остальной системы. Передатчик гарантирует, что следующий задний фронт не начнется, пока не будет завершен стоповый бит. Преобразователь можно запрограммировать так, чтобы он всегда ожидал дольше (с дополнительными стоповыми битами), но это унаследованная проблема, дополнительные стоповые биты требовались только при очень медленных аппаратных и / или программных настройках.