Hallo!
Ich benutze einen STM32F7 und möchte folgendes Verhalten erzielen:
Ein externer ADC wird vom STM32 getaktet und legt parallel 16 bit an
einen GPIO Port an. Ich möchte die Daten vom Port F mittels DMA in ein
Speichersegment schreiben. Der DMA request soll von einem Timer (TIM8)
ausgelöst werden. Dieser Timer läuft derzeit im PWM Modus einwandfrei.
Ich gerade mit CubeMX, um die Initialisierung vorzunehmen. Dort wurde
auch der DMA request (DMA2, stream 2, peripheral to memory) ausgewählt.
Die GPIO Pins sind als Eingänge konfiguriert und es liegen die
gewünschten Daten an.
Mein Problem ist, dass der DMA request scheinbar nicht ausgelöst wird.
Das S2NDTR Register steht immer auf 0x20 und zählt nicht herunter
(s.u.). Welche Schritte sind notwendig, damit der TIM8 bei jedem Update
ein DMA request sendet?
Mir ist aufgefallen, dass im TIM8_DIER Register nichts gesetzt ist, z.B.
TDE. Ist das notwendig? Manuelles setzen hat nicht geholfen.
Starten der Timer und DMA:
1 | // ...
|
2 | MX_GPIO_Init();
|
3 | MX_DMA_Init();
|
4 | MX_TIM8_Init();
|
5 |
|
6 | uint32_t dma_arr[32];
|
7 | for(uint32_t k = 0; k<32; k++) {
|
8 | dma_arr[k] = 0;
|
9 | }
|
10 |
|
11 | HAL_DMA_Start_IT(&hdma_tim8_ch1,(uint32_t)&(GPIOF->IDR),(uint32_t)dma_arr,32);
|
12 | HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
|
13 | // ...
|
Die Initialisierungen kann ich gern noch anhängen, ich vermute aber ein
Problem im logischen Vorgehen.
Vielen Dank im Voraus!