ARM Cortex M3共有256個(gè)中斷。
STM32F103CB共有43個(gè)外部中斷和16個(gè)內(nèi)部中斷。
具有相同數(shù)值編號(hào)的IO口被分配為同一組,共用一條中斷請(qǐng)求線(xiàn),如下圖:
所以共有15條中斷線(xiàn),另外
●EXTI線(xiàn)16連接到PVD輸出
●EXTI線(xiàn)17連接到RTC鬧鐘事件
●EXTI線(xiàn)18連接到USB喚醒事件
寄存器:1、外部中斷配置寄存器 AFIO_EXTxCR1------->用于選擇輸入中斷源 Pin 0..3
AFIO_EXTxCR2------->用于選擇輸入中斷源 Pin 0..7
AFIO_EXTxCR2------->用于選擇輸入中斷源 Pin 8..11
AFIO_EXTxCR2------->用于選擇輸入中斷源 Pin 12..15
(說(shuō)明:5個(gè)端口PORTA..E,每個(gè)端口各有16位可供選擇)
2、中斷屏蔽寄存器 EXTI_IMR----------->屏蔽線(xiàn)上的中斷請(qǐng)求 共19路
3、事件屏蔽寄存器 EXTI_EMR----------->屏蔽線(xiàn)上的事件 共19路
4、上升沿觸發(fā)選擇寄存器 EXTI_RTSR---------->設(shè)置相應(yīng)線(xiàn)為上升沿觸發(fā) 19位
5、下降沿觸發(fā)選擇寄存器 EXTI_FTSR---------->設(shè)置相應(yīng)線(xiàn)為上升沿觸發(fā) 19位
6、掛起寄存器 EXTI_PR------------>中斷線(xiàn)上發(fā)生了選擇的邊沿事件時(shí)置1 19位
7、軟件中斷事件寄存器 EXTI_SWIER--------->寫(xiě)該位可以將EXTI_PR中相應(yīng)的位值高,如果EXTI_IMR或EXTI_EMR使能,則可以產(chǎn)生相應(yīng)的中斷
配置流程:中斷在使用前必須對(duì)中斷線(xiàn)進(jìn)行配置并激活
1、配置相應(yīng)的IO口為輸入,浮空輸入時(shí)一定要加上拉或者是下拉
2、開(kāi)啟IO口復(fù)用時(shí)鐘,設(shè)置IO與中斷線(xiàn)的映射關(guān)系---->AFIO_EXTxCR1
3、設(shè)置相應(yīng)中斷觸發(fā)條件---------->EXTI_IMR、EXTI_RTSR、EXTI_FTSR
4、在NVIC中開(kāi)啟并使能中斷,對(duì)中斷分組進(jìn)行配置
5、編寫(xiě)中斷服務(wù)函數(shù)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------>
編寫(xiě)中斷程序的步驟:(庫(kù)函數(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)先級(jí)配置。
中斷配置:結(jié)構(gòu)體:EXTI_InitTypeDef 。清空中斷線(xiàn)、中斷線(xiàn)映射CPU、中斷線(xiàn)選擇、中斷模式、觸發(fā)方式、使能。
優(yōu)先級(jí)配置:結(jié)構(gòu)體:NVIC_InitTypeDef。選組、選擇IRQ通道、設(shè)置搶占優(yōu)先級(jí)、設(shè)置從優(yōu)先級(jí)、使能。
EG: EXTI_Configuration() 和 NVIC_Configuration()
分組情況:
優(yōu)先級(jí)組別 | 搶占式優(yōu)先級(jí) | 副優(yōu)先級(jí) |
4 | 4位/16級(jí) | 0位/0級(jí) |
3 | 3位/8級(jí) | 1位/2級(jí) |
2 | 2位/4級(jí) | 2位/4級(jí) |
1 | 1位/2級(jí) | 3位/8級(jí) |
0 | 0位/0級(jí) | 4位/6級(jí) |
4.中斷服務(wù)程序。比如0號(hào)中斷線(xiàn)對(duì)應(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); //清空中斷線(xiàn)
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; //選擇中斷線(xiàn)
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)先級(jí)設(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)先級(jí)設(shè)置
62 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //次優(yōu)先級(jí)設(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





