1 #include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h> 2 #include "stm32f10x_gpio.h" 3 #include "stm32f10x_exti.h" 4 #include "misc.h" 5 6 /*外部中断配置*/ 7 8 9 int main(void) 10 { 11 /***************************************************************/ 12 13 //EXTI_InitTypeDef定义于stm32f10x_exti.h 14 15 16 /*GPIO配置*/ 17 //step1:使能 18 GPIO_InitTypeDef a; 19 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 20 //结构体 21 a.GPIO_Speed=GPIO_Speed_50MHz; 22 a.GPIO_Pin=GPIO_Pin_5; 23 //推挽输出 24 a.GPIO_Mode=GPIO_Mode_Out_PP; 25 //调用GPIO初始化函数 26 GPIO_Init(GPIOB,&a); 27 /***************************************************************/ 28 29 30 /* 31 *外部中断配置 32 *总结: 33 *1、定义一个结构体 34 *2、四个内容(选择路线、线路模式、触发方式、使能) 35 *3、调用一个函数 36 */ 37 EXTI_InitTypeDef c; 38 /* 39 *选择了待使能或失能的外部路线(0——18可选) 40 */ 41 c.EXTI_Line=EXTI_Line0;//外部路线0 42 /* 43 *设置了被使能线路的模式 44 *设置为事件:EXTI_Mode_Event 45 *设置为中断:EXTI_Mode_Interrupt 46 */ 47 c.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式 48 /* 49 设置了被使能线路的触发边沿 50 EXTI_Trigger_Falling下降沿为中断请求 51 EXTI_Trigger_Rising 上升沿为中断请求 52 EXTI_Trigger_Rising_Falling上升沿和下降沿为中断请求 53 */ 54 c.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿为中断请求 55 /* 56 *用来定义选中线路的新状态 57 *它可以被设为ENABLE或者DISABLE 58 */ 59 c.EXTI_LineCmd=ENABLE;//使能 60 /*外部中断初始化函数 61 *功能:根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器。 62 *指向结构体EXTI_InitTypeDef的指针 63 */ 64 EXTI_Init(&c);//指向结构体EXTI_InitTypeDef的指针a 65 /***************************************************************************/ 66 /*NVIC嵌套向量中断控制器*/ 67 /* 68 *1 69 *优先级分组:先占优先级和重优先级 70 *输入参数: 71 *NVIC_PriorityGroup_0 72 *NVIC_PriorityGroup_1 73 *NVIC_PriorityGroup_2 74 *NVIC_PriorityGroup_3 75 *NVIC_PriorityGroup_4 76 */ 77 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 78 /* 79 *2、NVIC初始化结构体 80 */ 81 NVIC_InitTypeDef b; 82 /* 83 *中断源 84 *用于使能或者失能指定的IRQ通道 85 *参数: 86 *(详细参数请看最后截图一..............) 87 */ 88 b.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0_IRQn外部中断线0中断 89 //抢占优先级 90 /* 91 *该参数设置成员NVIC_IRQChannel中的抢占优先级 92 *(详细参数请看最后截图二..............) 93 */ 94 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4 95 //子优先级 96 /* 97 *该参数设置成员NVIC_IRQChannel中的从占优先级 98 *(详细参数请看最后截图二..............) 99 */ 100 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4 101 //使能 102 /* 103 *指定了在成员NVIC_IRQChannel中定义的IRQ通道被使能还是失能 104 *参数:ENABLE或者DISABLE 105 */ 106 b.NVIC_IRQChannelCmd = ENABLE; 107 108 /* 109 *3、NVIC初始化函数 110 *功能:根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器。 111 */ 112 NVIC_Init(&b); 113 /**********************************************************************/ 114 115 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);//选择GPIO管脚用作外部中断线路 116 117 } 118 void EXTI0_IRQHandler(void) 119 { 120 //确保是否产生EXTI line中断 121 if(EXTI_GetITStatus(EXTI_Line0)!=RESET) // 检查指定的EXTI线路触发请求发生与否 122 { 123 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==0)// 124 { 125 GPIO_SetBits(GPIOB,GPIO_Pin_5); 126 } 127 else 128 { 129 GPIO_ResetBits(GPIOB,GPIO_Pin_5); 130 } 131 EXTI_ClearITPendingBit(EXTI_Line0); 132 } 133 134 }