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);
  }
}
  • +1
  • 14 февраля 2016, 23:05
  • aliaksei

Комментарии (5)

RSS свернуть / развернуть
ИМХО, коллега SeregaB правильно говорил
самое главное — где берут такие штучки. 

Скачивается SPL на конкретное семейство, далее в папочке \STM32F0xx_StdPeriph_LibV1.4.0\Projects\STM32F0xx_StdPeriph_Examples такого кода под разную периферию в разных режимах сколько хочешь. Ничего выдумывать и хранить лишнего не надо. Только рихтуй под свои конкретные нужды.

Кокой смысл дублировать каждый пример в сообществе?

Если уж дублировать — то тогда есть смысл говорить о тонкостях (одно прерывание от разных источников на EXTI_Line0, приоритет прерываний NVIC).
0
  • avatar
  • e_mc2
  • 15 февраля 2016, 00:22
В каком сообществе? Протрите глаза — это блог им. aliaksei.

В персональном же можете писать что угодно, это ваше личное пространство. Главное не вылезать за рамки УК РФ и не оскорблять других участников проекта. А также запрещен спам и попытка впаривать чего либо.

Хотите поговорить от тонкостях, пишите свои статьи, не ждите моего разрешения.
0
Извиняюсь, если мой комментарий выглядел ка критика.
0
подозреваю, что по кнопке процессор "//делаем что-нибудь полезное" будет выполнять многократно за одно нажатие
0
Совершенно верное подозрение
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.