From 45b51dea1208fec87077ce48808481b1d7a02406 Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Fri, 20 Apr 2018 14:38:57 +0200 Subject: [PATCH 1/5] Add simple SPI slave example --- .../SPI/examples/spi_slave/spi_slave.ino | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino diff --git a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino new file mode 100644 index 0000000..f0122d6 --- /dev/null +++ b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino @@ -0,0 +1,46 @@ +// SPI slave example +// STM32 acts as a SPI slave an reads 8 bit data frames over SPI +// The data sent to the master is a simple count (0, 1, 2, 3) that is incremented +// each time a data frame is received. +// Serial output is here for debug + +#include +#include + +void setupSPI(void) +{ + pinMode(PA7, INPUT); // MOSI1 + pinMode(PA6, INPUT); // MISO1 + pinMode(PA5, INPUT); // SCK + pinMode(BOARD_SPI_DEFAULT_SS, INPUT); // SS + + // Select SPI1 + SPI.setModule(1); + // The clock value is not used + SPI.beginTransactionSlave(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT)); +} + +void setup() +{ + Serial.begin(115200); + delay(100); + + // Data that master will receive when transferring a data frame over SPI + SPI.dev()->regs->DR = 0; + setupSPI(); +} + +uint8_t count(0); +void loop() +{ + // Blocking call to read SPI message + uint8_t msg(SPI.read()); + Serial.print("Received = 0b"); + Serial.print(msg, BIN); + Serial.print(", 0x"); + Serial.print(msg, HEX); + Serial.print(", "); + Serial.println(msg); + // Next data frame that will be received by master + SPI.dev()->regs->DR = ++count; +} From 6e814ad5ca0b34e5f21e85cecb51e8df0f11e34f Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Fri, 20 Apr 2018 17:27:45 +0200 Subject: [PATCH 2/5] Add simple SPI slave example --- .../SPI/examples/spi_slave/spi_slave.ino | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino index f0122d6..2a26c8b 100644 --- a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino +++ b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino @@ -9,14 +9,11 @@ void setupSPI(void) { - pinMode(PA7, INPUT); // MOSI1 - pinMode(PA6, INPUT); // MISO1 - pinMode(PA5, INPUT); // SCK + // MOSI, MISO, SCK PINs are set by the library pinMode(BOARD_SPI_DEFAULT_SS, INPUT); // SS - // Select SPI1 - SPI.setModule(1); // The clock value is not used + // SPI1 is selected by default SPI.beginTransactionSlave(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT)); } @@ -24,9 +21,6 @@ void setup() { Serial.begin(115200); delay(100); - - // Data that master will receive when transferring a data frame over SPI - SPI.dev()->regs->DR = 0; setupSPI(); } @@ -34,13 +28,12 @@ uint8_t count(0); void loop() { // Blocking call to read SPI message - uint8_t msg(SPI.read()); - Serial.print("Received = 0b"); + uint8_t msg = SPI.transfer(++count); + Serial.print("a Received = 0b"); Serial.print(msg, BIN); Serial.print(", 0x"); Serial.print(msg, HEX); Serial.print(", "); Serial.println(msg); - // Next data frame that will be received by master - SPI.dev()->regs->DR = ++count; } + From a3ae580d192e7e53f6a5023fcac75253ef0cc050 Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Fri, 20 Apr 2018 17:42:31 +0200 Subject: [PATCH 3/5] Add simple SPI slave example --- STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino index 2a26c8b..64f8d50 100644 --- a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino +++ b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino @@ -29,7 +29,7 @@ void loop() { // Blocking call to read SPI message uint8_t msg = SPI.transfer(++count); - Serial.print("a Received = 0b"); + Serial.print("Received = 0b"); Serial.print(msg, BIN); Serial.print(", 0x"); Serial.print(msg, HEX); From 652569c079dbe9230e30ebd445a04d67dec6c4d8 Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Fri, 20 Apr 2018 19:01:32 +0200 Subject: [PATCH 4/5] Add simple SPI slave example --- STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino index 64f8d50..71865c5 100644 --- a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino +++ b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino @@ -1,7 +1,7 @@ -// SPI slave example -// STM32 acts as a SPI slave an reads 8 bit data frames over SPI -// The data sent to the master is a simple count (0, 1, 2, 3) that is incremented -// each time a data frame is received. +// SPI full-duplex slave example +// STM32 acts as a SPI slave and reads 8 bit data frames over SPI. +// Master also gets a reply from the slave, which is a a simple count (0, 1, 2, 3) +// that is incremented each time a data frame is received. // Serial output is here for debug #include From 6e4a80f1068fd88aa27ad33237cfd3d2c2db72f5 Mon Sep 17 00:00:00 2001 From: Victor Lamoine Date: Mon, 23 Apr 2018 19:27:37 +0200 Subject: [PATCH 5/5] Add simple SPI slave example --- STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino index 71865c5..fa2930a 100644 --- a/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino +++ b/STM32F1/libraries/SPI/examples/spi_slave/spi_slave.ino @@ -9,11 +9,9 @@ void setupSPI(void) { - // MOSI, MISO, SCK PINs are set by the library - pinMode(BOARD_SPI_DEFAULT_SS, INPUT); // SS - // The clock value is not used // SPI1 is selected by default + // MOSI, MISO, SCK and NSS PINs are set by the library SPI.beginTransactionSlave(SPISettings(18000000, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT)); }