Forum: Mikrocontroller und Digitale Elektronik STM32 IC mit DMA


von Bert S. (kautschuck)


Lesenswert?

Hi,

Ich habe bereits Input Capture mit Interrupts erfolgreich programmiert 
und will nun IC mit dem DMA auf einem STM32F405 probieren. Nun kann ich 
mit folgender HAL Funktion beginnen, welche mir die Periode gibt, wenn 
ich Sample[i+1]-Sample[i] subtrahiere:

1
HAL_TIM_IC_Start_DMA(tim1,TIM_CHANNEL_4,ic_buf,IC_BUF_SIZE);

Jedoch brauche ich ja wie bei der Interrupt Methode die Periodendauer, 
als auch den Duty. Doch wie bekomme ich nun den Duty Cycle mit dem DMA, 
wenn ich wie oben das ganze in einen Buffer lese?

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

Der Handler tim1 für den jeweiligen Timer wird ganz normal 
initialisiert,
oder wie meinst du das?

von Bert S. (kautschuck)


Lesenswert?

pegel schrieb:
> Der Handler tim1 für den jeweiligen Timer wird ganz normal
> initialisiert,
> oder wie meinst du das?

Das schon, aber ich habe Probleme die Periode und den Duty Cycle des PWM 
input Signals zu rekonstruieren.

Ich habe nun raus gefunden, dass ich auf rising und falling edge 
triggern kann und so diese Punkte mit dem DMA in einen Buffer einlesen 
kann. Nun weiss ich aber nicht wirklich, ob die eingelesenen Punkte nun 
für die rising oder die falling edge waren und somit ist unter Umständen 
der berechnete Duty Cycle gerade 1-Duty Cycle.

von Darth Moan (Gast)


Lesenswert?

Moin,

nimm doch 2 CCR. Die Input Filter & Edge Detection hat 2 Ausgänge.
Den einen auf IC1 den anderen auf IC2. Dann braucht es zwar 2 DMA
Kanäle, aber einer kriegt immer die steigende Flanke und der andere
immer die Fallende.
Ich hab das allerding bisher nur beim F746 gemacht, wo ich zwei Pulse
ausmessen muss, in Länge und Lage zueinander -> 2 Eingangspins auf 4
IC mit 4 DMA Kanäle. Muss man allerdings vorher checken, ob die Kanäle
nicht anderweitig gebraucht werden.
Aber im F4xx Ref Man sehen die Timer eigentlich ziemlich genauso aus.

von Bert S. (kautschuck)


Lesenswert?

Darth Moan schrieb:
> Moin,
>
> nimm doch 2 CCR. Die Input Filter & Edge Detection hat 2 Ausgänge.
> Den einen auf IC1 den anderen auf IC2. Dann braucht es zwar 2 DMA
> Kanäle, aber einer kriegt immer die steigende Flanke und der andere
> immer die Fallende.
> Ich hab das allerding bisher nur beim F746 gemacht, wo ich zwei Pulse
> ausmessen muss, in Länge und Lage zueinander -> 2 Eingangspins auf 4
> IC mit 4 DMA Kanäle. Muss man allerdings vorher checken, ob die Kanäle
> nicht anderweitig gebraucht werden.
> Aber im F4xx Ref Man sehen die Timer eigentlich ziemlich genauso aus.

Ok, danke, ich denke das ist genau das was ich machen sollte.

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.