STM32F072_PB1无法进入中断

2019-07-14 15:02发布

我的板子使用STM32F072C8, USB电路如图,因为USB只用来充电,所以我想直接用PB1来检测USB是否连接电脑或者充电器,配置好IO口中断线等,可是程序无法中断,读取PB1的状态位也正常,在USB连接时为1,USB无连接时为0。配置代码如下:
void USB_CHECK_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXti_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        
        /* enable the GPIO Clock */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
               
        /* Configure GPIO */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        /* enable SYSCFG Clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);        
        /* Connect EXTI Line to GPIO Pin */
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource1);
        
        /* Configure EXTI Line */
        EXTI_InitStructure.EXTI_Line = EXTI_Line1;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
        
        /* Enable and set EXTI Interrupt to the lowest priority */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        
        NVIC_Init(&NVIC_InitStructure);
        
}

void EXTI0_1_IRQHandler(void)
{
        //清除中断标志位等其它操作......        

        if (EXTI_GetITStatus(EXTI_Line1)!=RESET)
        {
                //Deal
               
                EXTI_ClearITPendingBit(EXTI_Line1);
        }
        
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
zhouxk
1楼-- · 2019-07-14 20:05
本帖最后由 toofree 于 2018-5-15 12:38 编辑

我想问,你是通过USB供电的吗?
如果是的话,PB1上升沿来的时候,MCU还没有启动呢,自然不会在中断。
或许原理这是这样的,但是仅凭目前的描述,不知道是怎么连的
vyewrewr
2楼-- · 2019-07-15 00:55
 精彩回答 2  元偷偷看……
ctwewer
3楼-- · 2019-07-15 02:29
R16和R17的分压加上GPIOB1的下拉(GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;),
中断输入点满足不了TTL电平变化的中断要求
cknz
4楼-- · 2019-07-15 07:55
你的:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
例程:
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
梅子74
5楼-- · 2019-07-15 11:35
山川1998 发表于 2018-12-24 13:52
也就是你轮训可以中断不行?
看了看
1it里面消抖检查下

现在整个系统只运行了这个usb中断的测试程序
梅子74
6楼-- · 2019-07-15 15:53
山川1998 发表于 2018-12-24 13:52
也就是你轮训可以中断不行?
看了看
1it里面消抖检查下

现在整个系统只运行了这个usb中断的测试程序

一周热门 更多>