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.