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

SPI.end()

SPI.end() завершает работу с шиной SPI и освобождает аппаратный периферийный блок, не сбрасывая режимы выводов — их нужно переключить вручную через pinMode().

Полная статья

Описание

end() завершает сеанс работы с шиной SPI: аппаратный периферийный блок освобождается, и микроконтроллер перестаёт удерживать ресурсы, связанные с SPI. Важная деталь — режимы выводов SCK, MOSI, MISO и SS не сбрасываются: они остаются такими, какими были настроены до вызова. Если вам нужно переключить эти выводы на другие задачи, сделайте это явно через pinMode() после вызова end().

Функция полезна, когда обмен данными по SPI завершён и вы хотите освободить периферию — например, перед переходом в режим пониженного энергопотребления или когда тот же аппаратный блок нужно использовать иначе.

Эта функция является частью библиотеки SPI. Подробности см. в разделе SPI.

Где применяется

  • Энергосбережение. Перед переводом платы в режим сна вызов end() позволяет освободить периферийный блок SPI и снизить потребление.
  • Динамическое переключение устройств. Если в проекте поочерёдно используются разные интерфейсы и один из них занимает те же физические выводы, end() освобождает ресурс перед передачей управления другому коду.
  • Временная остановка обмена. В сложных скетчах можно остановить SPI-обмен на время выполнения критичной по времени задачи, а затем снова инициализировать шину через SPI.begin().

Синтаксис

SPI.end()

Параметры

Нет.

Возвращает

Ничего.

Практические замечания

  • После end() любые попытки отправить или принять данные через SPI без повторного вызова SPI.begin() приведут к непредсказуемому поведению.
  • Выводы SCK, MOSI, MISO и SS остаются в том же режиме (INPUT или OUTPUT), что и до вызова. Если вы хотите использовать их как обычные GPIO, явно вызовите pinMode() для каждого из них.
  • Пара SPI.begin() / end() может вызываться многократно в течение работы скетча — это штатный сценарий.
  • Если ваш код использует несколько SPI-устройств с разными настройками скорости или режима, удобно завершать сеанс с одним устройством через end(), а затем заново инициализировать шину с нужными параметрами для следующего.