STM32F103CBT6外部中断应用笔记

测试方式:

主芯片:STM32F103CBT6

PA1/PB2接键盘按键

PA6/PA4LCD

PA1—PA4

PB2---PA6

按键被按下后LCD灯亮

 

实现步骤:

-         设置相应时钟

-         设置相应中断

-         IO口初始化

-         把相应的IO口设置成中断线并初始化

-         在选择的中断通道的响应函数中中断函数

 

 

设置相应时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE);

 

设置相应中断

    NVIC_InitTypeDef exti_nvic;

       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

       exti_nvic.NVIC_IRQChannel=EXTI1_IRQn; //选择中断线,中断线必须与中断IO脚对应,

//如果P1作为中断脚就必须使用EXTI1_IRQn,如果P2作为中断脚就必须使用EXTI2_IRQn

       exti_nvic.NVIC_IRQChannelPreemptionPriority=1;

       exti_nvic.NVIC_IRQChannelSubPriority =1;

       exti_nvic.NVIC_IRQChannelCmd=ENABLE;

       NVIC_Init(&exti_nvic);////

      

       exti_nvic.NVIC_IRQChannel=EXTI2_IRQn;

       exti_nvic.NVIC_IRQChannelPreemptionPriority=2;

       exti_nvic.NVIC_IRQChannelSubPriority =2;

       exti_nvic.NVIC_IRQChannelCmd=ENABLE;

       NVIC_Init(&exti_nvic);////

 

初始化IO

GPIO_InitTypeDef int_gpio;

      

       int_gpio.GPIO_Pin=GPIO_Pin_6 | GPIO_Pin_4;

       int_gpio.GPIO_Speed=GPIO_Speed_50MHz;

       int_gpio.GPIO_Mode=GPIO_Mode_Out_OD;

       GPIO_Init(GPIOA,&int_gpio);

       GPIO_WriteBit(GPIOA, GPIO_Pin_6 | GPIO_Pin_4, Bit_SET);

      

       int_gpio.GPIO_Pin=GPIO_Pin_2;

       int_gpio.GPIO_Speed=GPIO_Speed_50MHz;

       int_gpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入

       GPIO_Init(GPIOB,&int_gpio);

      

       int_gpio.GPIO_Pin=GPIO_Pin_1;

       int_gpio.GPIO_Speed=GPIO_Speed_50MHz;

       int_gpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入

       GPIO_Init(GPIOA,&int_gpio);

 

把相应IO设置成中断线并初始化

EXTI_InitTypeDef EXTI_InitStructure;

       //清中断标记

       EXTI_ClearITPendingBit(EXTI_Line1);

       EXTI_ClearITPendingBit(EXTI_Line2);

      

       //选择中断管脚

       GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);

       GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource2);

      

       EXTI_InitStructure.EXTI_Line = EXTI_Line1 | EXTI_Line2;

       EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

       EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//EXTI_Trigger_Rising_Falling;

       EXTI_InitStructure.EXTI_LineCmd = ENABLE;

       EXTI_Init(&EXTI_InitStructure);

 

 

中断服务程序

void EXTI1_IRQHandler(void)   

void EXTI2_IRQHandler(void)   

 

主函数

Main()

{

//设置相应时钟

       EXTI_SetTime();

       //IO口初始化

       EXTI_InitIO();  //先初始化IO

       //设置好相应中断

       EXTI_SetNVIC();

       //设置IO为中断线路

       EXTI_SetIO();

       while();

}

你可能感兴趣的:(中断,stm32)