Cannot Configure Nodemcu to use HSPI

My code below is mostly a combination of code from similar applications and " NodeMCU Documentation"

For the life of me I cannot get the HSPI configured properly.
Does someone have suggestions and/or willing to post a functioning example?

I am not using an SD Card. For testing I will be using a thermocouple board that has proven to be functional on the "default" SPI bus.

Thanks
John

/* The ESP32 has four SPi buses, however as of right now only two of
 * them are available to use, HSPI and VSPI. Simply using the SPI API
 * as illustrated in Arduino examples will use VSPI, leaving HSPI unused.
 *
 * However if we simply initialize two instance of the SPI class for both
 * of these buses both can be used. However when just using these the Arduino
 * way only will actually be outputting at a time.
 *
 * Logic analyzer capture is in the same folder as this example as
 * "multiple_bus_output.png"
 *
 * created 30/04/2018 by Alistair Symonds
 */
#include <SPI.h>
#include <Arduino.h>

// Define ALTERNATE_PINS to use non-standard GPIO pins for SPI bus

#ifdef ALTERNATE_PINS

#define HSPI_MISO 26
#define HSPI_MOSI 27
#define HSPI_SCLK 25
#define HSPI_SS   32
#else

#define HSPI_MISO 12
#define HSPI_MOSI 13
#define HSPI_SCLK 14
#define HSPI_SS   15
#endif

static const int spiClk = 100000;  // 100k //1 MHz

//uninitialized pointers to SPI objects
SPIClass SPIexp(HSPI);   //SPIClass *hspi = NULL;  <<-- line 38, ERROR  'HSPI' was not declared in this scope

//spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
//-- we won't be using the HSPI /CS line, so disable it again
//gpio.mode(8, gpio.INPUT, gpio.PULLUP)

void setup() {
  //initialize two instances of the SPIClass attached to VSPI and HSPI respectively
  
 // hspi = new SPIClass(HSPI);

  //clock miso mosi ss

#ifndef ALTERNATE_PINS
  //initialize hspi with default pins
  //SCLK = 14, MISO = 12, MOSI = 13, SS = 15
 SPIexp.begin();                       // HSPI bus - (14, 12, 13, 15) - (SCLK, MISO, MOSI, SS) //hspi->begin();
#else
  //alternatively route through GPIO pins
  hspi->begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, HSPI_SS);  //SCLK, MISO, MOSI, SS
#endif

  //set up slave select pins as outputs as the Arduino API
  //doesn't handle automatically pulling SS low

  pinMode(hspi->pinSS(), OUTPUT);  //HSPI SS
}

// the loop function runs over and over again until power down or reset
void loop() {
  //use the SPI buses
  spiCommand(hspi, 0b11001100);
  delay(100);
}

void spiCommand(SPIClass *spi, byte data) {
  //use it as you would the regular arduino SPI API
  spi->beginTransaction(SPISettings(spiClk, MSBFIRST, SPI_MODE0));
  digitalWrite(spi->pinSS(), LOW);  //pull SS slow to prep other end for transfer
  spi->transfer(data);
  digitalWrite(spi->pinSS(), HIGH);  //pull ss high to signify end of data transfer
  spi->endTransaction();
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.