настраиваю ацп вот так
Код
void ADC_Ini()
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_Init_user;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_AHB2PeriphClockCmd(RCC_APB2Periph_ADC, ENABLE);
ADC_Init_user.ADC_Resolution = ADC_Resolution_12b;
ADC_Init_user.ADC_ScanConvMode = DISABLE;
ADC_Init_user.ADC_ContinuousConvMode = DISABLE;
ADC_Init_user.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_Init_user.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_Init_user.ADC_DataAlign = ADC_DataAlign_Right;
ADC_Init_user.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_Init_user);
ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_56Cycles);
NVIC_EnableIRQ(ADC_IRQn);
__enable_irq();
ADC_ITConfig(ADC1, ADC_IT_EOC,ENABLE);
ADC_Cmd(ADC1, ENABLE);
}
запускаю преобразование командой ADC_SoftwareStartConv(ADC1);
вот так описано прерывание:
Код
extern "C" void ADC_IRQHandler(void)
{
if(ADC_GetITStatus(ADC1, ADC_IT_EOC) == SET)
{
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
GPIO_SetBits(GPIOD, GPIO_Pin_14);
data_adc = ADC_GetConversionValue(ADC1);
}
}
когда пошагово выполняю программу проц выполняет команду ADC_SoftwareStartConv(ADC1); и дальше продолжает остальной код выполнять, но прерывание так и не вызывается