Hi, I want to use two SPI buses, one for DAC and the other for a shift register with STM32F411
Do I do it like this:
// SPI1
SPI.setMOSI(PB15); // MOSI2
SPI.setMISO(PB14); // MISO2
SPI.setSCLK(PB13); // SCK2-4
// SPI2
SPI.setMOSI(PB5); // MOS1-3
SPI.setMISO(PB4); // MISO1-3
SPI.setSCLK(PB3); // SCK1-3
SPI.begin();
Use 2 SPI buses for DAC and Shift Regsiter
-
- Posts: 41
- Joined: Thu May 02, 2024 11:10 am
Re: Use 2 SPI buses for DAC and Shift Regsiter
If you want them to be 2 different interfaces you need to name them differently.
But remember if you use libraries, some of them have hardcoded only one SPI interface and it's name is SPI, so no matter what you do, they will use same interface.
But remember if you use libraries, some of them have hardcoded only one SPI interface and it's name is SPI, so no matter what you do, they will use same interface.
Re: Use 2 SPI buses for DAC and Shift Regsiter
#include "SPI.h"
#define CS_PIN1 PA15
SPIClass SPI_i2;
#define CS_PIN2 PB12
Pins declaration for nucleo-G474re.
#define CS_PIN1 PA15
SPIClass SPI_i2;
#define CS_PIN2 PB12
Code: Select all
// ADC
Serial.print(F("\n\tSPI-2..."));
delay(100);
SPI_i2.setMOSI(PB15);
SPI_i2.setMISO(PB14);
SPI_i2.setSCLK(PB13);
SPI_i2.beginTransaction( CS_PIN2, SPISettings(8000000UL, MSBFIRST, SPI_MODE0));
Serial.print(F("\tdone."));
delay(100);
Serial.print(F("\n\tmcp3562..."));
delay(100);
init_mcp3562();
attachInterrupt( 29, data_read, FALLING); // PD2
Serial.print(F("\tdone."));
// DAC
Serial.print(F("\n\tSPI-3..."));
delay(100);
SPI.setMOSI(PC12);
SPI.setMISO(PC11);
SPI.setSCLK(PC10);
SPI.beginTransaction(CS_PIN1, SPISettings(8000000, MSBFIRST, SPI_MODE2));
Serial.print(F("\tdone."));
delay(100);
-
- Posts: 41
- Joined: Thu May 02, 2024 11:10 am
Re: Use 2 SPI buses for DAC and Shift Regsiter
Thanks guys.
@GonzoG. I'm using Mozzi DSP audio library and I have the DAC working, fingers crossed I'm able to use 2 SPI bus with it.
@Composite. Thanks for the code, I imagined I would have to define the two SPI's differently. I will test it out today.
The main difference is the SPI.beginTransactions but what are the settings: 8000000UL, MSBFIRST, SPI_MODE0. Does this work for any peripheral?
( CS_PIN2, SPISettings( 8000000UL, MSBFIRST, SPI_MODE0) );
I think I don't need these lines which look like they are for the DAC.
init_mcp3562();
attachInterrupt( 29, data_read, FALLING); // PD2
@GonzoG. I'm using Mozzi DSP audio library and I have the DAC working, fingers crossed I'm able to use 2 SPI bus with it.
@Composite. Thanks for the code, I imagined I would have to define the two SPI's differently. I will test it out today.
The main difference is the SPI.beginTransactions but what are the settings: 8000000UL, MSBFIRST, SPI_MODE0. Does this work for any peripheral?
( CS_PIN2, SPISettings( 8000000UL, MSBFIRST, SPI_MODE0) );
I think I don't need these lines which look like they are for the DAC.
init_mcp3562();
attachInterrupt( 29, data_read, FALLING); // PD2
-
- Posts: 41
- Joined: Thu May 02, 2024 11:10 am
Re: Use 2 SPI buses for DAC and Shift Regsiter
I just tried to test this code with only 1 SPI bus. I am getting error:
Compilation error: 'SPI' does not name a type; did you mean 'SPI1'?
9 | SPI.beginTransaction(CS_PIN, SPISettings(8000000, MSBFIRST, SPI_MODE2));
| ^~~
| SPI1
Code:
#include "SPI.h"
#define CS_PIN PB1
SPI.setMOSI(PA7);
SPI.setMISO(PA6);
SPI.setSCLK(PA5);
SPI.beginTransaction(CS_PIN, SPISettings(8000000, MSBFIRST, SPI_MODE2));
Compilation error: 'SPI' does not name a type; did you mean 'SPI1'?
9 | SPI.beginTransaction(CS_PIN, SPISettings(8000000, MSBFIRST, SPI_MODE2));
| ^~~
| SPI1
Code:
#include "SPI.h"
#define CS_PIN PB1
SPI.setMOSI(PA7);
SPI.setMISO(PA6);
SPI.setSCLK(PA5);
SPI.beginTransaction(CS_PIN, SPISettings(8000000, MSBFIRST, SPI_MODE2));
Re: Use 2 SPI buses for DAC and Shift Regsiter
shift register 595 drivem by stm32g474re-nucleo:
more details on parameters for SPISettings:
https://www.arduino.cc/reference/en/lan ... ation/spi/
Code: Select all
Serial.print(F("\n\tSPI-3..."));
delay(100);
SPI.setMOSI(PC12);
SPI.setMISO(PC11);
SPI.setSCLK(PC10);
SPI.beginTransaction(CS_PIN1, SPISettings(10000000UL, MSBFIRST, SPI_MODE0));
Serial.print(F("\tdone."));
https://www.arduino.cc/reference/en/lan ... ation/spi/