Serial.end()
Serial.end() останавливает последовательную связь и освобождает выводы RX и TX, после чего их можно использовать как обычные GPIO через pinMode().
Полная статья
Описание
Serial.end() останавливает последовательную связь и освобождает выводы RX и TX — после вызова их можно использовать как обычные цифровые входы или выходы. Это полезно, когда UART нужен только на короткое время, а потом те же контакты должны выполнять другую роль.
Чтобы снова запустить последовательный порт, вызовите Serial.begin() с нужной скоростью.
Синтаксис
Serial.end()
Параметры
Serial — объект последовательного порта. На платах с несколькими UART-интерфейсами это может быть Serial, Serial1, Serial2 и т. д. Список доступных портов для каждой платы смотрите на странице Serial.
Возвращает
Ничего.
Пример кода
Следующий скетч отключает последовательный порт, а затем включает его снова.
void setup() {
Serial.begin(9600);
delay(1000); // Дать время для подключения Serial Monitor
Serial.println("Hello from Serial!");
Serial.end(); // Остановить связь
delay(2000); // Имитация выполнения других задач...
Serial.begin(9600); // Повторная инициализация serial
Serial.println("Serial restarted!");
}
void loop() {
}
Где применяется
- Переключение функции контактов. Если RX и TX нужны для подключения другого устройства (например, датчика с цифровым выходом),
Serial.end()освобождает их без перепайки. - Энергосбережение. На некоторых платах отключение UART снижает потребление тока в режиме сна — актуально для батарейных проектов.
- Отладка с последующим переключением. Можно использовать
Serialдля вывода отладочной информации при старте, а затем вызватьSerial.end()и задействовать те же выводы в рабочей схеме.
Практические замечания
- После
Serial.end()любые вызовыSerial.print()илиSerial.read()не будут работать — порт отключён. - Если вы вызываете
Serial.end(), а затем сноваSerial.begin(), дайте небольшую паузу (delay(10)) между ними — это помогает аппаратному UART корректно переинициализироваться. - На платах с USB-CDC (например, Leonardo, Micro, Leonardo ETH)
Serial— это виртуальный порт через USB, а не физические выводы RX/TX. ВызовSerial.end()на таких платах разрывает USB-соединение, а не освобождает контакты. - Если после
Serial.end()вы используете RX и TX как GPIO, не забудьте настроить их черезpinMode()— по умолчанию они остаются в состоянии, в котором были до отключения порта. Serial.end()не сбрасывает буферы приёма и передачи — при повторном вызовеSerial.begin()в буфере могут оказаться старые данные. Если это критично, очистите буфер черезSerial.flush()до отключения.