Forum: Mikrocontroller und Digitale Elektronik STM32F030 HAL PWM DMA Interrupt


von Werner (Gast)


Lesenswert?

Hallo,

ich möchte Daten als PWM mit Timer 3 über DMA ausgeben. Dafür benutze 
ich den Circular Buffer und möchte die beiden Interrupts "Half Transfer" 
und "Full Transfer" verwenden. Der "Half Transfer" funktioniert schon 
und wurde mit
1
HAL_DMA_RegisterCallback(&hdma_tim3_ch1_trig, HAL_DMA_XFER_HALFCPLT_CB_ID, &cb1);
aktiviert. Das klappt wunderbar, das Gleiche funktioniert mit dem Full 
Transfer aber nicht. Wenn man in die HAL Funktionen genauer sieht, wird 
die Full Transfer callback Funktion in HAL_TIMEx_PWMN_Start_DMA ersetzt 
durch TIM_DMADelayPulseCplt. Weiß jemand wo/wie man sich einhängen muss 
um den auc Full Transfer zu bekommen?

Gruß
Werner

Die vollständige, von CubeMX, erzeugte main Funktion sieht wie folgt 
aus:
1
int main(void)
2
{
3
  /* MCU Configuration--------------------------------------------------------*/
4
5
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
6
  HAL_Init();
7
8
  /* Configure the system clock */
9
  SystemClock_Config();
10
11
  /* Initialize all configured peripherals */
12
  MX_GPIO_Init();
13
  MX_DMA_Init();
14
  MX_TIM3_Init();
15
  
16
  
17
  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
18
  HAL_DMA_RegisterCallback(&hdma_tim3_ch1_trig, HAL_DMA_XFER_HALFCPLT_CB_ID, &cb1);
19
  HAL_DMA_RegisterCallback(&hdma_tim3_ch1_trig, HAL_DMA_XFER_CPLT_CB_ID, &cb2);
20
  HAL_TIMEx_PWMN_Start_DMA(&htim3, TIM_CHANNEL_1, (uint32_t*) test, 128);
21
  while (1)
22
  {
23
  
24
  }
25
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.