SPI.setClockDivider()
SPI.setClockDivider() задаёт делитель тактового сигнала шины SPI относительно системной частоты, но считается устаревшей — в новых проектах используйте SPISettings вместе с SPI.beginTransaction().
Полная статья
Описание
setClockDivider() управляет тактовой частотой шины SPI, деля системную частоту на выбранный коэффициент. По умолчанию используется SPI_CLOCK_DIV4, то есть тактовый сигнал SPI составляет четверть системной частоты — 4 МГц на платах с тактовой частотой 16 МГц.
На платах AVR доступны фиксированные делители: 2, 4, 8, 16, 32, 64 и 128. На Arduino Due делитель задаётся числом от 1 до 255, а значение по умолчанию равно 21, что также соответствует примерно 4 МГц.
Функция входит в состав библиотеки SPI. Подробнее — в разделе SPI.
Внимание: функция устарела. Не используйте её в новых проектах. Для настройки параметров шины SPI применяйте SPISettings совместно с SPI.beginTransaction().
Синтаксис
SPI.setClockDivider(divider)SPI.setClockDivider(chipSelectPin, divider)(только для Arduino Due)
Параметры
divider— коэффициент деления тактовой частоты. На платах AVR допустимы константы:SPI_CLOCK_DIV2,SPI_CLOCK_DIV4,SPI_CLOCK_DIV8,SPI_CLOCK_DIV16,SPI_CLOCK_DIV32,SPI_CLOCK_DIV64,SPI_CLOCK_DIV128. На Arduino Due — целое число от 1 до 255.chipSelectPin— номер вывода выбора ведомого устройства (chip select); используется только на Arduino Due.
Возвращает
Ничего.
Практические замечания
- Чем выше делитель, тем ниже тактовая частота SPI и тем медленнее передаются данные. Это может быть нужно при работе с медленными или чувствительными к частоте периферийными устройствами.
- Слишком высокая тактовая частота — частая причина потери данных или некорректной работы устройства. Если обмен ведётся нестабильно, попробуйте увеличить делитель.
- На платах AVR нельзя задать произвольное значение делителя: используются только предопределённые константы
SPI_CLOCK_DIV2…SPI_CLOCK_DIV128. - На Arduino Due каждое периферийное устройство может иметь собственный делитель, передаваемый через параметр
chipSelectPin. - В современном коде вместо
setClockDivider()используйте SPISettings вместе с SPI.beginTransaction(), где тактовая частота задаётся в герцах напрямую, а не через делитель.