打印
[STM32F1]

STM32F103RET6,PB4,PB5作为外部中断问题

[复制链接]
3145|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icefox225|  楼主 | 2016-3-22 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
碰到一个好奇怪的问题,PB4,PB5作为外部中断,所有配置PB4和PB5的配置都一样,PB4只要一配置为外部中断,不管上升沿还是下降沿始终进中断。PB5就不会。PB4的JTAG功能已经关闭。
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4 | GPIO_PinSource5);
EXTI_InitStructure.EXTI_Line = EXTI_IMR_MR4;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
   
    EXTI_InitStructure.EXTI_Line = EXTI_IMR_MR5;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

/* Enable the EXTI4 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
   
    /* Enable the EXTI9_5 Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);       

void EXTI4_IRQHandler(void)
{
    CLI();
    if(EXTI_GetITStatus(EXTI_IMR_MR4) != RESET)
    {       
        /* Clear the Key Button EXTI line pending bit */
//        m_u8KeyPress_Flag = ENABLE;
        EXTI_ClearITPendingBit(EXTI_IMR_MR4);
        if ((GPIOB->IDR & GPIO_Pin_4) == (uint32_t)Bit_RESET)
        {
            m_u8KeyReadValue &= ~0x01;
        }
        else
        {
            m_u8KeyReadValue |= 0x01;
        }
    }
    SEI();
}
void EXTI9_5_IRQHandler(void)
{   
    CLI();
    if(EXTI_GetITStatus(EXTI_IMR_MR5) != RESET)
    {       
        /* Clear the Key Button EXTI line pending bit */
        EXTI_ClearITPendingBit(EXTI_IMR_MR5);
        if ((GPIOB->IDR & GPIO_Pin_5) == (uint32_t)Bit_RESET)
        {
            m_u8KeyReadValue &= ~0x02;
        }
        else
        {
            m_u8KeyReadValue |= 0x02;
        }
    }
    SEI();
}
大家看看哪里有问题啊?
沙发
icefox225|  楼主 | 2016-3-22 13:44 | 只看该作者
示波器测量PB4始终为高电平。

使用特权

评论回复
板凳
icefox225|  楼主 | 2016-3-22 14:57 | 只看该作者
GPIOB和AFIO已经都使能了,实在不知道问题所在了,是不是还有哪里忘记设置了,其他管脚的外部中断也是这么设置的都能用的。

使用特权

评论回复
地板
icefox225|  楼主 | 2016-3-22 15:01 | 只看该作者
网上查了下好多人都碰到这个问题了,这不是STM32的一个BUG啊

使用特权

评论回复
5
icefox225|  楼主 | 2016-3-22 16:11 | 只看该作者
怎么没人来参与下呢

使用特权

评论回复
6
Tennasi| | 2016-3-22 21:51 | 只看该作者
建议楼主先用示波器测试一下PB4的输入信号是否正常

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

352

帖子

1

粉丝