реклама на сайте
подробности

 
 
> ищу пример использования 4 и более канала ADC в stm32f105/107, поделитесь наработками кому не жалко..
super_puper
сообщение May 8 2013, 04:51
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 222
Регистрация: 14-12-12
Из: новосибирск
Пользователь №: 74 845



нужно на стд перифе 3.5.0.
нашел пример но он видимо для другой линейки контролеров и на моем не работает у меня линейка CL а он обращается почему то к файлам другой линейки.. визуально заметил что в моих работающих примерах пишется "структуре" а тут "структ" пробовал заменить не помогло.
CODE

RCC_ADCCLKConfig(RCC_PCLK2_Div4); //Устанавливаем предделитель тактовой АЦП.
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//Включаем тактирование.

// ADC1 configuration
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 2;
ADC_Init(ADC1, &ADC_InitStructure);

//Теперь, когда общая инициализация прошла успешно, нам надо настроить регистры инжекторных каналов, куда будут писаться наши данные. Ведь именно для этого мы их и используем.
//Устанавливаем количество каналов, которые мы собираемся считывать. Программа тогда сразу будет знать сколько вы в неё собираетесь записать каналов. Помните, что нельзя использовать одновременно более 4-х каналов, т.к. у инжекторных каналов только 4 различных регистра.

ADC_InjectedSequencerLengthConfig(ADC1, 2);

//Сопоставляем каналы регистрам. За регистры отвечает 3-й параметр. Параллельно настраиваем порты.
ADC_InjectedChannelConfig(ADC1, ADC_Channel_7, 1, ADC_SampleTime_71Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_71Cycles5);
//ADC_InjectedChannelConfig(ADC1, ADC_Channel_14, 3, ADC_SampleTime_71Cycles5);

//Выключаем тригер.
ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);

// Enable automatic injected conversion start after regular one
ADC_AutoInjectedConvCmd(ADC1, ENABLE);//Это похоже запускает инжекторный канал вместе с регулярным. Т.е. в будущем будем запускать регулярный канал, а снимать с инжекторных. Хотя по поводу данной функции я могу ошибаться.

//Включили прерывания с инжекторного канала по окончании преобразования.
ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);

//Включили прерывания АЦП.
NVIC_EnableIRQ(ADC1_2_IRQn);

//Включили АЦП
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));

//На этом заканчивается инициализация.

//Для запуска АЦП пишем:
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}

//Для чтения полученных данных:
//void ADC1_2_IRQHandler(void)//ADC interrupt
//{
//ADC1->SR&=~ADC_SR_JEOC;
//DataConvX = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
//DataConvY = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
//DataConvZ = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_3);
//ADC_Data_TX = EN;
//}


и вот ещё классный пример!! только не на структурах(
http://mycontroller.ru/stm32-adc-primeryi-...annyie-kanalyi/

Сообщение отредактировал super_puper - May 8 2013, 06:25
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016