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

请教下,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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版