• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос HSPI/VSPI GPIO12

unreg

Member
Собрал клавиатуру на сдвиговых регистрах 74HC165. Опрос делаю через SPI, в процессе появились такие вопросы.
Клавиатура подключена на пины HSPI кроме CLK. По даташиту CLK подключается на GPIO12, но я тогда не могу прошиться, есп постоянно сбрасывается. Подключился к GPIO13 и заработало, но это гибрид какой-то. Планировал использовать аппаратный SPI, а получил хрен пойми что. Прошу внести ясность, аппаратный SPI vs программный. есть ли особые директивы для запуска того или иного SPI. В чем разница между VSPI|HSPI можно ли их использовать одновременно, и как все-таки использовать GPIO12. Спасибо!
Код:
#include <SPI.h>

const byte PL = 15;
const byte chip_count = 4; 

static unsigned long last_time;
const int sec = 1;

void setup() {
    SPI.begin(14, 13);

    //SPI.begin();

    SPI.beginTransaction(SPISettings(32000000, MSBFIRST, SPI_MODE3)); 
    pinMode(PL, OUTPUT);
    digitalWrite(PL, HIGH);
    Serial.begin(115200);    
}

void loop() {
    unsigned long now = millis();
    byte keys[chips];

    digitalWrite(PL, LOW);
    digitalWrite(PL, HIGH);

    for (byte i = 0; i<chip_count; i++) {
        keys[i] = SPI.transfer(0);
    }

    if (now - last_time >= sec * 1000) {

        for (byte c = 0; c < chip_count; c++)
        {
            for (byte i = 0; i<8; i++) {
                Serial.print((keys[c] & (1 << i)) != 0 ? 1 : 0);
            }
            Serial.print(" ");
        }
       
        Serial.println(" ");

        last_time = now;
    }
}
 

unreg

Member
Заглянул сейчас в SPI.h и далее в pins_arduino.h так там :
static const uint8_t SS = 5;
static const uint8_t MOSI = 23;
static const uint8_t MISO = 19;
static const uint8_t SCK = 18;
а это вроде как пины VSPI по даташиту... получается у меня в коде программный SPI?
 

unreg

Member
Продолжу пока сам с собой разговаривать)) Переткнул пины согласно VSPI, убрал SPI.begin(14, 13); и раскомментировал SPI.begin(). Все работает нормально. Но вопросы пока остаются
 

nikolz

Well-known member
Продолжу пока сам с собой разговаривать)) Переткнул пины согласно VSPI, убрал SPI.begin(14, 13); и раскомментировал SPI.begin(). Все работает нормально. Но вопросы пока остаются
GPIO15 читается при старте после этого он может использоваться как угодно.
а GPIO12 не используется при программировании
Поясните почему Вы не можете его использовать.
При старте ваша программа не работает и клавиатура тоже.
 

unreg

Member
При старте ваша программа не работает и клавиатура тоже.
в строке 23 опечатка byte keys[chips]; заменить на byte keys[chip_count]; последствия правки на сайте. а так все прекрасно работает вместе с клавиатурой.
По GPIO12 странные дела... сейчас подключил CLK на GPIO12 и действительно работает нормально... вчера ни в какую не хотело заводиться. Ладно спишем на усталость, невнимательность и плохой контакт
 

zbot09

New member
в строке 23 опечатка byte keys[chips]; заменить на byte keys[chip_count]; последствия правки на сайте. а так все прекрасно работает вместе с клавиатурой.
По GPIO12 странные дела... сейчас подключил CLK на GPIO12 и действительно работает нормально... вчера ни в какую не хотело заводиться. Ладно спишем на усталость, невнимательность и плохой контакт
при старте esp уровень сигнала на этой ноге определяет питание встроенной флеш памяти, т.е. может привести к невозможности загрузить esp32
 
Сверху Снизу