|
選擇中斷源(EXTI0~EXTI22選擇其一)
PA0產(chǎn)生上升沿:EXTI0
PE2~4產(chǎn)生下降沿:EXTI2~4
初始化:
1.初始化IO口:之前的按鍵初始化即可
2.模塊時(shí)鐘使能RCC->APB2ENR
IO口映射到相應(yīng)的外部中斷配置器
SYSCFG external interrupt configuration register 1
GPIO口中斷映射到芯片內(nèi)部的IO口配置寄存器->SYSCFG寄存器
例如:配置PE2
RCC->APB2ENR |=0x01<<14;
//選擇中斷源(EXTI2映射到PE)
SYSCFG->EXTICR[0] &=~(0x0f<<8); //EXTICR[0]~EXTICR[3]分別對(duì)應(yīng)寄存器EXTICR1~4
SYSCFG->EXTICR[0] |=(0x04<<8);
映射概念:首先外部中斷的io口都有對(duì)應(yīng)的外部中斷寄存器,以IO口數(shù)字序列編號(hào)
PA0在EXTI0 PB0在EXTI0
其次每個(gè)EXTI都對(duì)應(yīng)一個(gè)四位的外部中斷寄存器。配置見標(biāo)號(hào)8.2.4 EXTI0在EXTICR1的第0~3位
EXTI3在EXTICR1的12~16位、、EXTI4在EXTICR1的0~3位 [中文參考手冊(cè)8.2.1]
(小結(jié):先找引腳再找組)
映射PE2
EXTI2->EXTICR1的8~11位。
SYSCFG->EXTICR[0] |=(0x04<<8);
//注意!EXTICR[0]~EXTICR[3]對(duì)應(yīng)EXTICR1~4,寄存器的寫法跟寄存器編號(hào)不一致
3.選擇邊沿檢測(cè)方式(上升沿檢測(cè),下降沿檢測(cè),雙邊沿檢測(cè))
EXTI->FTSR |=0x01<<2;//下降沿檢測(cè)
FTSR:Falling trigger selection register
EXTI->RTSR &=~(0x01<<2); //上升沿檢測(cè)關(guān)閉
RTSR:Rising trigger selection register
4.屏蔽軟中斷
EXTI->SWIER =0;
Software interrupt event register
5.屏蔽事件
Event mask register
EXTI->EMR =0;
6.模塊級(jí)中斷使能(設(shè)置中斷屏蔽寄存器)
Interrupt mask register
0:屏蔽來自 x 線的中斷請(qǐng)求
1:開放來自 x 線的中斷請(qǐng)求
EXTI->IMR |=0x01<<2;
7.系統(tǒng)級(jí)中斷使能(設(shè)置NVIC)
NVIC_SetPriority(EXTI2_IRQn,NVIC_EncodePriority (7-2, 2,2));
8.編寫中斷服務(wù)函數(shù)(清標(biāo)志:掛起請(qǐng)求寄存器)
EXTI->PR |=0x01<<2;//清標(biāo)志
通過對(duì)中斷狀態(tài)寄存器寫1可以清楚標(biāo)志
STM32F407系列學(xué)習(xí)心得
STM32F407初學(xué)之串口:中斷收發(fā)字符串教程與源碼
http://www.torrancerestoration.com/bbs/dpj-135708-1.html
(出處: 單片機(jī)論壇)
|
評(píng)分
-
查看全部評(píng)分
|