Hallo zusammen, ich schaffe es einfach nicht bei einem STM32F4 mit einem Timer DMA zu triggern. Folgendes stelle ich ein: Bei DMA1:
1 | // Den Stream ausschalten |
2 | DMA1_Stream5->CR &= ~DMA_SxCR_EN; |
3 | // Warten bis er ausgeschaltet ist |
4 | while (DMA1_Stream5->CR & DMA_SxCR_EN); |
5 | // Vorherige Flags rücksetzen |
6 | DMA1->HISR &= ~DMA_HISR_DMEIF6_Msk; |
7 | // Ziel: GPIOD |
8 | DMA1_Stream5->PAR = (uint32_t)&GPIOD->BSRR; |
9 | // Quelle: ein Array |
10 | DMA1_Stream5->M0AR = (uint32_t)quellArray; |
11 | DMA1_Stream5->NDTR = numWerte; |
12 | // Channel 3 (für TIM2_CH1) auswählen |
13 | DMA1_Stream5->CR |= 3 << DMA_SxCR_CHSEL_Pos; |
14 | // Priorität, Richtung, Datengröße usw. in CR setzen |
15 | // ... |
16 | // Stream einschalten |
17 | DMA1_Stream5->CR |= DMA_SxCR_EN; |
Beim Timer:
1 | // Interrupt und DMA Request für Channel 1 (Output Compare) einstellen |
2 | TIM2->DIER = TIM_DIER_CC1IE | TIM_DIER_CC1DE; |
3 | // Timer einschalten |
4 | TIM2->CR1 |= TIM_CR1_CEN; |
Der Timer läuft dann, was ich am Interrupt sehe, jedoch scheint der DMA Stream nicht gestartet zu werden. Ich sehe jedenfalls keine Änderung an den Pins bei GPIOD. Habe ich irgendwas vergessen?