C 带外部中断的STM32F4 GPIO发光二极管
我试图使用一个连接到PA1的外部按钮来触发一个外部中断,以便打开一个LED(在PD12上)。我尝试过使用stm32f4xx_it.c中声明的变量,并在EXTI1_IRQHandler中设置它=1,还尝试过使用GPIO回调函数。但是,即使未按下按钮,引脚似乎也会连续检测为高电平 预期结果:按钮未按下>>LED熄灭>>按钮按下>>LED点亮 实际结果:按钮未按下>>发光二极管亮起>>按钮按下>>发光二极管亮起 我不知道为什么会发生这种情况,我试着测试我的按钮是否接线错误,但如果我将一侧连接到+5v,并添加一个电阻器和LED串联,LED在按下按钮时亮起,不按下按钮时熄灭,则工作正常 编辑:代码在使用discovery board内置按钮和LED的新项目上工作,但是当尝试使用我自己的外部按钮时,只要我将导线连接到board上的管脚,LED就会打开,甚至没有在另一侧连接到试验板,所以不知怎的,它被告知管脚高 我将在下面附上一些代码: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,
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 */
}