Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带外部中断的STM32F4 GPIO发光二极管_C_Microcontroller_Gpio_Stm32f4discovery_Stm32f4 - Fatal编程技术网

C 带外部中断的STM32F4 GPIO发光二极管

C 带外部中断的STM32F4 GPIO发光二极管,c,microcontroller,gpio,stm32f4discovery,stm32f4,C,Microcontroller,Gpio,Stm32f4discovery,Stm32f4,我试图使用一个连接到PA1的外部按钮来触发一个外部中断,以便打开一个LED(在PD12上)。我尝试过使用stm32f4xx_it.c中声明的变量,并在EXTI1_IRQHandler中设置它=1,还尝试过使用GPIO回调函数。但是,即使未按下按钮,引脚似乎也会连续检测为高电平 预期结果:按钮未按下>>LED熄灭>>按钮按下>>LED点亮 实际结果:按钮未按下>>发光二极管亮起>>按钮按下>>发光二极管亮起 我不知道为什么会发生这种情况,我试着测试我的按钮是否接线错误,但如果我将一侧连接到+5v,

我试图使用一个连接到PA1的外部按钮来触发一个外部中断,以便打开一个LED(在PD12上)。我尝试过使用stm32f4xx_it.c中声明的变量,并在EXTI1_IRQHandler中设置它=1,还尝试过使用GPIO回调函数。但是,即使未按下按钮,引脚似乎也会连续检测为高电平

预期结果:按钮未按下>>LED熄灭>>按钮按下>>LED点亮

实际结果:按钮未按下>>发光二极管亮起>>按钮按下>>发光二极管亮起

我不知道为什么会发生这种情况,我试着测试我的按钮是否接线错误,但如果我将一侧连接到+5v,并添加一个电阻器和LED串联,LED在按下按钮时亮起,不按下按钮时熄灭,则工作正常

编辑:代码在使用discovery board内置按钮和LED的新项目上工作,但是当尝试使用我自己的外部按钮时,只要我将导线连接到board上的管脚,LED就会打开,甚至没有在另一侧连接到试验板,所以不知怎的,它被告知管脚高

我将在下面附上一些代码:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{


  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
  if(GPIO_Pin == GPIO_PIN_1)
    {
        if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1))
        {
    
        buttonpressed=1;
        }

    }

}

目前还没有实现它,但我会做一些类似于
的事情,比如(!(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)){buttonpressed=0;}
然后在我的while循环writepin to reset中,我以前有过这段代码,但这并没有什么区别,LED在我未按下按钮的情况下点亮。请同时按下RCC并中断设置代码。没有这个很难说。是STM32F4Discovery评估板吗?@alagner我想我已经弄明白了,我需要为EXTI中断设置一个上拉电阻,但目前还没有实现它,但我会做一些类似于
if(!(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)){buttonpressed=0;}
然后在我的while循环writepin to reset中,我以前有此代码,但它没有什么区别,LED在我没有按下按钮的情况下点亮。请同时发布RCC并中断设置代码。没有这个很难说。是STM32F4Discovery评估板吗?@alagner我想我弄明白了,我需要为EXTI中断设置一个上拉电阻器
  while (1)
  {

       if(buttonpressed==1){
         
          HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
         
      }
      buttonpressed=0;

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}