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