Events STM32上升和下降按钮中断检测
我有一个按钮中断:Events STM32上升和下降按钮中断检测,events,stm32,interruptions,Events,Stm32,Interruptions,我有一个按钮中断: void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) != RESET){ if (/* BUTTON IS RELEASED */) { /* do something */ } if (/* BUTTON IS PRESSED */) {
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET){
if (/* BUTTON IS RELEASED */) {
/* do something */
}
if (/* BUTTON IS PRESSED */) {
/* do something else */
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
有可能检查这个吗?是的,有可能。您必须将
EXTI
触发方法设置为EXTI\u Trigger\u risting\u fall
。因此,STM32在上升和下降边缘时输入ISR
。在ISR
中,您可以控制GPIO引脚。如果设置了GPIO Pın,则必须是上升沿,否则必须是下降沿
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET){
if (PIN==1) {//Rising so pressed
/* do something */
}
if (PIN==0) {Falling so released
/* do something else */
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
注意:当下拉按钮连接到按钮时,上述操作正常。向上拉时,上升和下降将颠倒。是的,这是可能的。您必须将
EXTI
触发方法设置为EXTI\u Trigger\u risting\u fall
。因此,STM32在上升和下降边缘时输入ISR
。在ISR
中,您可以控制GPIO引脚。如果设置了GPIO Pın,则必须是上升沿,否则必须是下降沿
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET){
if (PIN==1) {//Rising so pressed
/* do something */
}
if (PIN==0) {Falling so released
/* do something else */
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
注意:当下拉按钮连接到按钮时,上述操作正常。向上拉时,上升和下降将颠倒。是。对于手动按下的按钮检测,您的代码应该可以工作。
对于某些关键信号检测,边缘和检查之间的间隔可能有意义。是。对于手动按下的按钮检测,您的代码应该可以工作。 对于某些关键信号检测,边缘和检查之间的间隔可能有意义。1。)EXTI设置为EXTI\u触发器\u上升\u下降
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ //interrupt handler
if(GPIO_Pin == GPIO_PIN_4){ //check interrupt for specific pin
if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)){ //check pin state
/* do something */
}
if(!HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)){
/* do something */
}
}
}
或
1.)EXTI设置为EXTI_触发器_上升_下降
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ //interrupt handler
if(GPIO_Pin == GPIO_PIN_4){ //check interrupt for specific pin
if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)){ //check pin state
/* do something */
}
if(!HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)){
/* do something */
}
}
}
或
“检查这个”是什么意思?此外,您应该按照STM32 GPIO/EXTI示例获取帮助,并填写您正在使用的确切代码。如果可以,请同时指定您的平台(处理器、评估板、您放置/焊接的任何扎带/连接等)。在99%的情况下,即没有硬件去抖动的情况下,它将无法工作。您所说的“检查”是什么意思?此外,您应该按照STM32 GPIO/EXTI示例获取帮助,并填写您正在使用的确切代码。如果可以,还请指定您的平台(处理器、评估板、您放置/焊接的任何扎带/连接等)。在99%的情况下,即没有硬件去抖动的情况下,它将无法工作。这并不能提供问题的答案。一旦你有足够的钱,你将能够;相反,这并不能回答这个问题。一旦你有足够的钱,你将能够;相反,这不太可能奏效。按钮不应以这种方式处理。这个问题已经解决了。除非实施了额外的去抖动电路,否则按钮不起作用。我完全实现了这个处理程序并对其进行了测试,来到这里寻求改进,因为它不起作用。它不太可能起作用。按钮不应以这种方式处理。这个问题已经解决了。除非实施了额外的去抖动电路,否则按钮不起作用。我完全实现了这个处理程序并对其进行了测试,来到这里寻求改进,因为它不起作用。