STM32 Проблемы с ADC (АЦП)

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Zender12
Родился
Сообщения: 6
Зарегистрирован: Чт дек 08, 2011 18:06:52

STM32 Проблемы с ADC (АЦП)

Сообщение Zender12 »

Здравствуйте, подскажите пожалуйста где ошибка. Была написана простая программа для STM32F4DISCOVERY использующая АЦП для измерений, был подключён потенциометр на 10kOm средней точкой к выводу PA1
СпойлерИзображение
.

Код: Выделить всё

#include <stm32f4xx.h>
#include <stm32f4xx_rcc.h>
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_adc.h>
int ReadADC1()
{
	ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_3Cycles);
	ADC_SoftwareStartConv(ADC1);
	while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
	return ADC_GetConversionValue(ADC1);
}
void main(void)
{
	// RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	GPIO_InitTypeDef GPIO_STR;
	ADC_InitTypeDef ADC_STR;
	ADC_CommonInitTypeDef ADC_CSTR;
	GPIO_STR.GPIO_Mode=GPIO_Mode_AN;
	GPIO_STR.GPIO_Pin=GPIO_Pin_1;

	GPIO_Init(GPIOA,&GPIO_STR);

	ADC_DeInit();
	ADC_CSTR.ADC_Mode=ADC_Mode_Independent;
	ADC_CSTR.ADC_Prescaler=ADC_Prescaler_Div2;

	ADC_CommonInit(&ADC_CSTR);

	ADC_STR.ADC_ContinuousConvMode=DISABLE;
	ADC_STR.ADC_DataAlign=ADC_DataAlign_Right;
	ADC_STR.ADC_ExternalTrigConv=ADC_ExternalTrigConvEdge_None;
	//ADC_STR.ADC_NbrOfConversion=ADC_N
	ADC_STR.ADC_Resolution=ADC_Resolution_12b;
	ADC_STR.ADC_ScanConvMode=DISABLE;

	ADC_Init(ADC1,&ADC_STR);

	ADC_Cmd(ADC1,ENABLE);

	int adc_temp=0,sum=0;

	while(1)
	{
		for (time = 0; time <= 1000; time++)
		{
			delay(300);
			adc_temp=ReadADC1();
			sum+=adc_temp;
		}
		sum/=1000;
	}
}
. Сначала всё замечательно работало но спустя какое-то время без каких-либо изменений в коде и схеме перестала работать. Как выяснилось позже происходит зацикливание на одной из строк кода

Код: Выделить всё

 while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
. В одно включение программа работает без сбоев, ведутся нормальные замеры, в следующий же раз происходит зацикливание, даже без изменения кода. Даже при удалении участка кода где происходит зацикливание (что насколько я понимаю в корне не верно) приходят неверные данные. Прошу подскажите всё-ли верно в инициализации и использовании АЦП и что может приводить к таким проблемам?
Реклама
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 Проблемы с ADC (АЦП)

Сообщение oleg110592 »

если так:
ADC_STR.ADC_NbrOfConversion=1;
p.s. 5В для ацп, имхо многовато
Реклама
Zender12
Родился
Сообщения: 6
Зарегистрирован: Чт дек 08, 2011 18:06:52

Re: STM32 Проблемы с ADC (АЦП)

Сообщение Zender12 »

Пробывал, безрезультатно. Картинка для наглядности, потенциометр подключён к +3.3В.(в датащите сказано что вход толерантен к +5В)
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: STM32 Проблемы с ADC (АЦП)

Сообщение HHIMERA »

Zender12 писал(а):в датащите сказано что вход толерантен к +5В
Угу...
FT = 5 V tolerant except when in analog mode or oscillator mode (for PC14, PC15, PH0 and PH1).
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»