Serge77> Вопрос. Допустим, частота осциллятора сильно отличается от нужной для правильной передачи по СОМ.
Вопрос в том, что такое "сильно"
Serge77> Как именно это отразится на принятых данных? Будут пропадать целые байты, а те, что всё-таки приняты, будут правильные?
Если скорость приёмника ровно в два раза больше скорости передатчика, то приниматься будут только каждый второй байт, причём, естественно, они будут мало иметь общего с переданными. Если скорость передатчика ровно в два раза больше скорости приёмника, то приниматься будут только байты, у которых младший бит равен нулю - и тоже, принятый код будет мало похож на переданный. Если разница дробная, возникают "всякие" искажения. При отличии порядка 10% обычно часть байт принимается правильно, часть - искажается.
Serge77> Или некоторые байты будут неправильные, но все будут приняты? Или будут и пропавшие, и неправильные?
Ну, смотри, типичный алгоритм приёма включается в момент начала старт-бита, отсчитывает половину его теоретической длины, если в этот момент то, что должно быть, т.е. ноль, то считается, что началась передача. Дальше отсчитывается теоретическая длина бита, фиксируется уровень, дальше опять пауза на длину бита и так до стоп-бита. Соответственно, критическая ошибка - 6,25%, при этом при приёме последнего бита набегает ошибка в пол-бита, и регистрация попадает на перепад на следующий бит.
Можно объяснить и пропуск байтов, если при этом передатчик передаёт быстрее, чем приёмник принимает и стоп-бит оказывается слишком коротким.
Serge77> Судя по моим наблюдениям, у меня все принятые байты правильные, но не все принимаются (или не все передаются). Может это и не связано с частотой осциллятора и с передачей вообще? Может МК не может прочитать какие-то байты из флеша?
Это может быть связано с пропуском прерываний во время обработки других прерываний. Это может быть связано с дефектами алгоритма - и не только алгоритма именно приёма. Тут пироман может помочь. Он недавно чинил очень похожую сбивку.