Forum: Mikrocontroller und Digitale Elektronik Arduino IDE mit STM32 Core Themen, BluePill, SPI 2


von Siegfried S. (rieselkalk)


Lesenswert?

Hallo Arduino Kenner,
ich benutze die Arduino IDE mit die STM32 Core Erweiterung von ST und 
HAL Unterstützung. Wenn es an das interne von STM32 und Arduino geht, 
hören die Informationen sehr schnell auf. Der Arduino Teil stammt dabei 
anscheinend nicht von ST und ist veraltet oder nicht beschrieben . 
Andere Möglichkeiten wie die STM32duino von Clark passen nicht zusammen. 
Ich suche Arduino STM32 Core Kenner die mir helfen können.

Mein Ziel ist, bei einen BluePill, die SPI 2 Schnittstelle als Master 
mit Arduino zu benutzen und später ein Display anzuschließen.

Wer hat da Erfahrung?
Ein funktionierendes STM32 Arduino SPI 2 Beispiel wäre super

Mein Beispiel bekomme ich nicht zum laufen:
// BluePill

#include <SPI.h>

// Pin Belegung originaler SPI-2 BUS
#define SS_2_PIN    28
#define SCK_2_PIN   29
#define MISO_2_PIN  30
#define MOSI_2_PIN  31

byte my_SSEL;
byte my_SCLK;
byte my_MOSI;
byte my_MISO;

void SPI_2_MasterInit(void) {
 // Set MISO input, all others output
  pinMode(SCK_2_PIN, OUTPUT);
  pinMode(MOSI_2_PIN, OUTPUT);
  pinMode(MISO_2_PIN, INPUT);
  pinMode(SS_2_PIN, OUTPUT);
  my_SCLK = SCK_2_PIN;
  my_MOSI = MOSI_2_PIN;
  my_MISO = MISO_2_PIN;
  my_SSEL = SS_2_PIN;
}

void SPI_Init()
{
  SPI_2_MasterInit();
  SPI.setSCLK (my_SCLK);
  SPI.setMOSI (my_MOSI);
  SPI.setMISO (my_MISO);
  SPI.setSSEL (my_SSEL);
}

void setup()
{
  SPI_Init();
  SPI.begin();                                    // Aktiviere den SPI 
Port.

  SPI.setClockDivider (SPI_CLOCK_DIV16);          // Niedrige 
Geschwindigkeit (72 / 16 = 4,5 Mhz SPI Geschwindigkeit)

}

void loop()
{
  byte RX_Data;
  digitalWrite(my_SSEL, LOW);                    // CS ein
  SPI.transfer(0x55);                             // Sende HEX data 0x55 
mit den SPI_2 Port und speichere
                                                  // das empfangene Byte 
in die Variable <RX_Data>
  RX_Data = SPI.transfer(0);
  delay(1000);                                      // 10 ms Verzögerung
  digitalWrite(my_SSEL, HIGH);                   // CS aus
  delay(1000);
}

von STK500-Besitzer (Gast)


Lesenswert?

Hast du dein Beispiel schon mit der SPI-1 erfolgreich ausprobiert?

von Johannes S. (Gast)


Lesenswert?

Roger Clark Version:
Datei/Beispiele/SPI/using_SPI_ports
https://github.com/rogerclarkmelbourne/Arduino_STM32/tree/master/STM32F1/libraries/SPI/examples/using_SPI_ports
1
SPIClass SPI_2(2); //Create an instance of the SPI Class called SPI_2 that uses the 2nd SPI Port

Der STM core macht das anders, da muss man die Signale 
mosi,miso,clk,ssel im Konstruktor angeben.
https://github.com/stm32duino/Arduino_Core_STM32/tree/master/libraries/SPI

von Siegfried S. (rieselkalk)



Lesenswert?

ich habe mich mit 3 Dateien beschäftigt.
Erstens  habe ich ein Programm geschrieben mit den ich beim BluePill mit 
dem Arduino etwas über die beiden SPI Schnittstellen senden Kann.
SPI_2 hat mit PB13 und PB15 kein sauberes Signal.

Mit dem nächsten Programm kann ich auf den SPI_1 Pins eine Software SPI 
benutzen. Diese steuert ein 1.8" ST7735 Display an. Das funktioniert.

Das selbige Programm aber mit Hardware SPI_1 funktioniert nicht.
Leider kann ich die gesendeten Daten nicht analysieren und damit nicht 
feststellen, was da falsch läuft.

Nette Grüße
Siegfried

von Andreas R. (daybyter)


