Протокол UART, как объяснил Маттиас, является асинхронным протоколом, основанным на времени. То, что определяет границы между битами, - это время, прошедшее с начала начального бита. Таким образом, микроконтроллер «сэмплирует» битовые (N+half)/baudrate
секунды после начала стартового бита. Полубит предназначен только для выборки в середине битов, поэтому он может иметь полубитовую разницу во времени между приемником и передатчиком (помните, что различия являются кумулятивными, и наихудший случай случается в последнем бите каждого кадра, который обычно равен но не всегда, 8-битная ширина, в зависимости от конфигурации). Ключом к тому, чтобы это работало, является наличие приемника и приемопередатчика с максимально возможной скоростью передачи данных.
Таким образом, микроконтроллер считает время между каждым битом, чтобы узнать, где находится каждый бит внутри кадра. Следующий персонаж перейдет в следующий кадр. Когда заканчивается каждый кадр, микроконтроллер начинает автоматически прослушивать следующий кадр, поэтому, когда приходит следующий стартовый бит, он уже знает, что должен начать новый кадр. Вот как символы разделены.
Кроме того, я добавлю, что вам на самом деле не нужны две частоты для передачи на UART-принимающий микроконтроллер. Вы можете использовать одну частоту в качестве OOK вместо двух частот в качестве FSK . Он имеет более высокую спектральную эффективность, и схемы намного проще, поскольку вам нужен только переключатель несущей волны в качестве передатчика и одночастотный детектор в качестве приемника, во многом как азбука Морзе. Не забывайте обычно использовать несущие с частотами, которые намного выше, чем скорость передачи данных, иначе более простые схемы не будут работать должным образом.