stm32 外部中断

2019-07-21 03:23发布

这是我的外部中断配置
[mw_shl_code=c,true]void VALVE_EXTI_Init()
{
       
        EXTI_InitTypeDef VALVE_EXTI_Initstructure;
        NVIC_InitTypeDef VALVE_NVIC_Initstruccture;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
       
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);
        VALVE_EXTI_Initstructure.EXTI_Line=EXTI_Line5;
        VALVE_EXTI_Initstructure.EXTI_LineCmd=ENABLE;
        VALVE_EXTI_Initstructure.EXTI_Mode=EXTI_Mode_Interrupt;
        VALVE_EXTI_Initstructure.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_Init(&VALVE_EXTI_Initstructure);
       
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource6);
        VALVE_EXTI_Initstructure.EXTI_Line=EXTI_Line6;
        VALVE_EXTI_Initstructure.EXTI_Mode=EXTI_Mode_Interrupt;
        VALVE_EXTI_Initstructure.EXTI_Trigger=EXTI_Trigger_Falling;
        VALVE_EXTI_Initstructure.EXTI_LineCmd=ENABLE;
        EXTI_Init(&VALVE_EXTI_Initstructure);
       
        VALVE_NVIC_Initstruccture.NVIC_IRQChannel=EXTI9_5_IRQn;
        VALVE_NVIC_Initstruccture.NVIC_IRQChannelPreemptionPriority=0x02;
        VALVE_NVIC_Initstruccture.NVIC_IRQChannelSubPriority=0x02;
        VALVE_NVIC_Initstruccture.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&VALVE_NVIC_Initstruccture);
       


       
}

void EXTI9_5IRQHandler(void)
{
               
        if(EXTI_GetFlagStatus(EXTI_Line5) !=RESET)
        {
                if(VALVE_IS_OPEN())
                {
                        VALVE_STOP();
                }
               
                EXTI_ClearFlag(EXTI_Line5);
        }
        if(EXTI_GetFlagStatus(EXTI_Line6) !=RESET)
        {
                if(VALVE_IS_CLOSE())
                {
                        VALVE_STOP();
                }
               
               
                EXTI_ClearFlag(EXTI_Line6);
        }
}

int main(void)
{       
        valve_Init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        VALVE_EXTI_Init();
        VALVE_OPEN();
               
}
[/mw_shl_code]


大概的意思是  触发中断后就电机停下来,但是 当触发外部按键时,,并没有触发中断
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
Changewind
1楼-- · 2019-07-21 05:34
yyclown 发表于 2019-4-7 22:45
这个是我的初始化和主函数代码,,不知道是忽略了什么。 请指教

IO 初始化的PB5和PB6,中断用的PE5和PE6。不知道是不是这个原因。
yyclown
2楼-- · 2019-07-21 10:10
[mw_shl_code=c,true]void valve_Init()
{
                GPIO_InitTypeDef GPIO_Valve_InitInstructure;
                GPIO_InitTypeDef GPIO_test_valve_Initstructure;  
       
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
                GPIO_DeInit(GPIOB);
                delay_init();
                GPIO_Valve_InitInstructure.GPIO_Mode=GPIO_Mode_Out_PP;
                GPIO_Valve_InitInstructure.GPIO_Pin=GPIO_Pin_9;
                GPIO_Valve_InitInstructure.GPIO_Speed=GPIO_Speed_50MHz;
                GPIO_Init(GPIOB,&GPIO_Valve_InitInstructure);
               
                GPIO_Valve_InitInstructure.GPIO_Mode=GPIO_Mode_Out_PP;
                GPIO_Valve_InitInstructure.GPIO_Pin=GPIO_Pin_7;
                GPIO_Valve_InitInstructure.GPIO_Speed=GPIO_Speed_50MHz;
                GPIO_Init(GPIOB,&GPIO_Valve_InitInstructure);
       
                GPIO_Valve_InitInstructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
                GPIO_Valve_InitInstructure.GPIO_Pin=GPIO_Pin_6;
                GPIO_Init(GPIOB,&GPIO_Valve_InitInstructure);
               
                GPIO_Valve_InitInstructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
                GPIO_Valve_InitInstructure.GPIO_Pin=GPIO_Pin_5;
                GPIO_Init(GPIOB,&GPIO_Valve_InitInstructure);
               
               
               
}
[/mw_shl_code]
yyclown
3楼-- · 2019-07-21 12:47
 精彩回答 2  元偷偷看……
yyclown
4楼-- · 2019-07-21 14:02
Changewind 发表于 2019-4-7 23:59
IO 初始化的PB5和PB6,中断用的PE5和PE6。不知道是不是这个原因。

您好,那个地方确实是我的失误,但是更改之后,中断还是不能被触发
yyclown
5楼-- · 2019-07-21 19:20
找到原因了,是因为用的战舰V3的开发板,引脚不能当普通IO口

一周热门 更多>