STM32
直播中

hxjq

12年用户 789经验值
私信 关注
[问答]

求助,关于STM32F072C外部中断问题求解

  我在使用PB4 做外部中断时,要求下降沿进中断,但测试发现当我按下Key 时,可以进中断,但我释放Key时也进中断....不清楚为什么?
PB4我也设置成输入上拉了. 能否看看我的code是否正确?
这是我初始化PB4 中断的code
        SYSCFG->EXtiCR[1] |=0x01;                        //PB4
        EXTI->IMR |=0x10;                                                        //Enable
        EXTI->EMR |=0x10;                                                        //Event
        EXTI->FTSR |=0x10;                                                //Falling
        EXTI->PR |=0x10;                                                        //
        
            /* Enable and set Button EXTI Interrupt to the lowest priority */
                NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0x03;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init( NVIC_InitStructure);


以下是中断code
void EXTI4_15_IRQHandler(void)
{

  //if (EXTI_GetITStatus(TAMPER_BUTTON_EXTI_LINE) != RESET)
        if((EXTI->PR  0x10)==0x10)
  {  test_cnt++;
                GPIOA->ODR = ~GPIOA->ODR;

    //EXTI_ClearITPendingBit(TAMPER_BUTTON_EXTI_LINE);
                EXTI->PR |=0x10;
  }
}


回帖(1)

发财树

2024-5-11 17:18:47
您好!从您提供的代码片段来看,您已经正确地设置了PB4作为外部中断的输入,并将其配置为下降沿触发。但是,您提供的代码片段中缺少了一些关键的初始化步骤,这可能是导致问题的原因。以下是一些建议和完整的初始化代码示例:

1. 首先,确保您已经正确地配置了PB4的GPIO模式。您需要将PB4配置为输入模式,并启用内部上拉电阻。这可以通过以下代码实现:

```c
GPIOB->MODER &= ~(GPIO_MODER_MODER4_0); // 清除PB4模式位
GPIOB->MODER |= GPIO_MODER_MODER4_1; // 设置PB4为输入模式
GPIOB->PUPDR |= GPIO_PUPDR_PUPDR4_0; // 清除PB4上拉/下拉位
GPIOB->PUPDR |= GPIO_PUPDR_PUPDR4_1; // 设置PB4为内部上拉
```

2. 接下来,您需要配置EXTI的触发条件。您已经正确地设置了EXTI_IMR寄存器,以使PB4的中断使能。但是,您还需要配置EXTI_FTSR和EXTI_RTSR寄存器,以设置触发条件。以下是如何设置下降沿触发的示例:

```c
EXTI->FTSR &= ~EXTI_FTSR_FT4; // 清除PB4的上升沿触发位
EXTI->RTSR |= EXTI_RTSR_TR4;  // 设置PB4的下降沿触发位
```

3. 最后,确保您已经启用了EXTI中断,并在NVIC中配置了相应的优先级。以下是如何启用EXTI中断的示例:

```c
EXTI->PR |= EXTI_PR_PIF4; // 清除PB4的中断标志位
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0); // 设置中断优先级
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn); // 启用EXTI4_15中断
```

将上述步骤添加到您的初始化代码中,然后重新测试您的外部中断功能。这应该可以解决您遇到的问题。如果您仍然遇到问题,请检查您的硬件连接,确保PB4引脚没有短路或其他干扰。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分