STM32F103CBT6外部中斷應用筆記

測試方式:函數

主芯片:STM32F103CBT6測試

PA1/PB2接鍵盤按鍵spa

PA6/PA4LCDorm

PA1—PA4ip

PB2---PA6ci

按鍵被按下後LCD燈亮it

 

實現步驟:io

-         設置相應時鐘程序

-         設置相應中斷im

-         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();

}

相關文章
相關標籤/搜索