Запуск единичного преобразования с порта A1 и чтение значения по прерыванию
// Подача тактовые импульсы на АЦП.
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// Сброс настройки
ADC_DeInit(ADC1);
// Объявление структуры ADC_InitTypeDef,
ADC_InitTypeDef ADC_InitStructure;
// Заполнил значения. Имена констант нашел в том же stm32f10x_adc.h,
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
// Инициализация АЦП заполненной структурой
ADC_Init(ADC1, &ADC_InitStructure);
// Включение АЦП
ADC_Cmd(ADC1, ENABLE);
// Разрешение прерывания по окончанию преобразования
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
// Калибровка
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1)) { };
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1)) { };
// Настройка группы приоритета прерываний
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
// Создал структуру NVIC и заполнение ее значениями
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//Обработчик прерывания
void ADC1_IRQHandler(void) {
if (ADC_GetITStatus(ADC1, ADC_IT_EOC)) {
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
// Чтение значения АЦП
val = ADC_GetConversionValue(ADC1);
};
};
//Запуск преобразования
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
Комментариев нет:
Отправить комментарий