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 | }
|