Здравствуйте! Долго лазил по форуму и не нашел того, чего искал.
Суть: хочу померить напряжение на входе ADC1. Нашел в стандартное библиотеке ADC/AnalogWatchdog/main этот код:
RST_CLK_DeInit();
RST_CLK_HSEconfig(RST_CLK_HSE_ON);
if(RST_CLK_HSEstatus() == ERROR)
while(1);
RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul4);
RST_CLK_CPU_PLLcmd(ENABLE);
if(RST_CLK_CPU_PLLstatus() == ERROR)
while(1);
RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
RST_CLK_CPU_PLLuse(ENABLE);
RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
/* Enable peripheral clocks --------------------------------------------------*/
RST_CLK_PCLKcmd((RST_CLK_PCLK_RST_CLK | RST_CLK_PCLK_ADC | RST_CLK_PCLK_PORTA),ENABLE);
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
/* Init NVIC */
SCB->AIRCR = 0x05FA0000 | ((uint32_t)0x500);
/* Disable all interrupt */
NVIC->ICPR[0] = 0xFFFFFFFF;
NVIC->ICER[0] = 0xFFFFFFFF;
/* Enable ADC interrupt */
NVIC->ISER[0] = (1<<ADC_IRQn);
/* Reset PORTD settings */
PORT_DeInit(MDR_PORTA);
/* Configure ADC pin: ADC */
/* Configure PORTB pin 8 */
PORT_InitStructure.PORT_Pin = PORT_Pin_8;
PORT_InitStructure.PORT_OE = PORT_OE_IN;
PORT_InitStructure.PORT_MODE = PORT_MODE_ANALOG;
PORT_Init(MDR_PORTB, &PORT_InitStructure);
/* ADC Configuration */
/* Reset all ADC settings */
ADC_DeInit();
ADC_StructInit(&sADC);
ADC_Init (&sADC);
ADCx_StructInit (&sADCx);
sADCx.ADC_ClockSource = ADC_CLOCK_SOURCE_CPU;
sADCx.ADC_SamplingMode = ADC_SAMPLING_MODE_CICLIC_CONV;
sADCx.ADC_ChannelSwitching = ADC_CH_SWITCHING_Disable;
sADCx.ADC_ChannelNumber = ADC_CH_ADC7;
sADCx.ADC_Channels = 0;
sADCx.ADC_LevelControl = ADC_LEVEL_CONTROL_Enable;
sADCx.ADC_LowLevel = L_Level;
sADCx.ADC_HighLevel = H_Level;
sADCx.ADC_VRefSource = ADC_VREF_SOURCE_INTERNAL;
sADCx.ADC_IntVRefSource = ADC_INT_VREF_SOURCE_INEXACT;
sADCx.ADC_Prescaler = ADC_CLK_div_32768;
sADCx.ADC_DelayGo = 0x7;
ADC1_Init (&sADCx);
/* Enable ADC1 EOCIF and AWOIFEN interupts */
ADC1_ITConfig((ADCx_IT_END_OF_CONVERSION | ADCx_IT_OUT_OF_RANGE), ENABLE);
/* Init display */
Display_Init();
/* ADC1 enable */
ADC1_Cmd (ENABLE);
while(1)
{
MDR_ADC->ADC1_CFG |= 0x02; // ADC Start
while(!(MDR_ADC->ADC1_STATUS & 0x04)) __NOP();
adc_result=MDR_ADC->ADC1_RESULT&0x0FFF;
adc_result_volt = 3.3*adc_result/0x0FFF;
}
и в конце подсчет соответственно вставил я.
Проблема: я подключаю к ADC1 батарейку 3v, подключал и 1,5v, а значение не менялось. Что с батарейками, что без них: результат - от 1,16v до 1,92v.
Вопрос:что не так, подскажите?