您好!从您提供的代码片段来看,您已经正确地设置了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引脚没有短路或其他干扰。
您好!从您提供的代码片段来看,您已经正确地设置了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引脚没有短路或其他干扰。
举报