STM32FDISCOVERY

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

STD32F4DISCOVERY
ДОбрый день. Изивните, елси эта тема уже была, но не могли бы вы сказать, как мне запустить АЦП и проверить напряжение с ножки PA1(ADC123_IN1).
Есть всем известные функции
Спойлерvoid ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef adc_init;
/* разрешаем тактирование AЦП1 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
/* сбрасываем настройки АЦП */
ADC_DeInit();
/* АЦП1 и АЦП2 работают независимо */
adc_init.ADC_Mode = ADC_Mode_Independent;
adc_init.ADC_Prescaler = ADC_Prescaler_Div2;
/* выключаем scan conversion */
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
/* Не делать длительные преобразования */
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
/* Начинать преобразование програмно, а не по срабатыванию триггера */
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
/* 12 битное преобразование. результат в 12 младших разрядах результата */
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
/* инициализация */
ADC_CommonInit(&adc_init);
ADC_Init(ADC1, &ADC_InitStructure);
/* Включаем АЦП1 */
ADC_Cmd(ADC1, ENABLE);
}

u16 readADC1(u8 channel)
{
ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_3Cycles);
// начинаем работу
ADC_SoftwareStartConv(ADC1);
// ждём пока преобразуется напряжение в код
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
// возвращаем результат
return ADC_GetConversionValue(ADC1);
}
Что за ADC123? есть ADC1, ADC2, ADC3, а вот ADC123 не пойму что это....
И как мне прочитать именно ADC123_IN1, именно с ножки PA1?
Заранее Спасибо!
Последний раз редактировалось bishop-strip Сб июн 29, 2013 22:58:53, всего редактировалось 1 раз.
Реклама
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

Спасибо! Уже разобрался.
вот мое Решение, использую порт PA1 как АЦП:
Спойлерvoid ADC_Configuration(void)
{
//Инициализация порта А1 на аналаговый вход
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //Вывод порта для работы с ADC
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; //Аналоговый режим для вывода PA5
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //Отключаем подтягивающие резисторы
GPIO_Init(GPIOA, &GPIO_InitStructure); //Конфигурируем вывод

//Настройка АЦП
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef adc_init;
/*разрешаем тактирование AЦП1 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //Разрешение ADC - 12 бит
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //Выравнивание результата вправо
ADC_Init(ADC1, &ADC_InitStructure); //Конифигурируем модуль ADC заданной структурой
/*сбрасываем настройки АЦП */
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, 16);
ADC_Cmd(ADC1, ENABLE); //И включаем ADC
}

u16 readADC1(u8 channel)
{
ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_3Cycles);
// начинаем работу
ADC_SoftwareStartConv(ADC1);
// ждём пока преобразуется напряжение в код
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
// возвращаем результат
return ADC_GetConversionValue(ADC1);
}
Последний раз редактировалось bishop-strip Сб июн 29, 2013 22:58:26, всего редактировалось 1 раз.
Реклама
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

bishop-strip писал(а):Спасибо! Уже разобрался.
вот мое Решение, использую порт PA1 как АЦП:
Может, хватит уже над нами издеваться? Для кого теги CODE и SPOILER сделаны? Вы что, соревнуетесь, кто подлиннее пост вывалит?
Извините, правила какие-то есть, их не просто читать надо, их надо придерживаться. Честное слово, к подобным постам стойкое отвращение выработалось. Читать не хочется.
С уважением,
Виктор.
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Сообщение bishop-strip »

ut1wpr писал(а):
bishop-strip писал(а):Спасибо! Уже разобрался.
вот мое Решение, использую порт PA1 как АЦП:
Может, хватит уже над нами издеваться? Для кого теги CODE и SPOILER сделаны? Вы что, соревнуетесь, кто подлиннее пост вывалит?
Извините, правила какие-то есть, их не просто читать надо, их надо придерживаться. Честное слово, к подобным постам стойкое отвращение выработалось. Читать не хочется.
Ок, принимаю критику. Смотрите на изменения. Надеюсь вы теперь довольны :)))
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

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