Hallo,
ich probiere seit einer Weile an der Programmierung herum, komme aber
nicht weiter: STM32F4 Discovery über CooCox
Ich versuche neben dem Timer1 auch Timer2 für eine PWM-Erzeugung mit DMA
zu betreiben.
Beim Timer1 hat alles geklappt (aus einem Beispiel kopiert und
variiert).
Ich befürchte, es liegt an der Auswahl des Streams/Channels??
1 | //DMA für tim2
|
2 | DMA_DeInit(DMA1_Stream1); // welcher Stream/Channel verwendet wird ergibt sich aus der DMA request mapping-Tabelle im Reference-Datasheet auf S.165
|
3 | DMA_InitStructure.DMA_Channel = DMA_Channel_2;
|
4 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)GPIOB_ODR_ADRESS;
|
5 | DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Pwm_Memory;
|
6 | DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
7 | DMA_InitStructure.DMA_BufferSize = PWM_RES; // Gibt an wie lang die Sequenz sein soll, die dann auf dem PORT ausgegeben wird.
|
8 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
9 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
10 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
|
11 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
|
12 | DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
|
13 | DMA_InitStructure.DMA_Priority = DMA_Priority_High;
|
14 | DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
15 | DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
|
16 | DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
17 | DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
18 | DMA_Init(DMA1_Stream1, &DMA_InitStructure);
|
19 |
|
20 | DMA_Cmd(DMA1_Stream1, ENABLE);
|
21 |
|
22 | TIM_DMACmd(TIM2,TIM_DMA_Update,ENABLE);
|
Wäre super, wenn jemand einen Tipp geben könnte, wo der Fehler liegt.
Danke