hpdell 发表于 2017-11-27 16:00:37

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

请教下,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;
               
        }
}













发表于 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);
          
}
页: [1]
查看完整版本: 请教下,stm32L03xx 无法进入外部中断函数 ?