STM32 ADC 1 und 2 Probleme

Gast #5521884
Lesenswert?

Hi,

ich versuche gerade den ADC 1 und 2 meines stm32H743zi in betrieb zu 
nehmen. Es soll immer wieder eine Sequenz von Kanälen durchlaufen 
werden. Mit ADC1 klappt alles einwandfrei, nur ADC2 macht Probleme (es 
wird kein Interrupt ausgelöst und auch kein Interrupt Flag gesetzt).

Die Interruptroutine ist gerade einfach nur Daten auslesen um zu schauen 
ob alles funktioniert.
1
  RCC->AHB1ENR = RCC->AHB1ENR | RCC_AHB1ENR_ADC12EN;
2
  RCC->APB4ENR = RCC->APB4ENR | RCC_APB4ENR_SYSCFGEN;
3
  RCC->APB4ENR = RCC->APB4ENR | RCC_APB4ENR_VREFEN;
4

5
  ADC12_COMMON->CCR = (ADC12_COMMON->CCR & ~ADC_CCR_PRESC) | (ADC_CCR_PRESC_0 | ADC_CCR_PRESC_1 | ADC_CCR_PRESC_3);  // Set Prescaler
6

7
  ADC1->CFGR = (ADC1->CFGR & ~ADC_CFGR_RES);
8
  ADC1->SMPR1 = (ADC1->SMPR1 & 0x00000000) | 0x3FFFFFFF;
9
  ADC1->SQR1 = (0x00000006U | (0x00000002U << 6) | (0x00000003U << 12) | (0x00000006U << 18) | (0x0000000AU << 24));
10
  ADC1->SQR2 = (0x00000012U | (0x00000013U << 6));
11
  VREFBUF->CSR |= VREFBUF_CSR_HIZ;
12

13
  NVIC_SetPriority(ADC_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 6, 0));
14
  NVIC_EnableIRQ(ADC_IRQn);
15

16
  ADC1->CFGR |= ADC_CFGR_CONT;
17
  ADC1->CFGR &= ~ADC_CFGR_DISCEN;
18
  ADC1->CR &= ~ADC_CR_DEEPPWD;
19
  ADC1->CR |= ADC_CR_ADVREGEN;
20
        ADC1->CR |= ADC_CR_ADEN;
21
  ADC1->IER |= (ADC_IER_EOC | ADC_IER_EOC);
22
  ADC1->CR |= ADC_CR_ADSTART;
23

24
  ADC2->CFGR = (ADC2->CFGR & ~ADC_CFGR_RES);
25
  ADC2->SMPR1 = (ADC2->SMPR1 & 0x00000000) | 0x3FFFFFFF;
26
  ADC2->SQR1 = (0x00000002U | (0x00000002U << 6) | (0x00000006U << 12));
27

28
  ADC2->CFGR |= ADC_CFGR_CONT;
29
  ADC2->CFGR &= ~ADC_CFGR_DISCEN;
30
  ADC2->CR &= ~ADC_CR_DEEPPWD;
31
  ADC2->CR |= ADC_CR_ADVREGEN;
32
  ADC2->CR |= ADC_CR_ADEN;
33
  ADC2->IER |= (ADC_IER_EOS | ADC_IER_EOC);
34
  ADC2->CR |= ADC_CR_ADSTART;
1
void ADC_IRQHandler(void)
2
{
3
  if(ADC1->ISR & ADC_ISR_EOC)
4
  {
5
    ADCData.ui32_ADCDataArray[0] = ADC1->DR;
6
  }
7
  else
8
  {
9
    ;
10
  }
11
  if(ADC2->ISR & ADC_ISR_EOC)
12
  {
13
    ADCData.ui32_ADCDataArray[1] = ADC2->DR;
14
  }
15
  else
16
  {
17
    ;
18
  }
19
  ADC1->ISR &= ~ADC_ISR_EOC;
20
  ADC1->ISR &= ~ADC_ISR_EOS;
21
  ADC2->ISR &= ~ADC_ISR_EOC;
22
  ADC2->ISR &= ~ADC_ISR_EOS;
23
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren