Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Вопрос HSPI/VSPI GPIO12

Тема в разделе "ESP32 - все о железе", создана пользователем unreg, 11 июн 2019.

  1. unreg

    unreg Новичок

    Сообщения:
    58
    Симпатии:
    0
    Собрал клавиатуру на сдвиговых регистрах 74HC165. Опрос делаю через SPI, в процессе появились такие вопросы.
    Клавиатура подключена на пины HSPI кроме CLK. По даташиту CLK подключается на GPIO12, но я тогда не могу прошиться, есп постоянно сбрасывается. Подключился к GPIO13 и заработало, но это гибрид какой-то. Планировал использовать аппаратный SPI, а получил хрен пойми что. Прошу внести ясность, аппаратный SPI vs программный. есть ли особые директивы для запуска того или иного SPI. В чем разница между VSPI|HSPI можно ли их использовать одновременно, и как все-таки использовать GPIO12. Спасибо!
    Код (C):
    1.  
    2. #include <SPI.h>
    3.  
    4. const byte PL = 15;
    5. const byte chip_count = 4;
    6.  
    7. static unsigned long last_time;
    8. const int sec = 1;
    9.  
    10. void setup() {
    11.     SPI.begin(14, 13);
    12.  
    13.     //SPI.begin();
    14.  
    15.     SPI.beginTransaction(SPISettings(32000000, MSBFIRST, SPI_MODE3));
    16.     pinMode(PL, OUTPUT);
    17.     digitalWrite(PL, HIGH);
    18.     Serial.begin(115200);    
    19. }
    20.  
    21. void loop() {
    22.     unsigned long now = millis();
    23.     byte keys[chips];
    24.  
    25.     digitalWrite(PL, LOW);
    26.     digitalWrite(PL, HIGH);
    27.  
    28.     for (byte i = 0; i<chip_count; i++) {
    29.         keys[i] = SPI.transfer(0);
    30.     }
    31.  
    32.     if (now - last_time >= sec * 1000) {
    33.  
    34.         for (byte c = 0; c < chip_count; c++)
    35.         {
    36.             for (byte i = 0; i<8; i++) {
    37.                 Serial.print((keys[c] & (1 << i)) != 0 ? 1 : 0);
    38.             }
    39.             Serial.print(" ");
    40.         }
    41.        
    42.         Serial.println(" ");
    43.  
    44.         last_time = now;
    45.     }
    46. }
    47.  
     
  2. unreg

    unreg Новичок

    Сообщения:
    58
    Симпатии:
    0
    Заглянул сейчас в 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?
     
  3. unreg

    unreg Новичок

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

    nikolz Гуру

    Сообщения:
    4.133
    Симпатии:
    431
    GPIO15 читается при старте после этого он может использоваться как угодно.
    а GPIO12 не используется при программировании
    Поясните почему Вы не можете его использовать.
    При старте ваша программа не работает и клавиатура тоже.
     
  5. unreg

    unreg Новичок

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

Поделиться этой страницей