1 #include 'stm32f10x.h' // 相当于51单片机中的 #include
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 }