Главная chevron_right Функции chevron_right Связь chevron_right Serial.end()

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() до отключения.