Forum: Analoge Elektronik und Schaltungstechnik Konzept:um Konfigration von Windows auf uC STM32 zu laden


von marcel (Gast)


Lesenswert?

Hi,

ich würde gerne wissen, wie man eine Konfiguration welche man in Windows 
paramtetriert (Win32 Anwendung mit Gui) auf einen STM32 überträgt damit 
das Programm auf dem uC darauf zugreifen kann und dementsprechend die 
Ausgänge schaltet.

Ganz konkret will ich eine Anwendung schreiben um Eingänge und GPIO's zu 
schalten für eine I/O Box.

Eingänge gehen an eine Eingangsbox mit einem STM32  .... dann per 
UART/RS485...an eine  Ausgangsbox mit ebenfalls einem STM32


Also:
Eingang 1  schaltet Ausgang2 (bspw. GPIO D2)

oder

Eingang 1 schaltet Ausgang14  ..  je nach Konfiguration bzw. zuordnung 
wie ich es in dem Win Programm gemacht habe.


Ich hab mir gedacht ich würde die Ein und Ausgabe Zuordnungen fest in if 
schleifen packen und mit Variablen welche in den Bedinungen stecken 
verknüpfen.

und ich lade im prinzip eine Tabelle auf den Prozessor welche die GPIO's 
<-> Variable Zuordnung beinhaltet.

if(Variable IN1 == true)
{
schaltet  Out1
}


die Tabelle sieht dann so aus

IN1 = GPIO D2
IN2 = GPIO D5
INx = GPIO xx

OUT1 = GPIO B4
OUT2 = GPIO B5
OUTx = GPIO xx


nur muss dann halt der Prozessor drauf zugreifen und beim Reset darf die 
Tabelle nich verloren gehen.


Wie würdet ihr das machen ?

Genauso?

: Verschoben durch Admin
von Andreas B. (andreasb)


Lesenswert?

marcel schrieb:
> Hi,
>
> ich würde gerne wissen, wie man eine Konfiguration welche man in Windows
> paramtetriert (Win32 Anwendung mit Gui) auf einen STM32 überträgt damit
> das Programm auf dem uC darauf zugreifen kann und dementsprechend die
> Ausgänge schaltet.
>
> Ganz konkret will ich eine Anwendung schreiben um Eingänge und GPIO's zu
> schalten für eine I/O Box.
>
> Eingänge gehen an eine Eingangsbox mit einem STM32  .... dann per
> UART/RS485...an eine  Ausgangsbox mit ebenfalls einem STM32
>
>
> Also:
> Eingang 1  schaltet Ausgang2 (bspw. GPIO D2)
>
> oder
>
> Eingang 1 schaltet Ausgang14  ..  je nach Konfiguration bzw. zuordnung
> wie ich es in dem Win Programm gemacht habe.
>
>
> Ich hab mir gedacht ich würde die Ein und Ausgabe Zuordnungen fest in if
> schleifen packen und mit Variablen welche in den Bedinungen stecken
> verknüpfen.

Es gibt keine if schleifen! Es ist eine if-Bedingung.

>
> und ich lade im prinzip eine Tabelle auf den Prozessor welche die GPIO's
> <-> Variable Zuordnung beinhaltet.

Die Tabelle ist ein Array, dann kannst du einfach mit einer For - 
Schleife darüber iterieren und deine Bedingungen abarbeiten.


> if(Variable IN1 == true)
> {
> schaltet  Out1
> }
>
>
> die Tabelle sieht dann so aus
>
> IN1 = GPIO D2
> IN2 = GPIO D5
> INx = GPIO xx
>
> OUT1 = GPIO B4
> OUT2 = GPIO B5
> OUTx = GPIO xx
>
>
> nur muss dann halt der Prozessor drauf zugreifen und beim Reset darf die
> Tabelle nich verloren gehen.

Dann musst du diese in einem Festspeicher ablegen, z.B. in einem Eeprom 
oder Flash oder so.

>
>
> Wie würdet ihr das machen ?
>
> Genauso?

Ich verstehe noch nicht genau was du damit bezweckst.

Dein Text klingt nach "Anfänger", weisst du wie du z.B. die Tabelle 
Parsen kannst etc?

Ich rate dir Schritt für Schritt vorzugehen, und zuerst mit einem 
kleinen Beispiel anzufangen, und dann dieses zu erweitern.

mfg Andreas

von Roland H. (batchman)


Lesenswert?

> ich würde gerne wissen, wie man eine Konfiguration welche man in Windows
> paramtetriert (Win32 Anwendung mit Gui) auf einen STM32 überträgt damit
> das Programm auf dem uC darauf zugreifen kann und dementsprechend die
> Ausgänge schaltet.

Man linkt eine "Scripting engine" wie z. B. eLua dazu. Der PC überträgt 
dann die "Konfiguration" in Form eines Skriptes an den µC, welcher dann 
das Programm ausführt. Der µC interpretiert das Skript zur Laufzeit, und 
das Skript kann die Peripherie bedienen.

http://www.eluaproject.net/

Der andere Ansatz besteht darin, daß der µC über eine API gezielt die 
Funktionen der Peripherie herausführt (GPIO high, GPIO low, etc.). In 
diesem Fall bleibt die Kontrolle  auf dem PC, diese kann dort ebenfalls 
in Form eines Skriptes gestaltet werden.

In beiden Fällen kann eine Applikation dem PC letztlich das Skript zur 
Laufzeit erzeugen, und zur Ausführung bringen.

von marcel (Gast)


Lesenswert?

interessant.

aber der Controller muss die Konfiguration autark nach upload des 
scriptes behalten.

wäre dies möglich?

von Steel (Gast)


Lesenswert?

Ja, speicher den Kram halt im Flash ab.

Ich sehe nicht warum man für diese Aufgabe 2 STM32 braucht. Einer reicht 
doch auch.

von Marcel (Gast)


Lesenswert?

ne zwei stueck weil es ja zwei getrennte boxen sind mit einer 
busverbindung da zwischen.

eine Box fuer die signal eingaenge ... schalter, taster ... und eine box 
fuer die signal ausgaenge ... aktoren etc.

von Roland H. (batchman)


Lesenswert?

> aber der Controller muss die Konfiguration autark nach upload des
> scriptes behalten.
>
> wäre dies möglich?

SD-Karte, serielles EEPROM, batterie-gepuffertes RAM.

Es gibt für die stm32 eine "application note", in welcher die Emulation 
von EEPROM im Flash beschrieben wird.

"EEPROM emulation in STM32F10x microcontrollers"

von marcel (Gast)


Lesenswert?

Ja ich hab jetzt genau das gemacht.

Ein Teil vom Flash (32K) zum EEPROM gemacht.

Anschließend hab ich dort eine art Lookuptable als 
Zuordnungstabelleerstellt wo die jeweiligen Funktionen beim auslösen 
eines EXTI zugreifen.

Eleganter ist es jetzt mit dem FreeRTOS während ein Task die I/O's 
überwacht,
kümmert sich ein anderer Task um die ganzen Statusled's und um die 
Datenübertragung.

von marcel (Gast)


Lesenswert?

Es gibt noch eine andere Variante, welche ich ausprobiert habe.

das USB Device als Massstorage konfigurieren. Dann per Windows 
Application eine unsichtbare config-datei auf den USB Speicher schreiben 
und diese dann vom Controller bei Beginn einlesen/kopieren lassen in den 
EEPROM.

Hab dann in jeder config datei eine versionsnummer wenn diese dann =! 
von der config im eeprom ist, soll diese "neue" dann ins eeprom 
geschrieben werden.

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.