Forum: Mikrocontroller und Digitale Elektronik STM32 SPI Kommunikation Programmstruktur


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Anonymous U. (gastt)


Bewertung
0 lesenswert
nicht lesenswert
Hallo, es geht um eine Kommunikation zwischen zwei STM32 über SPI. Es 
sollen verschiedene Systemparameter ausgelesen und geupdated werden 
können und es muss nicht superschnell sein. Programmiert wird die Kiste 
in C++. Ich will eine 'system'-Klasse machen, die Funktionen zur 
verfügung stellt, von der aus der µController auf diese Variablen von 
seiner Seite aus zugreifen kann. In der Klasse sitzt dann auch der Code 
zur SPI abarbeitung, wo von extern aus zugegriffen werden kann. Ein 
Standardproblem?

So in etwa stelle ich mir das vor:

system = new c_system()

pid_parameter_x = system.get_value(SYS_VAL_PID_PARAMETER_X)
regulation_value_x = pid.update()
system.set_value(SYS_VAL_REGULATION_VALUE, regulation_value)

Die Frage ist, wie programmiert man sowas am besten? Die system-Klasse 
reserviert ein Array und der entsprechende Wert wird als Pointeroffset 
definiert? Als #define? Oder sollte man mit Structs oder Enums arbeiten?

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Anonymous U. schrieb:
> Ich will eine 'system'-Klasse machen, die Funktionen zur
> verfügung stellt,...

Das ist nebensächlich. Siehe zu allererst mal zu, daß du dir ein 
Protokoll ausdenkst, also ein festgelegtes procedere, wie die beiden 
Controller sich miteinander ins Benehmen setzen.

Dabei ist eigentlich auch die Art der Übertragungsstrecke egal, ob das 
nun SPI oder UART oder PS2 oder sonstwas ist.

Das sind nur Lowlevel-Dinge, das Protokoll kommt da drauf und ob und 
warum du da eine C++ Klasse obendrauf setzen willst, kommt später oder 
gar nicht.

Wahrscheinlich gar nicht, denn wenn der eine dem anderen etwas sagen 
will, ergibt das schlußendlich beim anderen ein irgendo 
hereinrauschendes Ereignis (event) mit einem Kommando-Inhalt. Und das 
kann man nicht planen, weil man ja gar nicht weiß, wann der andere µC zu 
einem spricht. Selbst wenn so ein Event angefordert wird, weiß man 
nicht, wann der andere tatsächlich dazu kommt, die Antwort zu geben.

Aso plane erstmal ein Kommunikations-Protokoll für deine beiden µC zur 
gegenseitigen Verständigung.

W.S.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Bewertung
-1 lesenswert
nicht lesenswert
Guck dir mal das SPI bootloader Protokoll von den STM32 an, dann haste 
schonmal einen Hinweis wie mans machen kann.

Ansonsten hat SPI ziemlich enge Timinganforderungen was die Antworten 
angeht.
Also wie bei einem ADC 3 Byte Befehle reinschieben und dann kommt direkt 
eine Antwort ist eher schwer möglich.
Selbst die Bytes per IRQ abrufen kann zu langsam sein -> DMA ist dein 
Freund.

Daher empfielt sich noch eine Rückleitung "ich habe verdaut".
Sowas habe ich vor kurzem auf Arbeit gebaut, ein kleiner Slave STM32 mit 
4,1MHz (MSI RC) wird mit 2MHz SPI vom Master getriezt.

Anonymous U. schrieb:
> Oder sollte man mit Structs oder Enums arbeiten?

Also ich mag ja "enum class".
Ein enum alleine ist nur eine Aufzählung und das gilt Systemweit und ist 
nicht typsicher.
enum class erzwingt das, ist aber etwas mehr Tipparbeit dann.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.