读不到gpio引脚电平的变化(外部中断上升沿触发,中断触发了)

问题:引脚设置为外部中断上升沿触发,中断触发了,但都debug读不到io口电平的变化

1、初始化gpio引脚

void GPIO_Init(void)

{

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;//GPIO_PuPd_DOWN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOF,&GPIO_InitStructure);

}

2、设置外部中断初始化

void EXTIx_Init(void)
{

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource7);

    EXTI_InitStructure.EXTI_Line = EXTI_Line7;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//EXTI_Trigger_Rising;
    
    EXTI_Init(&EXTI_InitStructure);

/// 配置中断分组 4-15
    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;
    NVIC_Init(&NVIC_InitStructure);

//清除中断标志位

EXTI_ClearITPendingBit(EXTI_Line7);

}

3、中断服务函数 

void  EXTI4_15_IRQHandler(void)
{

if((EXTI->PR & EXTI_Line7) != RESET)
    {
        Delay_Ms(1);    
        if(PF7_USB == 0X01)
        {    
            state = sys_usb;
            if(state == sys_off)
            {
                low_power();
            }
        }
        EXTI_ClearITPendingBit(EXTI_Line7);
    }  

}

奇怪的现象,当io口有上升沿变化是,中断函数有触发响应,就都不到该io口电平的变化。

原因:没加上gpio时钟的初始化,加上下面的时钟的初始化后,一切就平安无事了;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF,ENABLE);

你可能感兴趣的:(STM32)