Hallo,
leider habe schaffe ich es jetzt erst zu schreiben. Aber großes Danke für die schnelle Antwort.
Falls du den Unterschied meinst - der ist mir auch aufgefallen - das muss aber wohl so.
Ich habe jetzt nochmal alles sehr gründlich durchgelesen um die Initialisierungreihenfolge einzuhalten.
Kurioser Weise funktioniert es wenn ich die DAC-Initialisierung universeller abfrage:
Code:
void initDAC( uint32_t DAC_Channel )
{
RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE );
GPIO_InitTypeDef GPIO_InitStructure;
if( DAC_Channel == DAC_Channel_1 )
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
else
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_Init( GPIOA, &GPIO_InitStructure );
// Enable DAC clock
RCC_APB1PeriphClockCmd( RCC_APB1ENR_DACEN, ENABLE );
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
DAC_DeInit();
DAC_Init( DAC_Channel, &DAC_InitStructure );
// Enable DAC Channel
DAC_Cmd( DAC_Channel, ENABLE );
}
Damit kann ich zunächst erstmal leben.
Allerdings finde ich die Dokumentation ganzschön mangelhaft.
Im späteren Programm wechsle ich zwischen manueller DAC-Ausgabe mittels DAC_SetChannel2Data und der DAC Ausgabe mittels DMA.
Leider kann man hier nicht einfach so wechseln, sondern muss den DAC neu initialisieren. Da ich das für meinen Zweck eigentlich nich machen darf ist das unschön!
(Die DAC-Ausgabe muss/sollte flüssig und lückenlos erfolgen)
Es steht auch nirgends wie man den DAC mit DMA richtig initialisiert. Wenn ein Timer zum triggern genutzt wird bleibt der Ausgangswert des DACs Null nach dem Aktivieren bis der Timer das erste mal überläuft.
Gruß Erik
Anbei: Auf dem STM32F4 Discovery stört die blöde LED für die Verbindung zum Computer erheblich den DAC!
Lesezeichen