STM32F103 - el sensor de temperatura interno ADC no cambia el valor

2

Actualmente estoy tratando de ejecutar el ADC de un STM32F103. Mi primer ejercicio es leer el sensor de temperatura interno. Este es mi enfoque actual:

void initADC(){
    RCC->APB2ENR |= (1<<9);      //Enable ADC1 Clock
    RCC->CFGR |= (0b10<<14);     //set ADC Prescaler '6'
    ADC1->CR1 |= (1<<4);         //Input Channel 16
    ADC1->SMPR1 |= (0b100<<18);  //41.5 cycles sample time
    ADC1->CR2 |= (1<<23);        //Enable Temperature Sensor & Vref

    ADC1->CR2 |= (1<<0);         //Enable ADC and start conversion

    ADC1->CR2 |= (1<<3);         //Initialize calibration register
    while(ADC1->CR2 & (1<<3)){   //Wait until calibration register initialized
        ;
    }

    ADC1->CR2 |= (1<<2);         //Enable calibration
    while(ADC1->CR2 & (1<<2)){   //Wait until calibration completed
        ;
    }
}

uint32_t getADCTempValue(){
    ADC1->CR2 |= (1<<0);         //Enable ADC and start conversion
    while(!(ADC1->SR & (1<<1))){ //Wait until end of conversion
        ;
    }
    return ADC1->DR;
}

Estos son algunos valores de muestra que obtengo:

  

2428 2417 2412 2400 2389 2381 2376 2380 2392 2406 2410

Pero no importa lo que haga (tocando el controlador, soplando el controlador) el valor no cambia significativamente.

    
pregunta binaryBigInt

1 respuesta

5

La selección de tu canal es incorrecta. En el ADC_CR1 , puede habilitar el watchdog analógico en los canales seleccionados. Pero no habilita al canal en sí, solo el perro guardián, Page 240 .

Paraseleccionaruncanal,debeusarlosregistrosADC_SQRxoADC_JSQR,dependiendodesisenecesitaungruporegularoungrupoinyectado, Página 218 .

    
respondido por el Bence Kaulics

Lea otras preguntas en las etiquetas