Soy nuevo en el mundo ARM y uso el microcontrolador ARM STM32F103C8T6. Quiero hacer funcionar el sensor de temperatura interno del micro. Puedo obtener algunos datos pero no estoy seguro de cómo convertir estos números en temperatura. Lo busqué y descubrí que hay dos direcciones de solo lectura en la memoria que mantienen los números de calibración de fábrica a 30 y 110 grados.
El problema es que no hay nada al respecto en hoja de datos o Manual de referencia . Sólo hay algunos mínimos y máximos para los parámetros. Creo que usar el promedio de estos valores puede afectar la precisión. Así que estoy confundido. ¿Cómo debo hacer esta conversión? ¿Necesito estos datos de calibración de fábrica? ¿Tengo que calibrar automáticamente el ADC en este caso?
Aquí está el código que usé hasta ahora:
#include "stm32f103xb.h"
int main(void)
{
// Select a clock source for ADC
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // Enable ADC1 to use APB2 BUS
RCC->CR |= RCC_CR_HSION; // set the internal clock on (8MHz)
while((RCC->CR & RCC_CR_HSIRDY) == 0){} // wait until HSI is ready
RCC->CFGR &= ~(RCC_CFGR_HPRE); // set AHB prescaler to 1
RCC->CFGR &= ~(RCC_CFGR_PPRE2); // set APB2 prescaler to 1 (PCLK2)
RCC->CFGR |= RCC_CFGR_ADCPRE; // use ADC prescaler
// Select a Sampling rate
ADC1->SMPR1 |= ADC_SMPR1_SMP16;
ADC1->SQR3 |= ADC_SQR3_SQ1_4; //set to convert the channel 16 fitst
// enable temperature sensor
ADC1->CR2 |= ADC_CR2_TSVREFE;
// ADC Calibration
// Power up the ADC and then Calibrate it
ADC1->CR2 |= ADC_CR2_ADON | ADC_CR2_CAL | ADC_CR2_CONT;
// wait until the calibration is completed and reseted
while((ADC1->CR2 & ADC_CR2_CAL) == 1){}
while(1)
{
// Start
ADC1->CR2 |= ADC_CR2_ADON;
while((ADC1->SR & ADC_SR_EOC) == 0){} // wait for end of conversion
// Print the results on LCD
LCDSendInstruction(LCD_CLEAR);
LCDSendInteger(ADC1->DR,8);
}
}
Gracias de antemano: D