Forum: Mikrocontroller und Digitale Elektronik STM32F103 DMA/Speicherproblem


von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich versuche gerade die Library von UB für den STM32F4 auf den STM32F1 
zu portieren und hänge irgendwie an der DMA Behandlung. Es ist so das 
über momentan 4 Kanäle an jedem Kanal ein WS2812 LED Strip angeschlossen 
werden sollen und per DMA an den GPIO per PWM ausgegeben werden soll.
Nun folgendes Problem, der Kanal 1 und 2 funktioniert wunderbar, bzw. 
Kanal 1  auf jeden Fall nur die anderen Kanäle haben probleme. Kanal 2 
blinkt bei Eingaben die über das RS232 Interface kommen obwohl das 
eigentlich ja nicht sein dürfte.

Die Arrays welche die Daten für die WS2812 LEDs bereitstellen sind auch 
mit den richtigen Werten gefüllt soll das eigentlich der DMA nur dieses 
Array "rausschieben" müsste, aber irgendwas ist da verquer.

Eventuell hat da ja mal jemand Zeit mal drüberzuschauen ob da irgend ein 
grober Schnitzer drin ist.
Ich musste leider auch für den Kanal 2 einen anderen Timer nehmen 
(Obwohl ich eigentlich nur über einen Timer arbeiten wollte) aber der 
STM32F1xx lässt wohl nur 3 Kanäle von Timern auf dem DMA zu... warum 
auch immer... zumindest sind im Reference Manual im DMA nur immer 3 
Timer Kanäle angegeben.
Vielleicht liege ich da ja aber komplett falsch.

Als Anhang der Quellcode als tar Arschief :)

RS232 Ausgabe des Arrays:
http://pastebin.com/BsaPxe2c

Gruß Michael

von Uwe B. (derexponent)


Lesenswert?

Hi Michael,

als ich meine 8Kanal Library erstellt habe,
hat bei mir ein anderer Timer zuerst auch nicht funktioniert

ich habe jetzt deinen Quellcode nicht
nach fehlern durchsucht aber probier mal folgendes :

füge mal in der Funktion "p_WS2812_InitTIM()"

vor dem einstellen der OutputCompare Settings dieses hier ein :
1
TIM_OCStructInit(&TIM_OCInitStructure);

damit das ganze dann so aussieht :
1
  ...
2
3
  // deinit
4
  TIM_OCStructInit(&TIM_OCInitStructure);
5
6
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
7
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
8
  TIM_OCInitStructure.TIM_Pulse = 0;
9
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
10
11
  ...

vielleicht es es ja der gleiche Fehler wie bei mir

Gruss Uwe

von Michael (Gast)


Lesenswert?

Hi Uwe,

so ich hab nun mal die Zeile mit eingefügt, aber leider hat sich an der 
Ausgabe nichts getan. Mir ist nun nur aufgefallen das Kanal 3 nun 
zumindest schonmal die richtige Farbe + Anzahl anzeigt allerdings noch 
am flackern ist. Kanal 4 spielt immernoch komplett verrückt der Timer, 
obwohl das selbe OC und TIM Struct. Auf Kanal 4 komm ich nur auf 545 kHz 
statt der benötigten 800 kHz. Ich hab nun nochmal den Quellcode 
durchforstet ob irgendwo nen Fehler ist aber ich konnte nichts finden 
und werde nun mal das Reference Manual Seite für Seite durchgehen ob ich 
was finde.

Gruß Michael

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.