Прерывание как-то не совсем работает.
Оно срабатывает по 12 раз. И по 3 таких раза за секунду. Т.е. 36 раз за секунду.
Причём на вывод PB13 подаю 3.3В через резистор 12K и уровень никак не изменяется (смотрел осциллографом) !
Все срабатывания происходят с одинаковой периодичностью. Т.е. возникает логический вывод, что что-то запускает прерывание изнутри.
Код:
// Конфигурация линии как вход
#define BUTTON_B13 B, 13, HIGH, INPUT_FLOATING,
PIN_CONFIGURATION (BUTTON_B13);
// Установка прерывания на порт B вывод 13
AFIO->EXTICR[0] &= ~AFIO_EXTICR4_EXTI13_PB;
AFIO->EXTICR[0] |= AFIO_EXTICR4_EXTI13_PB;
// Разрешить запрос от EXTI.
EXTI->IMR|=(EXTI_IMR_MR13);
// Срабатывание по изменению уровня
EXTI->RTSR |= EXTI_RTSR_TR13;
// EXTI->FTSR |= EXTI_FTSR_TR13;
// Разрешить прерывание
NVIC_EnableIRQ (EXTI15_10_IRQn); // Разрешить в NVIC.
}
Код:
void EXTI15_10_IRQHandler (void) {
if (EXTI->PR & (1<<13)) // Прерывание от EXTI ?
{
EXTI->PR |= (1<<13); // Сбросить флаг
temp = temp + 1;
}
}