Алексей.
Active member
Да как же не блокирующаяся, сначала выполняется ожидание свободного места в фифоВсё равно функция передачи является не блокирующей и не неблокирующей
while((USS(uart->uart_nr) >> USTXC) >= 0x7f);
на 9600 время выхода одного байта очень большое, если не проверять свободное место в фифо, а просто записать байт в регистр USF(uart->uart_nr) = c, контроллер просто его проигнорирует.
до вызова Serial.write можно просто получить доступное количество байтов для записи Serial.availableForWrite и после вызова Serial.write запросив Serial.availableForWrite должны получить на единицу меньше.
Можно и время фиксировать, но зачем не понятно, если после вызова Serial.write первый Serial.availableForWrite вернул 100, второй и третий тоже 100 а четвертый вернул 101, значит какой то байт (самый первый) вышел из фифоПока счет micros() не достиг времени вывода символа не вызываете ничего.
Можно по подробнее, это не rs485 по двум проводам?сигнал направления передачи для полудуплексной шины