STM32 SPI Kommunikation Programmstruktur

OP #6317473
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?
Gast #6317527
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.
(Firma: fritzler-avr.de) #6317537
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren