2025-02-20 10:41 PM - last edited on 2025-02-21 02:09 AM by mƎALLEm
#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;
}
}
2025-02-21 07:18 AM
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.
2025-02-22 12:39 AM
Blinky with loopdelay works?
Reduce the code to a minimal but complete compilable example exhibiting the problem, and post.
JW