stm32f030 ein Timer mehrere DMA

OP #4375134
Hallo Leute,

ich lasse auf meinem stm32f030 über DMA Timer gesteuert den PWM duty 
cycle verändern.
<nun würde ich dies gerne auf mehreren Kanälen gleichzeitig machen.
Ich bekomms aber nicht hin. Der Timer triggert immer nur einen DMA 
Channel. Ich versteh auch nicht, woher der Timer genau weis zu welchem 
DMA Channel er gehört.
Irgendwie ne Beschreibung der Standard Lib konnte ich leider auch 
nirgends finden...

Anbei mein Code:
1
  //Timer16 DMA
2
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM16, ENABLE);
3
  // Timer-Config
4
  TIM_TimeBaseStructInit(&TIM_TimeBase_InitStructure);
5
  TIM_TimeBase_InitStructure.TIM_Period = 56;    //100
6
  TIM_TimeBase_InitStructure.TIM_Prescaler = 6;    //48MHz/7 = 6MHz
7
  TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
8
  TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
9
  TIM_TimeBaseInit(TIM16, &TIM_TimeBase_InitStructure);
10

11
  // Timer enable
12
  TIM_Cmd(TIM16, ENABLE);
13

14

15
  //Clock Enable (DMA1)
16
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
17

18
  //DMA Channel3 = U
19
  //DMA Kanal löschen
20
  DMA_DeInit(DMA1_Channel3);
21

22
  DMA_InitStruct.DMA_BufferSize           = 400;
23
  DMA_InitStruct.DMA_DIR                 = DMA_DIR_PeripheralDST;
24
  DMA_InitStruct.DMA_M2M             = DMA_M2M_Disable;
25
  DMA_InitStruct.DMA_MemoryBaseAddr       = (uint32_t)&Usin[0];
26
  DMA_InitStruct.DMA_MemoryDataSize         = DMA_MemoryDataSize_HalfWord;
27
  DMA_InitStruct.DMA_MemoryInc             = DMA_MemoryInc_Enable;
28
  DMA_InitStruct.DMA_Mode               = DMA_Mode_Circular;
29
  DMA_InitStruct.DMA_PeripheralBaseAddr     = (uint32_t)&TIM1->CCR2 ;
30
  DMA_InitStruct.DMA_PeripheralDataSize     = DMA_PeripheralDataSize_HalfWord;
31
  DMA_InitStruct.DMA_PeripheralInc         = DMA_PeripheralInc_Disable;
32
  DMA_InitStruct.DMA_Priority             = DMA_Priority_Medium;
33

34
  //Initalisierung DMA1 Kanal3
35
  DMA_Init(DMA1_Channel3, &DMA_InitStruct);
36

37
  //Interrupt nach halber und ganzer Übertragung
38
  DMA_ITConfig(DMA1_Channel3, DMA_IT_HT | DMA_IT_TC,ENABLE);
39

40
  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_3_IRQn;
41
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
42
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
43
  NVIC_Init(&NVIC_InitStructure);
44

45
  DMA_Cmd(DMA1_Channel3,ENABLE);
46
  TIM_DMACmd(TIM16, TIM_DMA_Update, ENABLE);
47

48

49
  //DMA Channel5 = V
50
  //DMA Kanal löschen
51
  DMA_DeInit(DMA1_Channel5);
52

53
  DMA_InitStruct.DMA_BufferSize           = 400;
54
  DMA_InitStruct.DMA_DIR                 = DMA_DIR_PeripheralDST;
55
  DMA_InitStruct.DMA_M2M             = DMA_M2M_Disable;
56
  DMA_InitStruct.DMA_MemoryBaseAddr       = (uint32_t)&Usin[0];
57
  DMA_InitStruct.DMA_MemoryDataSize         = DMA_MemoryDataSize_HalfWord;
58
  DMA_InitStruct.DMA_MemoryInc             = DMA_MemoryInc_Enable;
59
  DMA_InitStruct.DMA_Mode               = DMA_Mode_Circular;
60
  DMA_InitStruct.DMA_PeripheralBaseAddr     = (uint32_t)&TIM1->CCR3 ;
61
  DMA_InitStruct.DMA_PeripheralDataSize     = DMA_PeripheralDataSize_HalfWord;
62
  DMA_InitStruct.DMA_PeripheralInc         = DMA_PeripheralInc_Disable;
63
  DMA_InitStruct.DMA_Priority             = DMA_Priority_Medium;
64

65
  //Initalisierung DMA1 Kanal5
66
  DMA_Init(DMA1_Channel5, &DMA_InitStruct);
67

68
  DMA_Cmd(DMA1_Channel5,ENABLE);


Der DMA auf Cannel3 läuft so fehlerfrei. Wenn ich diesen auskommentiere 
dann auch der DMA auf Channel5.

Grüße
Steph

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.