1. 程式人生 > >STM32學習之路-外部中斷(1)

STM32學習之路-外部中斷(1)

這裡要記錄的有點太多了,有點頭昏腦脹....先來看看吧

所有的GPIO口都有外部中斷的能力,為了使用外部中斷線,埠必須設定成輸入模式.

輸入模式有三種:上拉、下拉、浮空

請看圖:


上拉輸入模式:區別在於沒有輸入訊號的時候預設輸入高電平

下拉輸入模式:區別在於沒有輸入訊號的時候預設輸入低電平

對於浮空輸入模式顧名思義也就是輸入什麼訊號才是什麼訊號,對於浮空輸入要保證有明確的輸入訊號

例子:

(板子:奮鬥V5)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉					
GPIO_Init(GPIOC, &GPIO_InitStructure);
那它連線的是根外部中斷/事件線呢?看看..


很明顯,PAx~PGx是連線在EXTIx上的, 所以上面的例子中PC2口連線的是EXTI2線上.有了接受者,就要有中斷源頭啦

既然我們上面的例子選擇了PC2,在奮鬥V5板上PC2連線的是KEY2. 所以KEY2就是中斷源的觸發器了.

當然,我們需要配置暫存器了


因為截圖的問題,我這裡選擇了這個比較好截的.看看STM32F10X參考手冊就知道了,主要是配置AFIO_EXTICRx暫存器來選擇中斷源

配置方法:GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);就可以將PC2作為外部輸入源了,也就是當KEY1按下去的

時候產生一個跳變時,EXIT2就會檢測到這一跳變併產生中斷.那它又是怎麼檢測到兵產生中斷的呢? 下面


這裡又涉及到了一個概念:中斷和事件. 上面說EXIT線, 也就是中斷/事件線. 那現在我們從概念上理解下中斷和事件

事件:是表示檢測到某一動作(電平邊沿)觸發事件發生了

中斷:有某個事件發生併產生中斷,並跳轉到對應的中斷處理程式中

事件可以觸發中斷,也可以不觸發, 中斷有可能被更優先的中斷遮蔽,事件不會

事件本質上就是一個觸發訊號,是用來觸發特定的外設模組或核心本身(喚醒).
事件只是一個觸發訊號(脈衝),而中斷則是一個固定的電平訊號

這裡作為學習的筆記,我自己就簡單的記錄下吧,萬一那篇文章有天不見了怎麼辦 T T..

先看看藍色的中斷線的路程:

1:訊號進入晶片; 2:檢測電路,由上面兩個暫存器來指定,如果指定是上升沿的話,那輸入訊號要是高電平才能通過,下降沿同理;

3:這裡是個與門,也就是說軟體中斷/時間暫存器可以優先於外部觸發訊號請求一箇中斷/事件請求. 只要在它的響應位置設'1' 它就會不鳥是否外部訊號

與門也會輸出個有效訊號.

4:一箇中斷或事件請求訊號經過編號3的或門後,進入掛起請求暫存器,到此之前,中斷和事件的訊號傳輸通路都是一致的,也就是說,掛起請求暫存器中記錄了外部訊號的電平變化.

外部請求訊號最後經過編號4的與門,NVIC中斷控制器發出一箇中斷請求,如果中斷遮蔽暫存器的對應位為"0",則該請求訊號不能傳輸到與門的另一端,實現了中斷的遮蔽

如果為'1',那就進入NVIC 進行優先順序選擇啦

同理可以理解事件了.這就不說了,晚了睡覺去.下篇繼續..