STM32F030F4 прерывания

Прерывание дело несложное. Единственный ньюанс — не забудьте подключить файлы startup_stm32f030.s и system_stm32f0xx.c (находятся в архиве с SPL, папка STM32F0xx_StdPeriph_Lib_V1.5.0\Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\), иначе прерывание закончится вызовом HardFault_Handler.

Например, прерывание по кнопке. Кнопку подключаем к PA0 и земле. И от PA0 подтягивающий резистор к плюсу питания.

Инициалазация

  EXTI_InitTypeDef   EXTI_InitStructure;
  NVIC_InitTypeDef   NVIC_InitStructure;

  /* Configure PA0 pin as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Enable SYSCFG clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  /* Connect EXTI0 Line to PA0 pin */
  SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

  /* Configure EXTI0 line */
  EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  /* Enable and set EXTI0 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);


Обработчик

void EXTI0_1_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0) != RESET) {

    // делаем что-нибудь полезное  

    /* Clear the EXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line0);
  }
}

STM32F103 внешние прерывания, проблема

Всем привет.

Использую внешнюю линию прерывания на порту GPIOA9.
Прерывание должно происходить по заднему фронту (на нем висит соответствующая нога W5100).
Все настроено, железо дергает ногу как положено, но контроллер после этого зацикливается на прерывании, независимо от состояния ноги. Для эксперимента воткнул в код обработчика выключение прерывания. Подействовало, но как только разрешаю прерывание — система зацикливается на нем не зависимо от состояния вывода мк.


Читать дальше