void setup() {
HAL_Init();
// Configure PA0 as input with pull-up
GPIOA->MODER &= ~GPIO_MODER_MODE0_Msk; // Clear mode bits for PA0
GPIOA->PUPDR |= GPIO_PUPDR_PUPD0_0; // Set pull-up configuration for PA0
// Configure PB3 as output
GPIOB->MODER &= ~GPIO_MODER_MODE3_Msk; // Clear mode bits for PB3
GPIOB->MODER |= GPIO_MODER_MODE3_0; // Set mode bits to 01 for output
// Autorisation de l'interruption de la ligne 0, correspondant à la broche « PA0 »
//EXTI->IMR |= 1;
EXTI->IMR |= EXTI_IMR_IM0; // Unmask EXTI0
// Activation du déclenchement de l'interruption sur un front montant de la broche « PA0 »
//EXTI->RTSR |= 1;
EXTI->RTSR |= EXTI_RTSR_RT1; // Enable rising edge trigger
//configure l'interruption EXT0
NVIC->ISER[0] |= (1 << 6);
NVIC_SetPriority(EXTI0_1_IRQn, 1); // Set priority (adjust as needed)
NVIC_EnableIRQ(EXTI0_1_IRQn);
}
void EXTI0_1_IRQHandler(void)
{
// Your interrupt handler code here
// This function will be called when the interrupt occurs on EXTI0 line
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
if (EXTI->PR & EXTI_PR_PR0)
{
// Le bit PR0 est défini, indiquant une interruption sur la ligne 0
EXTI->PR |= EXTI_PR_PR0; // Nettoyer le drapeau d'interruption
// Ajoutez votre code de gestion d'interruption ici
}
GPIOB->ODR ^= (1 << 3); // XOR operation to invert the state of PB3
}
void loop()
{}
Loading
st-nucleo-l031k6
st-nucleo-l031k6