Lesenswert?

Und warum kannst Du die gesendeten Daten nicht analysieren?

von Siegfried S. (rieselkalk)


Lesenswert?

Andreas R. schrieb:
> Und warum kannst Du die gesendeten Daten nicht analysieren?

Weil ich kein entsprechendes Gerät habe ?

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?


von Armer Schlucker (Gast)


Lesenswert?

Johannes S. schrieb:
> keine 6€ übrig?
> Ebay-Artikel Nr. 171202927182

Das Gerät müsste man ja dann bedienen ....

von Siegfried S. (rieselkalk)


Lesenswert?

> Johannes S. schrieb:
>> Ebay-Artikel Nr. 171202927182

Danke für diesen Tip.
Dauert aber wohl 4 Wochen.

Welche Software nimmt man da unter Linux?

Nette Grüße
Siegfried

von aaa (Gast)


Lesenswert?


von Johannes S. (Gast)


Lesenswert?

aaa schrieb:
> https://sigrok.org/

ja, oder man nimmt einen Originalen von Saleae. Die Software dazu läuft 
auf Windows, Mac und Linux. Original kostet natürlich mehr. Unter dem 
Stichwort 'saleae' findest du hier auch reichlich Diskussionen ob man 
die Original SW mit dem Clone nutzen darf. Aber sigrok hat wohl auch 
einen guten Stand erreicht.
Der eBay Link war auch nur ein Beispiel, das Ding wird von vielen 
Anbietern geliefert und ist für ein paar Euro mehr auch aus deutschen 
Lagern mit kurzer Lieferzeit zu bekommen.

von Siegfried S. (rieselkalk)


Angehängte Dateien:

Lesenswert?

Johannes S. schrieb:

> ist für ein paar Euro mehr auch aus deutschen
> Lagern mit kurzer Lieferzeit zu bekommen.

So hat alles Super geklappt. Die Installation auf Linux war nicht so 
einfach. Da gibt es irgendwie ein Bug mit den Treiber.

Die Bedienung der Software ist sehr einfach. Auch für Anfänger geeignet, 
den es gibt gute Beschreibungen für Pulseview.

Mein Problem konnte ich nicht lösen. Nach meiner Meinung liefert die 
Software- und Hardware SPI identische Daten. Das Problem konnte ich noch 
nicht finden.

Vielleicht ist das Display auch nur Intelligent und hat kein Interesse 
an einer Hardware SPI.

Als Anlage habe ich die beiden Diagramme als PulseView Dateien 
angehängt.

Vielleicht hat ja einer Lust meine Aussage zu überprüfen. Der Fehler 
beginnt schon irgendwie gleich am Anfang.

Ich werde mich jetzt erst einmal darum kümmern, warum auf SPI_2 ein 
Mischsignal auf ca. halber Betriebsspannung anliegt.

Nette Grüße
Siegfried

: Bearbeitet durch User
von Jasson J. (jasson)


Lesenswert?

Thread ist zwar schon etwas älter, aber vielleicht gibts noch Interesse 
- vom TE oder anderen.

Ich hatte das selbe Problem, dass ich die WS2812 Lib von Roger an SPI_2 
nutzten wollte und es erstmal nicht geht.

Es ist ein Baudratenproblem. Habe auf dem Oszilloskop gesehen, dass die 
Pulslängen doppelt so lang sind.
Habs noch nicht in den Unterlagen rausgewühlt, aber wahrscheinlich hängt 
der SPI_2 an der langsameren APB1 Clockdomain. Eigentlich hat Roger in 
seinen Zeilen auch Logik drin, die das abfängt - vielleicht klappt da 
was nicht...

Das Referenzmanual beschreibt bei der SPI im Register CR1 die möglichen 
Baudsettings.
Ich habe in Roger´s Files an verschiedenen stellen versucht ein zu 
greifen.
Als ersten Griff hat es hardcoded funktioniert in SPI.c bei
>spi_master_enable(
>_currentSetting->spi_d,
>>(spi_baud_rate)24/*_currentSetting->clockDivider*/,
>(spi_mode)_currentSetting->dataMode, flags);
Die 24 ist das 3 mal linksgeshiftete Muster für Fpsc = 16.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jasson J. schrieb:
> Habs noch nicht in den Unterlagen rausgewühlt, aber wahrscheinlich hängt
> der SPI_2 an der langsameren APB1 Clockdomain.

So isses bei der STM32F1xx Serie. SPI1 wird von APB2 getaktet, aber SPI2 
und 3 von APB1.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.