ну что тут сказать... дело было не в бабине....)
Из-за не внимательности коэффициенты для расчёта температуры стояли от F4 серии (они отличаются). Отсюда и все непонятки появлялись!
Выкладываю код в окончательном виде (для f10x и f4xx):
CODE
#if defined (STM32F10X_LD) || defined (STM32F10X_LD_VL) || defined (STM32F10X_MD) ||
defined (STM32F10X_MD_VL) || defined (STM32F10X_HD) || defined (STM32F10X_CL)
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
ADC_InitTypeDef ADC_InitStructure;
//ADC1 configuration ------------------------------------------------------
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// ADC1 regular channels configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5 );
ADC_TempSensorVrefintCmd(ENABLE);
// Enable ADC1
ADC_Cmd(ADC1, ENABLE);
// Enable ADC1 reset calibration register
ADC_ResetCalibration(ADC1 );
// Check the end of ADC1 reset calibration register
while (ADC_GetResetCalibrationStatus(ADC1 ));
// Start ADC1 calibration
ADC_StartCalibration(ADC1 );
// Check the end of ADC1 calibration
while (ADC_GetCalibrationStatus(ADC1 ));
/* ADC3 regular channel12 configuration *************************************/
//ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_3Cycles );
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
#else
#ifdef STM32F4XX
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* ADC Common Init **********************************************************/
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);
/* ADC3 Init ****************************************************************/
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
/* ADC3 regular channel12 configuration *************************************/
ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_3Cycles );
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable ADC3 */
ADC_Cmd(ADC1, ENABLE);
// разрешение прерывания по завершению преобразования
ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_480Cycles);
ADC_TempSensorVrefintCmd(ENABLE);
#else
#error *** Не выбран процессор ***
#endif
#endif
Обработчик прерывания:
CODE
#if defined (STM32F10X_LD) || defined (STM32F10X_LD_VL) || defined (STM32F10X_MD) || defined (STM32F10X_MD_VL) ||
defined (STM32F10X_HD) || defined (STM32F10X_CL)
float tempera2;
void ADC1_2_IRQHandler(void)
{
adcdata = ADC_GetConversionValue(ADC1 );
tempera2 = (1.43 - adcdata * 0.00080586) / 0.0043 + 25;
CPUTempSense = 25+(1775 - adcdata )*18736/100000;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC );
}
#else
#ifdef STM32F4XX
void ADC_IRQHandler(void)
{
adcdata = ADC1 ->DR;
CPUTempSense = 25 + (adcdata - 943) * 3223 / 10000;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC );
}
#else
#error *** Не выбран процессор ***
#endif
#endif
PS читайте даташиты внимательней меньше будет проблем))
Всем спасибо!