打印

Key2外部中断进入不了

[复制链接]
336|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子学长|  楼主 | 2020-4-26 19:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"stm32f10x.h"

typedef enum {LedR,LedG,LedB,Led1,Led2}Light;
Light light=LedR;



int main(void)
{
        GPIO_InitTypeDef InitLedR;
        GPIO_InitTypeDef InitLedG;
        GPIO_InitTypeDef InitLedB;
        GPIO_InitTypeDef InitLed1;
        GPIO_InitTypeDef InitLed2;
        GPIO_InitTypeDef InitKey1;
        GPIO_InitTypeDef InitKey2;
        
        
        NVIC_InitTypeDef InitKey1NVIC;
        NVIC_InitTypeDef InitKey2NVIC;
        
        
        EXTI_InitTypeDef InitKey1EXTI;
        EXTI_InitTypeDef InitKey2EXTI;
        
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        
        InitKey1NVIC.NVIC_IRQChannel=EXTI0_IRQn;
        InitKey1NVIC.NVIC_IRQChannelPreemptionPriority=0;
        InitKey1NVIC.NVIC_IRQChannelSubPriority=0;
        InitKey1NVIC.NVIC_IRQChannelCmd=ENABLE;
        
        InitKey2NVIC.NVIC_IRQChannel=EXTI15_10_IRQn;
        InitKey2NVIC.NVIC_IRQChannelPreemptionPriority=0;
        InitKey2NVIC.NVIC_IRQChannelSubPriority=0;
        InitKey2NVIC.NVIC_IRQChannelCmd=ENABLE;
        
        
        NVIC_Init(&InitKey1NVIC);
        NVIC_Init(&InitKey2NVIC);
        
        
        InitLedR.GPIO_Mode=GPIO_Mode_Out_PP;
        InitLedR.GPIO_Speed=GPIO_Speed_50MHz;
        InitLedR.GPIO_Pin=GPIO_Pin_5;
        
        InitLedG.GPIO_Mode=GPIO_Mode_Out_PP;
        InitLedG.GPIO_Speed=GPIO_Speed_50MHz;
        InitLedG.GPIO_Pin=GPIO_Pin_0;
        
        InitLedB.GPIO_Mode=GPIO_Mode_Out_PP;
        InitLedB.GPIO_Speed=GPIO_Speed_50MHz;
        InitLedB.GPIO_Pin=GPIO_Pin_1;
        
        InitLed1.GPIO_Mode=GPIO_Mode_Out_PP;
        InitLed1.GPIO_Speed=GPIO_Speed_50MHz;
        InitLed1.GPIO_Pin=GPIO_Pin_7;
        
        InitLed2.GPIO_Mode=GPIO_Mode_Out_PP;
        InitLed2.GPIO_Speed=GPIO_Speed_50MHz;
        InitLed2.GPIO_Pin=GPIO_Pin_8;
        
        InitKey1.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        InitKey1.GPIO_Pin=GPIO_Pin_0;
        
        InitKey2.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        InitKey2.GPIO_Pin=GPIO_Pin_13;
        
        GPIO_Init(GPIOB,&InitLedR);
        GPIO_Init(GPIOB,&InitLedG);
        GPIO_Init(GPIOB,&InitLedB);
        GPIO_Init(GPIOF,&InitLed1);
        GPIO_Init(GPIOF,&InitLed2);
        GPIO_Init(GPIOA,&InitKey1);
        GPIO_Init(GPIOC,&InitKey2);
        
        
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
        
        
        InitKey1EXTI.EXTI_Line=EXTI_Line0;
        InitKey1EXTI.EXTI_Mode=EXTI_Mode_Interrupt;
        InitKey1EXTI.EXTI_Trigger=EXTI_Trigger_Rising;
        InitKey1EXTI.EXTI_LineCmd =ENABLE;
        
        InitKey2EXTI.EXTI_Line=EXTI_Line13;
        InitKey2EXTI.EXTI_Mode=EXTI_Mode_Interrupt;
        InitKey2EXTI.EXTI_Trigger=EXTI_Trigger_Rising;
        InitKey2EXTI.EXTI_LineCmd =ENABLE;
        
        EXTI_Init(&InitKey1EXTI);
        EXTI_Init(&InitKey2EXTI);
        
        GPIO_SetBits(GPIOB,GPIO_Pin_5);
        GPIO_SetBits(GPIOB,GPIO_Pin_0);
        GPIO_SetBits(GPIOB,GPIO_Pin_1);
        GPIO_SetBits(GPIOF,GPIO_Pin_7);
        GPIO_SetBits(GPIOF,GPIO_Pin_8);
        

        while(1)
        {
                        if(light==LedR)
                        {
                                GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
                        }
                        else if(light==LedG)
                        {
                                GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_RESET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
                        }
                        else if(light==LedB)
                        {
                                GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
                        }
                        else if(light==Led1)
                        {
                                GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_RESET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_SET);
                        }
                        else if(light==Led2)
                        {
                                GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_0, Bit_SET);
                                GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_7, Bit_SET);
                                GPIO_WriteBit(GPIOF, GPIO_Pin_8, Bit_RESET);
                        }
        }

}


void EXTI0_IRQHandler()
{
        if( EXTI_GetITStatus(EXTI_Line0)==SET)
        {
                if(light==Led2)
                        light=LedR;
                else if(light<Led2)
                        light++;
               
                EXTI_ClearITPendingBit(EXTI_Line0);
        }
}

void EXTI15_10_IRQHandler()
{
        if( EXTI_GetITStatus(EXTI_Line13)==SET)
        {
                if(light==LedR)
                        light=Led2;
                else if(light>LedR)
                        light--;
               
                EXTI_ClearITPendingBit(EXTI_Line13);
        }
}

使用特权

评论回复

相关帖子

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

本版积分规则

424

主题

447

帖子

1

粉丝