測試方式:函數
主芯片:STM32F103CBT6測試
PA1/PB2接鍵盤按鍵spa
PA6/PA4接LCDorm
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();
}