Hallo,
ich versuche eine Softwarebasierte Schnittstellenlösung (ist nur ein 
paar Millisekunden pro Sekunde aktiv) zu realisieren und denke, dass die 
bisherig verwendete Routine vor allem bei höheren Datenraten zu langsam 
ist und damit Probleme verursacht. Dazu verwende ich den DAC mit DMA, um 
Signal-Rampen zu erzeugen.
Eigentlich wende ich nur diese Funktion an, es wird nur das Datenfeld 
(hier: interface_zero_low) gewechselt:
| 1 | HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*) interface_zero_low, INTERFACE_RAMP_RES, DAC_ALIGN_12B_R);
 | 
Dann wird mit einem Timer ein Interrupt generiert und ein weiterer Timer 
für den DAC-Trigger angeworfen. Ist die Rampe fertig (DMA-TC-Interrupt), 
wird der Timer gestoppt und ich bereite die nächste Rampenfunktion vor.
Nun ändere ich eigentlich nur das Feld für die Rampe, daher habe ich mir 
gedacht, so was in der Art sollte reichen, aber es reicht nicht:
| 1 | DMA1_Stream5 -> M0AR = (uint32_t)(&interface_low_return_to_zero);
 | 
Irgendwo habe ich das gefunden, hat mich aber auch nicht weiter 
gebracht:
| 1 | DMA1_Stream5 -> NDTR = INTERFACE_RAMP_RES;
 | 
| 2 | DMA1_Stream5 -> PAR = (uint32_t)&(DAC -> DHR12R1);
 | 
| 3 | DMA1_Stream5 -> M0AR = (uint32_t)(&interface_zero_low);
 | 
| 4 | DMA1_Stream5 -> CR = (DMA_SxCR_TEIE | DMA_SxCR_CHSEL | DMA_SxCR_CIRC | DMA_SxCR_DIR_0 | DMA_SxCR_EN | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_MINC | DMA_SxCR_PL_0);
 |