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

STM32F072_PB1无法进入中断

[复制链接]
wjianmei0311 提问时间:2018-5-15 10:25 /
我的板子使用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);
        }
        
}


微信图片_20180515012528.png
<
收藏 评论12 发布时间:2018-5-15 10:25

举报

12个回答
与龙共舞 回答时间:2018-5-15 10:54:01
也就是你轮训可以中断不行?
看了看
1it里面消抖检查下
2触发模式试试上升下降沿都触发    EXTI_Trigger_Rising
3没有别的1脚在用中断线吧   

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

toofree 回答时间:2018-5-15 12:35:17
本帖最后由 toofree 于 2018-5-15 12:38 编辑

我想问,你是通过USB供电的吗?
如果是的话,PB1上升沿来的时候,MCU还没有启动呢,自然不会在中断。
或许原理这是这样的,但是仅凭目前的描述,不知道是怎么连的

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Angel_YY 回答时间:2018-5-15 13:15:47
可以考虑先用其他管脚供电,让MCU正常工作后,在插入USB线。如果只用USB供电就会发生MCU为启动时上升沿已经过去了。所以无法触发中断,这种情况智能使用查询方式。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-5-15 13:26:35
R16和R17的分压加上GPIOB1的下拉(GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;),
中断输入点满足不了TTL电平变化的中断要求

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

butterflyspring 回答时间:2018-5-15 15:10:44
你的:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
例程:
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wjianmei0311 回答时间:2018-5-15 17:09:38
与龙共舞 发表于 2018-5-15 10:54
也就是你轮训可以中断不行?
看了看
1it里面消抖检查下

现在整个系统只运行了这个usb中断的测试程序
wjianmei0311 回答时间:2018-5-15 17:09:54
与龙共舞 发表于 2018-5-15 10:54
也就是你轮训可以中断不行?
看了看
1it里面消抖检查下

现在整个系统只运行了这个usb中断的测试程序
wjianmei0311 回答时间:2018-5-15 17:11:19
Angel_YY 发表于 2018-5-15 13:15
可以考虑先用其他管脚供电,让MCU正常工作后,在插入USB线。如果只用USB供电就会发生MCU为启动时上升沿已经 ...

有电池供电,是在设备已经正常运行,OLED已经正常显示后,再插入USB的,
wjianmei0311 回答时间:2018-5-15 17:12:17
wenyangzeng 发表于 2018-5-15 13:26
R16和R17的分压加上GPIOB1的下拉(GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;),
中断输入点满足不 ...

这种情况要怎么解决呢?改变分压电阻?
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版