<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32中斷管理函數(shù)

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏

          通過以上兩個(gè)函數(shù)就實(shí)現(xiàn)了對(duì) NVIC 的管理和配置。但是外部中斷的設(shè)置,還需要配置相
          關(guān)寄存器才可以。下面就介紹外部中斷的配置和使用。
          STM32 的EXTI 控制器支持19 個(gè)外部中斷/事件請(qǐng)求。每個(gè)中斷設(shè)有狀態(tài)位,每個(gè)中斷/事
          件都有獨(dú)立的觸發(fā)和屏蔽設(shè)置。STM32 的19 個(gè)外部中斷為:
          線 0~15:對(duì)應(yīng)外部IO 口的輸入中斷。
          線 16:連接到PVD 輸出。
          線 17:連接到RTC 鬧鐘事件。
          線 18:連接到USB 喚醒事件。
          對(duì)于外部中斷 EXTI 控制MDK 定義了如下結(jié)構(gòu)體:
          typedef struct
          {
          vu32 IMR;
          vu32 EMR;
          vu32 RTSR;
          vu32 FTSR;
          vu32 SWIER;
          vu32 PR;
          } EXTI_TypeDef;
          通過這些寄存器的設(shè)置,就可以對(duì)外部中斷進(jìn)行詳細(xì)設(shè)置了。下面我們就重點(diǎn)介紹這些寄
          存器的作用。
          IMR:中斷屏蔽寄存器。這是一個(gè)32 寄存器。但是只有前19 位有效。當(dāng)位x 設(shè)置為1 時(shí),
          則開啟這個(gè)線上的中斷,否則關(guān)閉該線上的中斷。
          EMR:事件屏蔽寄存器,同IMR,只是該寄存器是針對(duì)事件的屏蔽和開啟。
          RTSR:上升沿觸發(fā)選擇寄存器。該寄存器同IMR,也是一個(gè)32 為的寄存器,只有前19
          位有效。位x 對(duì)應(yīng)線x 上的上升沿觸發(fā),如果設(shè)置為1,則是允許上升沿觸發(fā)中斷/事件。否則,
          不允許。
          FTSR:下降沿觸發(fā)選擇寄存器。同PTSR,不過這個(gè)寄存器是設(shè)置下降沿的。下降沿和上
          升沿可以被同時(shí)設(shè)置,這樣就變成了任意電平觸發(fā)了。
          SWIER:軟件中斷事件寄存器。通過向該寄存器的位x 寫入1,在未設(shè)置IMR 和EMR 的
          時(shí)候,將設(shè)置PR 中相應(yīng)位掛起。如果設(shè)置了IMR 和EMR 時(shí)將產(chǎn)生一次中斷。被設(shè)置的SWIER
          位,將會(huì)在PR 中的對(duì)應(yīng)位清除后清除。
          PR:掛起寄存器。當(dāng)外部中斷線上發(fā)生了選擇的邊沿事件,該寄存器的對(duì)應(yīng)位會(huì)被置為1。
          0,表示對(duì)應(yīng)線上沒有發(fā)生觸發(fā)請(qǐng)求。通過向該寄存器的對(duì)應(yīng)位寫入1 可以清除該位。在中斷服
          務(wù)函數(shù)里面經(jīng)常會(huì)要向該寄存器的對(duì)應(yīng)位寫1 來(lái)清除中斷請(qǐng)求。
          以上就是與中斷相關(guān)寄存器的介紹,更詳細(xì)的介紹,請(qǐng)參考《STM32 參考手冊(cè)》第95 頁(yè),
          8.3 節(jié)EXTI 寄存器描述這一章。
          通過以上配置就可以正常設(shè)置外部中斷了,但是外部 IO 口的中斷,還需要一個(gè)寄存器配
          置,也就是IO 復(fù)用里的外部中斷配置寄存器EXTICR。這是因?yàn)镾TM32 任何一個(gè)IO 口都可
          以配置成中斷輸入口,但是IO 口的數(shù)目遠(yuǎn)大于中斷線數(shù)(16 個(gè))。于是STM32 就這樣設(shè)計(jì),
          GPIOA~GPIOG 的[15:0]分別對(duì)應(yīng)中斷線15~0。這樣每個(gè)中斷線對(duì)應(yīng)了最多7 個(gè)IO 口,以線0
          為例:它對(duì)應(yīng)了GPIOA.0、PIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。而
          中斷線每次只能連接到1 個(gè)IO 口上,這樣就需要EXTICR來(lái)決定對(duì)應(yīng)的中斷線配置到哪個(gè)GPIO
          上了。
          EXTICR 在AFIO 的結(jié)構(gòu)體中定義,如下:
          typedef struct
          {
          vu32 EVCR;
          vu32 MAPR;
          vu32 EXTICR[4];
          } AFIO_TypeDef;
          EXTICR 寄存器組,總共有4 個(gè),因?yàn)榫幾g器的寄存器組都是從0 開始編號(hào)的,所以
          EXTICR[0]~ EXTICR[3],對(duì)應(yīng)《STM32 參考手冊(cè)》里的EXTICR1~ EXTICR 4。每個(gè)EXTICR
          只用了其低16 位。EXTICR[0]的分配如下:

          比如如我要設(shè)置 GPIOB.1 映射到1,則只要設(shè)置EXTICR[0]的bit[7:4]為0001 即可。默認(rèn)
          都是0000 即映射到GPIOA。從圖5.7 中可以看出,EXTICR[0]只管了GPIO 的0~3 端口,相應(yīng)
          的其他端口由EXTICR[1~3]管理。具體請(qǐng)參考《STM32 參考手冊(cè)》第126~128 頁(yè)。
          通過對(duì)上面的分析我們就可以完成對(duì)外部中斷的配置了。該函數(shù)為 Ex_NVIC_Config,該
          函數(shù)有3 個(gè)參數(shù):GPIOx 為GPIOA~G(0~6),在sys.h 里面有定義。代表要配置的IO 口。BITx
          則代表這個(gè)IO 口的第幾位。TRIM 為觸發(fā)方式,低2 位有效(0x01 代表下降觸發(fā);0x02 代表
          上升沿觸發(fā);0x03 代表任意電平觸發(fā))。其代碼如下:
          //外部中斷配置函數(shù)
          //只針對(duì)GPIOA~G;不包括PVD,RTC 和USB 喚醒這三個(gè)
          //參數(shù):GPIOx:0~6,代表GPIOA~G;BITx:需要使能的位;TRIM:觸發(fā)模式,1,下升沿;2,上
          降沿;3,任意電平觸發(fā)
          //該函數(shù)一次只能配置1 個(gè)IO 口,多個(gè)IO 口,需多次調(diào)用
          //該函數(shù)會(huì)自動(dòng)開啟對(duì)應(yīng)中斷,以及屏蔽線
          void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM)
          {
          u8 EXTADDR;
          u8 EXTOFFSET;
          EXTADDR=BITx/4;//得到中斷寄存器組的編號(hào)
          EXTOFFSET=(BITx%4)*4;
          RCC->APB2ENR|=0x01;//使能io 復(fù)用時(shí)鐘
          AFIO->EXTICR[EXTADDR]|=GPIOx<//自動(dòng)設(shè)置
          EXTI->IMR|=1<EXTI->EMR|=1<if(TRIM&0x01)EXTI->FTSR|=1<if(TRIM&0x02)EXTI->RTSR|=1<}
          Ex_NVIC_Config 完全是按照我們之前的分析來(lái)編寫的,首先根據(jù)GPIOx 的位得到中斷寄
          存器組的編號(hào),即EXTICR 的編號(hào),在EXTICR 里面配置中斷線應(yīng)該配置到GPIOx 的哪個(gè)位。
          然后使能該位的中斷及事件,最后配置觸發(fā)方式。這樣就完成了外部中斷的的配置了。從代碼
          中可以看到該函數(shù)默認(rèn)是開啟中斷和事件的。其次還要注意的一點(diǎn)就是該函數(shù)一次只能配置一
          個(gè)IO 口,如果你有多個(gè)IO 口需要配置,則多次調(diào)用這個(gè)函數(shù)就可以了。
          至此,我們對(duì) STM32 的中斷管理就介紹結(jié)束了。當(dāng)然還有中斷響應(yīng)函數(shù),我們這里沒有
          介紹,這個(gè)在后面的實(shí)例中會(huì)向各位講述的。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: STM32中斷管理函

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();