ARM Cortex M3共有256個(gè)中斷。
STM32F103CB共有43個(gè)外部中斷和16個(gè)內(nèi)部中斷。
具有相同數(shù)值編號的IO口被分配為同一組,共用一條中斷請求線,如下圖:
所以共有15條中斷線,另外
●EXTI線16連接到PVD輸出
●EXTI線17連接到RTC鬧鐘事件
●EXTI線18連接到USB喚醒事件
寄存器:1、外部中斷配置寄存器 AFIO_EXTxCR1------->用于選擇輸入中斷源 Pin 0..3
AFIO_EXTxCR2------->用于選擇輸入中斷源 Pin 0..7
AFIO_EXTxCR2------->用于選擇輸入中斷源 Pin 8..11
AFIO_EXTxCR2------->用于選擇輸入中斷源 Pin 12..15
(說明:5個(gè)端口PORTA..E,每個(gè)端口各有16位可供選擇)
2、中斷屏蔽寄存器 EXTI_IMR----------->屏蔽線上的中斷請求 共19路
3、事件屏蔽寄存器 EXTI_EMR----------->屏蔽線上的事件 共19路
4、上升沿觸發(fā)選擇寄存器 EXTI_RTSR---------->設(shè)置相應(yīng)線為上升沿觸發(fā) 19位
5、下降沿觸發(fā)選擇寄存器 EXTI_FTSR---------->設(shè)置相應(yīng)線為上升沿觸發(fā) 19位
6、掛起寄存器 EXTI_PR------------>中斷線上發(fā)生了選擇的邊沿事件時(shí)置1 19位
7、軟件中斷事件寄存器 EXTI_SWIER--------->寫該位可以將EXTI_PR中相應(yīng)的位值高,如果EXTI_IMR或EXTI_EMR使能,則可以產(chǎn)生相應(yīng)的中斷
配置流程:中斷在使用前必須對中斷線進(jìn)行配置并激活
1、配置相應(yīng)的IO口為輸入,浮空輸入時(shí)一定要加上拉或者是下拉
2、開啟IO口復(fù)用時(shí)鐘,設(shè)置IO與中斷線的映射關(guān)系---->AFIO_EXTxCR1
3、設(shè)置相應(yīng)中斷觸發(fā)條件---------->EXTI_IMR、EXTI_RTSR、EXTI_FTSR
4、在NVIC中開啟并使能中斷,對中斷分組進(jìn)行配置
5、編寫中斷服務(wù)函數(shù)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------>
編寫中斷程序的步驟:(庫函數(shù)版)
1.初始化系統(tǒng)時(shí)鐘和端口時(shí)鐘,在此需注意設(shè)置完端口時(shí)鐘外還須將端口設(shè)置為功能復(fù)用IO時(shí)鐘。RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)
2.初始化GPIO。
3.中斷配置,包括兩部分(兩個(gè)函數(shù)),中斷配置和中斷優(yōu)先級配置。
中斷配置:結(jié)構(gòu)體:EXTI_InitTypeDef 。清空中斷線、中斷線映射CPU、中斷線選擇、中斷模式、觸發(fā)方式、使能。
優(yōu)先級配置:結(jié)構(gòu)體:NVIC_InitTypeDef。選組、選擇IRQ通道、設(shè)置搶占優(yōu)先級、設(shè)置從優(yōu)先級、使能。
EG: EXTI_Configuration() 和 NVIC_Configuration()
分組情況:
優(yōu)先級組別 | 搶占式優(yōu)先級 | 副優(yōu)先級 |
4 | 4位/16級 | 0位/0級 |
3 | 3位/8級 | 1位/2級 |
2 | 2位/4級 | 2位/4級 |
1 | 1位/2級 | 3位/8級 |
0 | 0位/0級 | 4位/6級 |
4.中斷服務(wù)程序。比如0號中斷線對應(yīng)函數(shù) void EXTI0_IRQHandler(void)
示例:按鍵改變LED的狀態(tài)
1.主要功能是按鍵響應(yīng)中斷從而改變LED的狀態(tài)。
2.按鍵所屬端口:GPIOB,LED所屬端口:GPIOB
3.按鍵管腳:PB0~PB7
4.LED管腳:PB8~PB15
5.PB0~PB5分別依次控制PB8~PB13
1 #include "pbdata.h"
2 #include "led.h"
3 #include "key.h"
4 #include "misc.h"
5 #include "stm32f10x_exti.h"
6
7 void RCC_Configration(void)
8 {
9 SystemInit();
10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
11 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //功能復(fù)用IO時(shí)鐘
12 }
13
14 void GPIO_Configration(void)
15 {
16 GPIO_LED_Configration();
17 GPIO_KEY_Configration();
18 }
19
20 /*
21 *中斷配置*
22 */
23 void EXTI_Configuration(void)
24 {
25 EXTI_InitTypeDef EXTI_InitStructure;
26
27 EXTI_ClearITPendingBit(EXTI_Line0); //清空中斷線
28 EXTI_ClearITPendingBit(EXTI_Line1);
29 EXTI_ClearITPendingBit(EXTI_Line2);
30 EXTI_ClearITPendingBit(EXTI_Line3);
31 EXTI_ClearITPendingBit(EXTI_Line4);
32 EXTI_ClearITPendingBit(EXTI_Line5);
33 EXTI_ClearITPendingBit(EXTI_Line6);
34 EXTI_ClearITPendingBit(EXTI_Line7);
35
36 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);//映射
37 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);
38 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource2);
39 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3);
40 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);
41 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource5);
42 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource6);
43 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
44
45 EXTI_InitStructure.EXTI_Line=EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 | EXTI_Line4 | EXTI_Line5 | EXTI_Line6 | EXTI_Line7; //選擇中斷線
46
47 EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //設(shè)置模式
48 EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //設(shè)置觸發(fā)方式
49 EXTI_InitStructure.EXTI_LineCmd=ENABLE; //使能
50
51 EXTI_Init(&EXTI_InitStructure);
52 }
53
54 void NVIC_Configuration0(void) //優(yōu)先級設(shè)置函數(shù)
55 {
56 NVIC_InitTypeDef NVIC_InitStructure;
57
58 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
59
60 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //選擇IRQ通道
61 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //搶占優(yōu)先級設(shè)置
62 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //次優(yōu)先級設(shè)置
63 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
64 NVIC_Init(&NVIC_InitStructure);
65 }
66
67 void NVIC_Configuration1(void)
68 {
69 NVIC_InitTypeDef NVIC_InitStructure;
70
71 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
72
73 NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
74 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
75 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
76 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
77 NVIC_Init(&NVIC_InitStructure);
78 }
79
80 void NVIC_Configuration2(void)
81 {
82 NVIC_InitTypeDef NVIC_InitStructure;
83
84 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
85
86 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
87 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
88 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
89 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
90 NVIC_Init(&NVIC_InitStructure);
91 }
92
93 void NVIC_Configuration3(void)
94 {
95 NVIC_InitTypeDef NVIC_InitStructure;
96
97 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
98
99 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
100 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
101 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
102 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
103 NVIC_Init(&NVIC_InitStructure);
104 }
105
106 void NVIC_Configuration4(void)
107 {
108 NVIC_InitTypeDef NVIC_InitStructure;
109
110 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
111
112 NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
上一篇:PWM控制led漸變
下一篇:SysTick 定時(shí)器的使用
推薦閱讀最新更新時(shí)間:2025-06-16 03:55





- 熱門資源推薦
- 熱門放大器推薦
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- DER-20 - 60W DC-DC電源
- 使用 Analog Devices 的 LT1977 的參考設(shè)計(jì)
- DC1941C,使用 LTC6820 isoSPI 2 線串行接口的演示板
- 用于完整 3V、12 位、1MHz 模數(shù)轉(zhuǎn)換系統(tǒng)的 AD8601ARTZ-REEL 運(yùn)算放大器的典型應(yīng)用
- IS31AP4991 1.2W AB類音頻功率放大器的典型應(yīng)用(單端輸入)
- SY89311U,用于 GB 以太網(wǎng)交換機(jī)的時(shí)鐘緩沖器的評估板
- 使用 ON Semiconductor 的 STK402-090 的參考設(shè)計(jì)
- 具有內(nèi)置診斷功能的 TDA7563BH 4 x 50W 多功能四路功率放大器的典型應(yīng)用電路
- 使用 Analog Devices 的 AD815 的參考設(shè)計(jì)
- 使用 ON Semiconductor 的 KA7805AE 的參考設(shè)計(jì)
- 上汽大眾:汽車網(wǎng)絡(luò)安全漏洞防護(hù)
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級新型固態(tài)電池生產(chǎn)線樣件下線
- 總投資455億元!三大動(dòng)力電池項(xiàng)目齊刷進(jìn)度條
- 現(xiàn)代汽車韓國建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車芯片、第三代半導(dǎo)體、機(jī)器人成資本焦點(diǎn)
- 艙駕一體“點(diǎn)燃”新戰(zhàn)事
- 汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會(huì)成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話會(huì)議時(shí)間安排
- 國內(nèi)手機(jī)廠商或要復(fù)活“大哥大”:經(jīng)典磚頭造型
- 三星Galaxy Watch 4 Classic渲染視頻解密,360度看細(xì)節(jié)
- 小米翻蓋折疊屏手機(jī)專利獲得授權(quán)
- vivo S10系列線下海報(bào)解密:主打一億像素鏡頭
- 小米CC新機(jī)將在8月發(fā)布
- PPE材料缺貨嚴(yán)重 封測廠恐?jǐn)噫?/a>
- 曠達(dá)科技入股Nexperia, 布局汽車電子產(chǎn)業(yè)鏈
- 中芯國際向中芯長電出售上海測試中心業(yè)務(wù),對價(jià)2000萬美元
- MLCC供需行情分化,原廠持續(xù)看好但代理商并無信心
- 亞系外資:挖礦需求帶動(dòng)臺積電Q1營收,貢獻(xiàn)全年5%營收