Установить режим SPI на Arduino Uno R4

spi sd-card temperature-sensor arduino-uno-r4-wifi

Я переношу код с Arduino Uno R3 на Arduino Uno R4 Wifi из-за ограничений оперативной памяти на R3. Я использую шилд термопары и шилд чтения/записи SD-карты, что требует переключения между режимами 3 и 0 на R3. Однако при попытке выполнить следующий код на R4:

SPI.setDataMode(SPI_MODE3); 

IDE сообщила мне, что в SPI нет функции setDataMode. Я попробовал запустить программу без setDataMode, но, похоже, она работает некорректно (SD-карты с пустыми данными).

Compilation error: 'class arduino::ArduinoSPI' has no member named 'setDataMode'

Спасибо всем за помощь. Проблема решена с помощью переменной SPISettings вместе с SPI.beginTransaction(SPISettings) и SPI.endTransaction(SPISettings)

, 👍0

Обсуждение

Текст в значительной степени соответствует описанию в вопросе, в нем говорится: Ошибка компиляции: «class arduino::ArduinoSPI» не имеет члена с именем «setDataMode», который является командой для изменения режима данных с помощью Arduino UNO R3, @Bh4

текст сообщения должен быть в вопросе, а не в комментарии ... добавил его для вас ... вы можете удалить комментарий, @jsotola

В первом абзаце документации [SPI.setDataMode()](https://reference.arduino.cc/reference/en/language/functions/communication/spi/setdatamode/) сказано: «Эта функция **не должна использоваться** в новых проектах. Используйте SPISettings с SPI.beginTransaction() для настройки параметров SPI». Хотелось бы, чтобы было более чётко указано: «Эта функция **устарела с 2014 года** и существует только для обеспечения обратной совместимости»., @hcheung

Более подробное объяснение см. в моем ответе на аналогичный вопрос., @hcheung

Спасибо за помощь @hcheung, проблема решена с помощью «SPISettings» и SPI.beginTransaction(SPISettings), @Bh4


1 ответ


Лучший ответ:

0

Я посмотрел на SPI.h в ядре R4 здесь: https://github.com/arduino/ArduinoCore-renesas/blob/main/libraries/SPI/SPI.h

Похоже, вам нужно настроить структуру конфигурации и передать ее другой функции:

arduino::SPISettings const DEFAULT_SPI_SETTINGS = arduino::SPISettings(1000000, MSBFIRST, arduino::SPI_MODE0);
    arduino::SPISettings _settings = arduino::SPISettings(0, MSBFIRST, arduino::SPI_MODE0);

Затем в beginTransaction у вас есть возможность передать эти настройки:

virtual void beginTransaction(arduino::SPISettings settings);

Я не на 100% уверен, как все это работает, но, по крайней мере, это должно направить вас в правильном направлении.

,

Спасибо за помощь. Вы можете ответить мне здесь или на форуме. Я рассмотрю обе стороны и опубликую решения либо на форуме, либо здесь, как только найду решение., @Bh4

Было бы лучше, если бы у вас был только один пост. На обоих сайтах, по сути, одни и те же люди. Ваш пост, вероятно, лучше, потому что некоторые из нас действительно глубоко изучили R4., @Delta_G

Вы пробовали это? Создайте необходимые настройки, следуя модели из этого ответа, а затем попробуйте передать их в beginTransaction., @Delta_G