Forum: Mikrocontroller und Digitale Elektronik STM32 SPI Kommunikation Programmstruktur


von Anonymous U. (gastt)


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)


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)


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.

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.