外部中断0(含知识点)
生活随笔
收集整理的這篇文章主要介紹了
外部中断0(含知识点)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 #include "stm32f10x.h" // 相當(dāng)于51單片機(jī)中的 #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 //結(jié)構(gòu)體
21 a.GPIO_Speed=GPIO_Speed_50MHz;
22 a.GPIO_Pin=GPIO_Pin_5;
23 //推挽輸出
24 a.GPIO_Mode=GPIO_Mode_Out_PP;
25 //調(diào)用GPIO初始化函數(shù)
26 GPIO_Init(GPIOB,&a);
27 /***************************************************************/
28
29
30 /*
31 *外部中斷配置
32 *總結(jié):
33 *1、定義一個(gè)結(jié)構(gòu)體
34 *2、四個(gè)內(nèi)容(選擇路線、線路模式、觸發(fā)方式、使能)
35 *3、調(diào)用一個(gè)函數(shù)
36 */
37 EXTI_InitTypeDef c;
38 /*
39 *選擇了待使能或失能的外部路線(0——18可選)
40 */
41 c.EXTI_Line=EXTI_Line0;//外部路線0
42 /*
43 *設(shè)置了被使能線路的模式
44 *設(shè)置為事件:EXTI_Mode_Event
45 *設(shè)置為中斷:EXTI_Mode_Interrupt
46 */
47 c.EXTI_Mode=EXTI_Mode_Interrupt;//中斷模式
48 /*
49 設(shè)置了被使能線路的觸發(fā)邊沿
50 EXTI_Trigger_Falling下降沿為中斷請求
51 EXTI_Trigger_Rising 上升沿為中斷請求
52 EXTI_Trigger_Rising_Falling上升沿和下降沿為中斷請求
53 */
54 c.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿為中斷請求
55 /*
56 *用來定義選中線路的新狀態(tài)
57 *它可以被設(shè)為ENABLE或者DISABLE
58 */
59 c.EXTI_LineCmd=ENABLE;//使能
60 /*外部中斷初始化函數(shù)
61 *功能:根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器。
62 *指向結(jié)構(gòu)體EXTI_InitTypeDef的指針
63 */
64 EXTI_Init(&c);//指向結(jié)構(gòu)體EXTI_InitTypeDef的指針a
65 /***************************************************************************/
66 /*NVIC嵌套向量中斷控制器*/
67 /*
68 *1
69 *優(yōu)先級分組:先占優(yōu)先級和重優(yōu)先級
70 *輸入?yún)?shù):
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初始化結(jié)構(gòu)體
80 */
81 NVIC_InitTypeDef b;
82 /*
83 *中斷源
84 *用于使能或者失能指定的IRQ通道
85 *參數(shù):
86 *(詳細(xì)參數(shù)請看最后截圖一..............)
87 */
88 b.NVIC_IRQChannel = EXTI0_IRQn;//EXTI0_IRQn外部中斷線0中斷
89 //搶占優(yōu)先級
90 /*
91 *該參數(shù)設(shè)置成員NVIC_IRQChannel中的搶占優(yōu)先級
92 *(詳細(xì)參數(shù)請看最后截圖二..............)
93 */
94 b.NVIC_IRQChannelPreemptionPriority = 1;//0 1 2 3 4
95 //子優(yōu)先級
96 /*
97 *該參數(shù)設(shè)置成員NVIC_IRQChannel中的從占優(yōu)先級
98 *(詳細(xì)參數(shù)請看最后截圖二..............)
99 */
100 b.NVIC_IRQChannelSubPriority = 1;//0 1 2 3 4
101 //使能
102 /*
103 *指定了在成員NVIC_IRQChannel中定義的IRQ通道被使能還是失能
104 *參數(shù):ENABLE或者DISABLE
105 */
106 b.NVIC_IRQChannelCmd = ENABLE;
107
108 /*
109 *3、NVIC初始化函數(shù)
110 *功能:根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)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 //確保是否產(chǎn)生EXTI line中斷
121 if(EXTI_GetITStatus(EXTI_Line0)!=RESET) // 檢查指定的EXTI線路觸發(fā)請求發(fā)生與否
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 }
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/kinson/p/7694116.html
總結(jié)
以上是生活随笔為你收集整理的外部中断0(含知识点)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何离线安装chrome插件
- 下一篇: Web App 和 Native App