5

我试图让外部中断在 Nucleo-F030R8上运行 并撞墙。

一切都已配置并在步进模式下运行良好,但是当我使用简单的跳线将我的板连接到另一个测试板并运行相同的代码时,即使该测试板(第二个 Nucleo-F302R8,它应该只产生一个我想用第一个测量的信号峰值)没有打开。

我正在混合使用来自 STM 的 HAL 库和我自己的一些代码。

有人最终遇到了类似的问题吗?我正在使用 STM32 的系统工作台。

ISR的一部分,中断处理程序被切掉

void EXTI0_1_IRQHandler(void)
{
   /* USER CODE BEGIN EXTI0_1_IRQn 0 */
   if ((EXTI->IMR & EXTI_IMR_MR0) && (EXTI->PR & EXTI_PR_PR0))
   {
       int_flag_pin.copen = 1;
   }
   if ((EXTI->IMR & EXTI_IMR_MR1) && (EXTI->PR & EXTI_PR_PR1))
   {
      int_flag_pin.ma1 = 1;
   }

   /* USER CODE END EXTI0_1_IRQn 0 */
   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
   HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);
   /* USER CODE BEGIN EXTI0_1_IRQn 1 */

   /* USER CODE END EXTI0_1_IRQn 1 */
}

在将引脚设置为低电平和变化上升之间,中断触发。

TEST_GPIO_Port->BSRR = (uint32_t) TEST_Pin;
//HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_Pin, GPIO_PIN_RESET);      
TEST_GPIO_Port->BRR = (uint32_t) TEST_Pin;
change_rising(0);

更新:

会不会是通过重置引脚BSRRBRR产生中断?我正在逐步检查我的代码,每次重置引脚时都会生成中断。

4

1 回答 1

0

如果 TEST_Pin 是 GPIO_PIN_0 或 GPIO_PIN_1 引脚,您将合法地收到 irq。EXTI0_1_IRQHandler 从除#0 或#1 引脚之外的任何端口捕获irq。

于 2020-11-12T11:47:51.623 回答