我是靠谱客的博主 害怕火,最近开发中收集的这篇文章主要介绍读不到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);

最后

以上就是害怕火为你收集整理的读不到gpio引脚电平的变化(外部中断上升沿触发,中断触发了)的全部内容,希望文章能够帮你解决读不到gpio引脚电平的变化(外部中断上升沿触发,中断触发了)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部