1 votos

la interrupción del botón nucleo-f401re sigue entrando en el manejador irq

El boton de la placa nucleo esta subido a alto a gpioc13 asi que hice la interrupcion en un borde de caida , el codigo sigue entrando en el manejador irq sin que yo presione el boton mi main.c

#include "Board_LED.h"
#include "stm32f401xe.h"

void PIN_CONFG();
void PIN_EN();
void clear();

int main(void) {
  LED_Initialize();
  PIN_CONFG(13);
  PIN_EN(13);

  LED_On(0);
  while(1){
  }

  return 0;
}

void delay(void) {
  int i; 
  for(i = 0; i < 5000000; i++) {
  } 
}

void EXTI15_10_IRQHandler(void) {
  clear(13);
  LED_On(0);
  delay();
  LED_Off(0);
  delay();
}

mis funciones de interrupción.c

#include "stm32f401xe.h"

void PIN_CONFG(uint16_t pin) {
  EXTI->FTSR |= (1 << pin); 
}

void PIN_EN(uint16_t pin) {
  EXTI->IMR |= (1<<pin);    
  NVIC_EnableIRQ(40);
}

void clear(uint16_t pin) {
  if(EXTI->PR & (1<<pin)) {
    EXTI->PR |= (1<<pin);
  } 
}

2voto

berendi Puntos 316

El pin de origen para EXTI13 debe ser seleccionado. Puede ser cualquiera de PA13 , PB13 , PC13 etc., y el SYSCFG->EXTICR indican al sistema cuál debe utilizar.

RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
RCC->APB2ENR; // see "Delay after an RCC peripheral clock enabling" in the errata sheet
SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI13_PC; // EXTICR4 in the Reference Manual correspond to EXTICR[3]!

Si no se configura, el valor predeterminado es PA13 (valor 0), que se utiliza como SWDIO del depurador de la placa. Cualquier la actividad del depurador desencadena la interrupción.

Por cierto, no olvides habilitar GPIOC en el controlador del reloj. Se aplica la misma fe de erratas que en el caso anterior, tal vez quieras intercalarlo con el código anterior para tener los retrasos necesarios sin código extra.

RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI13_PC;

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X