设置引脚后触发外部中断

Hei*_*ber 6 c stm32 stm32f0 stm32f3

我试图让外部中断在 Nucleo-F030R8上运行 ,但遇到了困难。

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

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

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

部分ISR、Interrupthandler被删掉

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 */
}
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

更新:

难道是通过复位PinBSRR或者BRR产生中断?我正在逐步检查我的代码,每次重置引脚时都会生成中断。

小智 0

如果TEST_Pin是GPIO_PIN_0或GPIO_PIN_1引脚,您将合法收到irq。EXTI0_1_IRQHandler 捕获来自任何端口(除了 #0 或 #1 引脚)的 irq。