STM32中斷編程三步曲教你弄會中斷設置以及中斷優先級設置


       中斷作為stm32中必不可少的一個功能,其重要性是不言而喻的因此把中斷學習好是根本。

  所以今天就來好好啃一下中斷配置的知識,俗話說:磨刀不誤砍柴工。問題是什么呢?項目中我用到了一個觸摸鍵盤TTP229,結果在測試鍵盤時,不能夠輸入密碼?最終,調試出bug就是由於中斷優先級的影響。

  本項目使用到的是STM32F030C8型號的MCU,我們可以從官方下載到的標准庫文件中的啟動匯編文件中,查看到本型號單片機的外部中斷向量表。(如下圖所示)

  首先,我們了解一下NVIC是什么,在core_cm0.h文件中的標准庫中的NVIC結構體。

  其中,我們一般只用到ISER、ICER、IP這3個寄存器。ISER用於使能中斷,ICER用來清除中斷,IP用來設置中斷優先級。

  其次,我們了解一下中斷優先級,中斷優先級寄存器NVIC_IPRx,本寄存器寬度為8位,原則上每個外部中斷可配置的優先級為0~255,實際上精簡了,只用到了它的高4位。這4位,又被分成了搶占優先級和響應優先級兩組,然后,中斷優先級有分為以下幾種情況:

  1、搶占優先級不同,會涉及到中斷嵌套,搶占優先級高的會優先搶占優先級低的,優先得到執行。(注意:優先級數字越小,優先級越高)

  2、搶占優先級相同,不涉及到中斷嵌套,響應優先級不同,響應優先級高的先響應。(例如:兩個中斷同時響應,這里就會先執行響應優先級高的那個中斷)(注意:優先級數字越小,優先級越高)

  3、搶占優先級和響應優先級都相同,則比較它們的硬件中斷編號,中斷編號越小,優先級越高。(硬件中斷編號從中斷向量表當中查看)

  中斷優先級分組,因為中斷優先級只使用了高4位,所以,中斷優先級的分組分別有以下幾種情況:

  

  最后,總結一下中斷編程的三步曲:

  第一步:使能外設某個中斷,具體由對應的中斷使能位控制。

  (例如:我們使用到GPIO之前必須開啟GPIO端口的時鍾,用到EXTI必須開啟AFIO時鍾)

  第二步:初始化NVIC_InitTypeDef結構體,配置中斷優先級分組,設置搶占優先級和響應優先級,使能中斷請求。

  庫函數:

  NVIC_IRQChannel()設置不同的中斷源,在IRQn_Type IRQn結構體尋找自己對應的中斷源。

  NVIC_IRQChannelPreemptionPriority()設置搶占優先級

  NVIC_IRQChannelCmd() 中斷使能或者取消使能

  第三步:編寫中斷服務函數,在stm32f0xx_it.c文件中,都有一個根據中斷向量表,實現的一個空的中斷服務函數,需要我們自己重新編寫。

 

stm32相關的視頻資料

(stm32直流電機驅動)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

(時鍾系統)
http://www.makeru.com.cn/live/1392_1082.html?s=45051
STM32中斷系統
http://www.makeru.com.cn/live/3523_1745.html?s=45051
STM32可以這樣玩
http://www.makeru.com.cn/live/4034_1460.html?s=45051
分析STM32的的開發方式
http://www.makeru.com.cn/live/3523_1673.html?s=45051


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM