Skip to main content
Visitor II
February 21, 2025
Question

external interrupt in stm32f107

  • February 21, 2025
  • 2 replies
  • 476 views
#include "stm32f10x.h"
#include "interrupt.h"


void intr_config()
{
RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC -> APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC -> APB2ENR |= RCC_APB2ENR_IOPDEN;
RCC -> APB2ENR |= RCC_APB2ENR_AFIOEN;

GPIOA ->CRH |= GPIO_CRH_MODE8_1 ;
GPIOA ->CRH &= ~GPIO_CRH_CNF8_0;

GPIOB -> CRL |= ~GPIO_CRL_MODE1_1; //PB1 output mode
GPIOB -> CRL &= ~GPIO_CRL_CNF1_0;

GPIOD -> CRH &= ~GPIO_CRH_MODE15_0; //PD15 input mode
GPIOD -> CRH |= GPIO_CRH_CNF15_0;

GPIOB -> ODR &= ~(unsigned int)GPIO_ODR_ODR1;
GPIOD -> IDR |= GPIO_IDR_IDR15;

AFIO ->EVCR |= AFIO_EVCR_PORT_PB;
AFIO ->EVCR |= AFIO_EVCR_PIN_PX1;

EXTI -> IMR |= EXTI_IMR_MR1;
EXTI -> RTSR |= EXTI_RTSR_TR1;

AFIO ->EVCR |= AFIO_EVCR_PORT_PD;
AFIO ->EVCR |= AFIO_EVCR_PIN_PX15;

EXTI -> IMR |= EXTI_IMR_MR15;
EXTI -> FTSR |= EXTI_FTSR_TR15;

NVIC_EnableIRQ(EXTI15_10_IRQn);
}


void EXTI15_10_IRQHandler()
{
if((EXTI->PR & EXTI_PR_PR15) != 0)
{
GPIOA ->ODR |= GPIO_ODR_ODR8;
EXTI->PR |= EXTI_PR_PR15;
}
}
On key press LED not glow

 

    This topic has been closed for replies.

    2 replies

    Super User
    February 21, 2025

    Create a project in CubeMX that does the same thing and compare register values. Nothing jumps out at a quick glance.

    > GPIOA ->ODR |= GPIO_ODR_ODR8;

    This sets PA8 high. Probably toggling it here is the better option.

     

    Super User
    February 22, 2025

     

    Blinky with loopdelay works?

     

    Reduce the code to a minimal but complete compilable example exhibiting the problem, and post. 

     

    JW