У меня есть STM32F411VET, и я хочу, чтобы прерывание запускалось после завершения преобразования АЦП. В документации говорится следующее:
В режиме одиночного преобразования АЦП выполняет одно преобразование. Этот режим запускается с битом CONT в 0 одним из следующих способов:
- установка бита SWSTART в регистре ADC_CR2 (только для обычного канала) После завершения преобразования выбранного канала:
Если был преобразован обычный канал:
- Преобразованные данные сохраняются в 16-битном регистре ADC_DR.
- Установлен флаг EOC (конец преобразования).
- Прерывание генерируется, если установлен бит EOCIE.
Затем АЦП останавливается.
Таким образом, у меня есть следующий код:
Включение прерываний
SET_BIT(ADC1->CR1, ADC_CR1_EOCIE); // enable interrupt generation
NVIC_EnableIRQ(ADC_IRQn); // allow interrupt in NVIC
__enable_irq(); // change cpu flags to enable interrupts
Настройка ADC
void ConfigureADC()
{
// PA1 - ADC_IN1
SET_BIT(GPIOA->MODER, GPIO_MODER_MODE1_0 | GPIO_MODER_MODE1_1);
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN); // enable ADC1 clock
SET_BIT(ADC1->CR2, ADC_CR2_ADON); // enable ADC1
SET_BIT(ADC1->CR1, ADC_CR1_RES_1); // 8-bit conversion
SET_BIT(ADC->CCR, ADC_CCR_ADCPRE_0); // prescaler - /4
SET_BIT(ADC1->SQR3, 1); // channel 1 (PA1)
SET_BIT(ADC1->CR2, ADC_CR2_CONT); // Continious mode
}
Обработчик прерывания
void ADC_IRQHandler()
{
vConverted = true;
CLEAR_BIT(ADC1->SR, ADC_SR_EOC); // Software clears EOC flag
}
В режиме отладки или при чтении непосредственно из регистра ADC1->DR
я получаю прекрасный результат.
Меня беспокоит то, что я не могу отладить обработчик прерывания в uVision5 (IDE, которую я использую).
Проблема в том, что обработчик прерывания не выполняется, и я не знаю, как его правильно отладить.
Спасибо всем за помощь.
main.c
файла, который является единственным файлом, который я создал. Таким образом, обработчик находится рядом с функциейmain
. - person hrust   schedule 28.04.2017extern
, потому что делал все, что мог придумать. Могут ли быть другие обработчики прерываний (как я могу проверить это в режиме отладки) или чип, имеющий какой-либо сбой (исключение ядра)? - person hrust   schedule 28.04.2017