首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAL_GPIO_EXTI_Callback()中的上升和下降触发沿

HAL_GPIO_EXTI_Callback()中的上升和下降触发沿
EN

Stack Overflow用户
提问于 2018-02-09 22:16:48
回答 3查看 8.3K关注 0票数 3

我有一个数字输入GPIO线路,每当它的输入发生变化时,我都需要中断。在STM32CubeMX中,我将此引脚设置为EXTI线路,并将中断设置为在上升沿和下降沿触发。

当响应上升沿或下降沿时,函数HAL_GPIO_EXTI_Callback()被调用时,有没有办法知道是上升沿还是下降沿触发了中断?或者有必要调用HAL_GPIO_ReadPin()来推断这一点?

回调的原型是:

代码语言:javascript
复制
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-10 00:48:51

您将不得不调用HAL_GPIO_ReadPin()

当您在上升沿和下降沿选择中断时,STM32CubeMX实际上会在Rising trigger selection register (EXTI_RTSRx)Falling trigger selection register (EXTI_FTSRx)中设置相应的位。

当中断发生时,该中断线路的Pending register (EXTI_PRx)中只有一位被设置,因此您不知道它是上升沿还是下降沿。

票数 6
EN

Stack Overflow用户

发布于 2018-02-12 14:57:20

是的,我照你说的做了。但是代码不能区分上升沿和下降沿。代码如下:

代码语言:javascript
复制
   void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
    {
      if (GPIO_PIN_SET! = HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_11))
      {// THIS CONNECTION IS ADDED. THEN THE SET TUSUNA CAN BE PERFORMED UP AND UP DOWN PRIOR.
        if (GPIO_Pin == GPIO_PIN_4) // PA4 rising edge or falling edge cut.
        {// Let's say the LCD is inverted. DOWN.
          // if ((GPIO_PIN_RESET == HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5)) && (GPIO_PIN_SET == HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_4)))
          // {

          // A UCU
          if ((GPIO_PIN_RESET == HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5)) && (GPIO_PIN_SET == HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_4))) // While rising edge on PA4.
          {
            //tsHandle.tsButtonVariables.bButton_A_DusenKenar_B_Logic0 = 0;
            tsHandle.tsButtonVariables.bButton_A_YukselenKenar_B_Logic0 = 1;
            //tsHandle.tsButtonVariables.bButton_B_DusenKenar_A_Logic0 = 0;
            //tsHandle.tsButtonVariables.bButton_B_UpdateKenar_A_Logic0 = 0;
          }
          else if ((GPIO_PIN_RESET == HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_5)) && (GPIO_PIN_RESET == HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_4))) // PA4 when the falling edge is occurring.
          {
            tsHandle.tsButtonVariables.bButton_A_DusenKenar_B_Logic0 = 1;
            //tsHandle.tsButtonVariables.bButton_A_YukselenKenar_B_Logic0 = 0;
            //tsHandle.tsButtonVariables.bButton_B_DusenKenar_A_Logic0 = 0;
            //tsHandle.tsButtonVariables.bButton_B_UpdateKenar_A_Logic0 = 0;
          }
          else
          {

          }
     }
票数 0
EN

Stack Overflow用户

发布于 2019-08-23 09:11:07

在HAL_GPIO_EXTI_Callback函数中插入__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48707854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档