你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下,stm32L03xx 无法进入外部中断函数 ?

[复制链接]
hpdell 提问时间:2017-11-27 16:00 /
请教下,stm32L03xx 无法进入外部中断函数 ?

函数配置如下:
// 使用外部 PB0 作为按键中断输入脚
void KEY_EXTI0_Config(void)
{
  GPIO_InitTypeDef   GPIO_InitStructure;

  __HAL_RCC_GPIOB_CLK_ENABLE();

  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStructure.Pull = GPIO_NOPULL;                 // 外部已经加了上啦电组了
  GPIO_InitStructure.Pin = KEY_INT0_IN_Pin;
  HAL_GPIO_Init(KEY_INT0_IN_GPIO_Port, &GPIO_InitStructure);

  HAL_NVIC_SetPriority(EXTI0_1_IRQn, 4, 0);
  HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
}



void EXTI0_1_IRQHandler(void)       // 当外部按键按下后,程序不会执行到这里来,不知道是什么情况啊 ??????????????
{
//  HAL_GPIO_EXTI_IRQHandler(DECARSTIRQ | KEY_INT0_IN_Pin);
       
          // EXTI line interrupt detected
  if(__HAL_GPIO_EXTI_GET_IT(DECARSTIRQ) != RESET)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(DECARSTIRQ);
    HAL_GPIO_EXTI_Callback(DECARSTIRQ);
  }
       
          // EXTI line interrupt detected
  if(__HAL_GPIO_EXTI_GET_IT(KEY_INT0_IN_Pin) != RESET)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(KEY_INT0_IN_Pin);
    HAL_GPIO_EXTI_Callback(KEY_INT0_IN_Pin);
  }       
       
}





/**
  * @brief EXTI line detection callbacks
  * @param GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
        switch(GPIO_Pin)
        {
                case DW1000_DECAIRQ:
                        printf("dwm1000 - pa3 int\r\n");
                 break;
               
                case DECARSTIRQ:
                        printf("dwm1000 - pa1 rstint\r\n");
                 break;               
               
                case KEY_INT0_IN_Pin:
                SetExtiState();
                printf("KEY_INT0_IN_Pin key sos alarm \r\n");
                 break;       

                default:break;
               
        }
}













收藏 评论4 发布时间:2017-11-27 16:00

举报

4个回答
废鱼 回答时间:2017-11-27 16:57:15
楼主只配置了IO口,没有配置exit。
hpdell 回答时间:2017-11-27 17:13:25
安 发表于 2017-11-27 16:57
楼主只配置了IO口,没有配置exit。

你好,

下面的两行就是配置中断的啊

  HAL_NVIC_SetPriority(EXTI0_1_IRQn, 4, 0);
  HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);


这个是 hal 苦的,不是标准库啊,
官方的历程也是这么配置的
废鱼 回答时间:2017-11-28 14:33:27
我看了HAL的例程,配置差不都。楼主配置的是下降沿,需要拉低才会产生。
hpdell 回答时间:2017-11-28 15:57:27
安 发表于 2017-11-28 14:33
我看了HAL的例程,配置差不都。楼主配置的是下降沿,需要拉低才会产生。

终于搞定了,在配置前 必须先禁止中断,

void KEY_EXTI0_Config(void)
{
  GPIO_InitTypeDef   GPIO_InitStructure;

  __HAL_RCC_GPIOB_CLK_ENABLE();

        HAL_NVIC_DisableIRQ(EXTI0_1_IRQn);   // 配置前先禁止,因为在其他地方已经有初始化过了,如果不禁止
                                              // 这次重新再初始化时会失败
       
  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStructure.Pull = GPIO_NOPULL;                 // 外部已经加了上啦电组了
  GPIO_InitStructure.Pin = KEY_INT0_IN_Pin;
  HAL_GPIO_Init(KEY_INT0_IN_GPIO_Port, &GPIO_InitStructure);

        ClearExtiState();
       
  HAL_NVIC_SetPriority(EXTI0_1_IRQn, 4, 0);
       
        __HAL_GPIO_EXTI_CLEAR_IT(KEY_INT0_IN_Pin);
  HAL_NVIC_EnableIRQ(EXTI0_1_IRQn);
          
}

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版