Все прерывания срабатывают по 2 раза
Абсолютьно все !!! И по изменению уровня и таймеров.
Вот пример на кнопку:
Код: Выделить всё
/* PA0 : инициализация прерывания кнопки
----------------------------------------- */
void button_0_int_init (void) {
// настроика порта
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init (GPIOA, &GPIO_InitStructure);
// настроить прерывание на вывод 1 линии B
SYSCFG->EXTICR [0] |= SYSCFG_EXTICR1_EXTI0_PA;
// выполнение по изменению напряжения
EXTI->RTSR |= EXTI_RTSR_TR0; // повышение
// настроить прерывание на вывод 0
EXTI->IMR |= EXTI_IMR_MR0;
// приоритет прерывания
NVIC_SetPriority (EXTI0_IRQn, 1);
// разрешение выполнение прерывания
NVIC_EnableIRQ (EXTI0_IRQn);
}
/* прерывание кнопок : PB0
----------------------------------------- */
void EXTI0_IRQHandler (void) {
power_button ++;
// очистка флага прерывания
EXTI->PR |= EXTI_PR_PR0;
}
Код: Выделить всё
EXTI->RTSR |= EXTI_RTSR_TR0; // повышение
EXTI->FTSR |= EXTI_FTSR_TR0; // понижение


