Страница 1 из 1

STM32F4+EXTI

Добавлено: Вт мар 08, 2016 18:13:20
TmYAG
Всем привет! Нахожусь в процессе изучения EXTI. Настроил на порт А 0 пин (там кнопка висит). Все работает. Решил проверить, что будет если вывести на другой пин в моем примере 3 того же порта А, но при этом прерывание не возникает.

Код: Выделить всё

#include "stm32f4xx.h"
void EXTI0_IRQHandler(void)
{
   EXTI->PR |= EXTI_PR_PR3;//?????????? ???? ??????????
  GPIOD->BSRRL |= (1 << 15)|(1 << 14)|(1 << 13)|(1 << 12);
 
}

int main()
{
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; /*Clocking port D*/
   RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;/*Clocking port A*/
  RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;/*Clocking SYSCFG*/
 
  GPIOD->MODER |= 0x55000000;/*Set pins 15, 14, 13, 12 as output*/
  GPIOD->OTYPER = 0; /**/
  GPIOD->OSPEEDR = 0; /**/
   
   GPIOA->PUPDR |= GPIO_PUPDR_PUPDR3_0;
   
  SYSCFG->EXTICR[0] = SYSCFG_EXTICR1_EXTI3_PA; /*Port A line 3*/
  EXTI->RTSR |= EXTI_RTSR_TR3; /*Rising*/
   EXTI->FTSR |= EXTI_FTSR_TR3;/*Falling*/
  NVIC_EnableIRQ(EXTI0_IRQn); /*Enable EXTI interrupt*/
  NVIC_SetPriority (EXTI0_IRQn, 2);
  EXTI->IMR |=EXTI_IMR_MR3;//Enable EXTI interrupt
  while(1)
  {   
      /*if (GPIOA->IDR & (1 << 0))
         {
            GPIOE->BSRRL |= (1 << 1);
         }
         else
         {
            GPIOE->BSRRH |= (1 << 1);
         }*/

  }
}

В чем проблема не могу понять, вроде все просто. Может кнопку не правильно повесил на пин.
З.Ы. Знаю что не лучший способ играться с EXTI путем работы с кнопкой, но по-моему это самый очевидный способ увидеть работу. Против дребезга ничего не делаю.

Re: STM32F4+EXTI

Добавлено: Ср мар 09, 2016 03:21:28
pixar
TmYAG писал(а): NVIC_EnableIRQ(EXTI0_IRQn); /*Enable EXTI interrupt*/
NVIC_SetPriority (EXTI0_IRQn, 2);


-> EXTI15_10 , EXTI15_10_IRQHandler

Re: STM32F4+EXTI

Добавлено: Чт апр 14, 2016 15:14:39
halisi
+
EXTI0_IRQHandler

это обработчик прерывания для линии 0. А для третьего пина - нужен другой