STM32L151 ADC Завершение преобразования

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

STM32L151 ADC Завершение преобразования

Сообщение evilbob »

Здравствуйте.
Делаю проект с шестью регулярными каналами АЦП. Данные забираю через DMA. Вначале и АЦП и ПДП запускались сразу и вопросов не возникало.
Позже появилась необходимость запускать АЦП по таймеру (задержка на считывание данных и отключение питания во время простоя включены). В принципе ничего сложного нет, все это есть в примерах и в интернете. Но.
Во-первых: не понятен нюанс с битами EOC и EOCS и задержкой. Если в ADC_CR2 бит EOCS установить в 1, то бит EOC будет выставлятся при завершении преобразования каждого канала. Хотя если смотреть описание самого бита EOC в регистре ADC_SR, то там написано наоборот (Conversion complete (EOCS=0), or sequence of conversions complete (EOCS=1)). Плюс в описании к хардварным задержкам также есть сноска и там указано (When ADC_CR2_EOCS = 1, the delay is inserted after each sequence of regular group
conversions). Раздел про АЦП RM0038

Во-вторых: разьясните, пожалуйста, правильно ли я считаю времена. Время преобразования одного канала = ((384+12)/16000000) = 24,75 мкс

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

		ADC_InitStructure.ADC_ScanConvMode = ENABLE;
		ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
		ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Falling;
		ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T9_TRGO;		
		ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
		ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
		ADC_InitStructure.ADC_NbrOfConversion = ADC_Nomber_of_Conv;
		ADC_Init(ADC1, &ADC_InitStructure);	


		ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_384Cycles);		
		ADC_RegularChannelConfig(ADC1,ADC_Channel_1,2,ADC_SampleTime_4Cycles); 	
		ADC_RegularChannelConfig(ADC1,ADC_Channel_19,3,ADC_SampleTime_384Cycles);		
		ADC_RegularChannelConfig(ADC1,ADC_Channel_16,4,ADC_SampleTime_384Cycles);	
		ADC_RegularChannelConfig(ADC1,ADC_Channel_17,5,ADC_SampleTime_384Cycles);	
		ADC_RegularChannelConfig(ADC1,ADC_Channel_7,6,ADC_SampleTime_384Cycles);	
		
		ADC_EOCOnEachRegularChannelCmd(ADC1, ENABLE);//?
		ADC_PowerDownCmd(ADC1, ADC_PowerDown_Idle_Delay, ENABLE);		
		ADC_DelaySelectionConfig(ADC1, ADC_DelayLength_Freeze);		

		ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE);
		ADC_DMACmd(ADC1, ENABLE);	
		ADC_TempSensorVrefintCmd(ENABLE);		
		ADC_Cmd(ADC1, ENABLE);

		while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET);
//		ADC_SoftwareStartConv(ADC1);	
Заранее спасибо
Реклама
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: STM32L151 ADC Завершение преобразования

Сообщение evilbob »

Ни у кого нет никаких идей? :shock:
Реклама
Ответить

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