- 熱門(mén)資源推薦
- 熱門(mén)放大器推薦
-
【Follow me第三季第1期】任務(wù)三:Arduino環(huán)境運(yùn)動(dòng)傳感器數(shù)據(jù)讀取
-
【Follow me 第三季第1期】任務(wù)二——Arduino控制板載LED燈,并實(shí)現(xiàn)呼吸燈效果
-
【Follow me 第三季第1期】任務(wù)一 源碼-——Arduino環(huán)境Hello EEWorld
-
Follow me第三季第1期STM32F429作品代碼
-
嵌入式硬件設(shè)計(jì)
-
小波理論:淺談應(yīng)用
-
電磁場(chǎng)及天線(xiàn)原理基礎(chǔ)
-
Unix操作系統(tǒng)設(shè)計(jì)
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 【下載】LAT1526 利用SPI的下溢實(shí)現(xiàn)回顯功能
- 【下載】LAT1509 STM32G0B1的FDCAN進(jìn)行通信丟包和多包案例分享
- 【下載】LAT1511 運(yùn)行Ux_Host_HUB_HID_MSC通過(guò)Hub連接U盤(pán)讀寫(xiě)不穩(wěn)定問(wèn)題分析
- 【下載】LAT1466 USB x Device HID Standalone的移植
- 【下載】LAT1488 STM32 USBxDevice MSC standalone移植示例
- 【下載】LAT1482 STM32G0單線(xiàn)串口通信幀錯(cuò)誤問(wèn)題解析
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線(xiàn) 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線(xiàn)微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- DER-20 - 60W DC-DC電源
- 使用 Analog Devices 的 LT1977 的參考設(shè)計(jì)
- DC1941C,使用 LTC6820 isoSPI 2 線(xiàn)串行接口的演示板
- 用于完整 3V、12 位、1MHz 模數(shù)轉(zhuǎn)換系統(tǒng)的 AD8601ARTZ-REEL 運(yùn)算放大器的典型應(yīng)用
- IS31AP4991 1.2W AB類(lèi)音頻功率放大器的典型應(yīng)用(單端輸入)
- SY89311U,用于 GB 以太網(wǎng)交換機(jī)的時(shí)鐘緩沖器的評(píng)估板
- 使用 ON Semiconductor 的 STK402-090 的參考設(shè)計(jì)
- 具有內(nèi)置診斷功能的 TDA7563BH 4 x 50W 多功能四路功率放大器的典型應(yīng)用電路
- 使用 Analog Devices 的 AD815 的參考設(shè)計(jì)
- 使用 ON Semiconductor 的 KA7805AE 的參考設(shè)計(jì)
- 仿真看世界之SiC MOSFET單管的并聯(lián)均流特性
- 蘋(píng)果iOS 15系統(tǒng)采用率已經(jīng)近60%,升級(jí)速度慢于iOS 14
- iPhone 14共四款機(jī)型:立訊拿下高端代工
- Car2 Cloud 驅(qū)動(dòng)未來(lái)——利用數(shù)據(jù)存儲(chǔ)驅(qū)動(dòng)汽車(chē)行業(yè)升級(jí)和城市發(fā)展
- C語(yǔ)言_單片機(jī)_break,return,continue,指針優(yōu)先級(jí)
- 德國(guó)政府已同意立法草案,旨在通過(guò)提高效率大幅降低其能源使用
- 滑環(huán)電機(jī)怎么使用變頻器控制
- 上汽大眾:汽車(chē)網(wǎng)絡(luò)安全漏洞防護(hù)
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級(jí)新型固態(tài)電池生產(chǎn)線(xiàn)樣件下線(xiàn)
- 總投資455億元!三大動(dòng)力電池項(xiàng)目齊刷進(jìn)度條
- 現(xiàn)代汽車(chē)韓國(guó)建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車(chē)芯片、第三代半導(dǎo)體、機(jī)器人成資本焦點(diǎn)
- 艙駕一體“點(diǎn)燃”新戰(zhàn)事
- 汽車(chē)智能化2.0引爆「萬(wàn)億蛋糕」,誰(shuí)在改寫(xiě)游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會(huì)成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話(huà)會(huì)議時(shí)間安排
- 普通信發(fā)明恒溫晶體振蕩器 給市場(chǎng)提供更多選擇
- stm32的推挽輸出與開(kāi)漏輸出
- keil C51使用串口時(shí)程序跑死的問(wèn)題
- STM32推挽輸出和開(kāi)漏輸出的區(qū)別
- STM32GPIO推挽模式注意
- 無(wú)動(dòng)力滾筒線(xiàn)設(shè)計(jì)不可錯(cuò)過(guò)的五大技術(shù)要點(diǎn)!
- 交流電機(jī)的分類(lèi)
- 微型電機(jī)聯(lián)軸器的作用及用途
- TCL推出阿爾卡特3C:千元全面屏新機(jī)
- iFixit手動(dòng)換iPhone電池修理套裝降價(jià):最高29美元