все понял.
код
CODE
GPIO_InitTypeDef PORT;
//Затактируем все три порта
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);
//Прерывания - это альтернативная функция порта
//поэтому надо установить бит Alternate function I/O clock enable
//в регистре RCC_APB2ENR
RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN , ENABLE);
// Настроим ноги со светодиодами на выход
PORT.GPIO_Pin = (GPIO_Pin_6 | GPIO_Pin_5);
PORT.GPIO_Mode = GPIO_Mode_Out_PP;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOE, &PORT);
AFIO->EXTICR[3]|=AFIO_EXTICR4_EXTI12_PD;
//Прерывания от нулевой и первой ноги разрешены
EXTI->IMR|=(EXTI_IMR_MR12);
//Прерывания на обоих ногах по нарастающему фронту
EXTI->RTSR|=(EXTI_RTSR_TR12);
//Разрешаем оба прерывания
//NVIC_EnableIRQ (EXTI0_IRQn);
NVIC_EnableIRQ(EXTI15_10_IRQn);
while(1)
{
}
}
// Обработчик прерывания EXTI0
void EXTI15_10_IRQHandler(void)
{
GPIOE->ODR^=GPIO_Pin_6;//тушим светодиод
EXTI->PR |= EXTI_PR_PR12;
}
проблема в том что я не ту функцию прерывания для используемой ноги вызываю и настройки ножки тоже не правильные были
http://easystm32.ru/for-beginners/25-inter...ndling-in-stm32 - помогла статья
только само прерывание что-то очень долго срабатывает. примерно после нажатия проходит 1 секунда прежде чем светодиод поменяет состояние
Сообщение отредактировал IgorKossak - Jan 15 2015, 18:08
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!