找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2786|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

(菜鳥筆記)對(duì)比STC單片機(jī)說(shuō)STM32F1xx的外部中斷

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
   在外部中斷操作過(guò)程中,STM32F引用了‘中斷’和‘事件’兩個(gè)概念,對(duì)于俺這樣的初學(xué)者來(lái)說(shuō),這兩個(gè)概念比較容易產(chǎn)生混淆,其實(shí)對(duì)比STC單片機(jī)類似的過(guò)程就可以明確加以區(qū)分。
    STC單片機(jī)的外部中斷引腳(INT0、INT1)不僅能通過(guò)一系列配置產(chǎn)生外部中斷,還可以干預(yù)針對(duì)引腳T0或T1的脈沖計(jì)數(shù),下圖是STC單片機(jī)INT0中斷和T0計(jì)數(shù)之間的關(guān)聯(lián)邏輯。



    我們用這個(gè)圖來(lái)說(shuō)明中斷和事件的概念。
    從圖中可以看出,INT0(P3.2腳)可以獨(dú)立產(chǎn)生下降沿中斷或上升沿/下降沿中斷,(后者的意思是上升沿和下降沿都可以產(chǎn)生中斷,)也可以不產(chǎn)生中斷,僅僅參與T0計(jì)數(shù)器的脈沖門控制。
    如果INT0用來(lái)產(chǎn)生中斷,配置TCON寄存器的IT0選擇下降沿觸發(fā)模式或上升沿/下降沿觸發(fā)模式,再使能IE0和EA,那么它就是一個(gè)‘中斷’源;如果它是用來(lái)控制T0脈沖,進(jìn)而由T0產(chǎn)生計(jì)數(shù)溢出中斷,那就轉(zhuǎn)而操作T0_GATE和TR0,就可以閉合或斷開T0脈沖通道,此時(shí)的INT0就是觸發(fā)T0計(jì)數(shù)的成因之一,或者說(shuō),它是觸發(fā)T0計(jì)數(shù)中斷的‘事件’之一。
    類似的概念也出現(xiàn)在STM32F1xx當(dāng)中,但過(guò)程要比STC復(fù)雜一些。


    圖中以PC5和PC9的下降沿作為中斷源,它們將通過(guò)一個(gè)比較復(fù)雜的設(shè)置通道進(jìn)入NVIC中斷邏輯。這兩個(gè)下降沿也可以充當(dāng)事件源,用來(lái)產(chǎn)生事件脈沖。
    STM32F1xx的所有GPIO引腳都可以充當(dāng)‘中斷’源或‘事件’源,不像STC那樣只有孤零零的INT0和INT1。STM32F1xx把所有的GPIO引腳按位序分成了若干組,也就是PA0、PB0……PG0這7個(gè)0序引腳放在一組,直至PA15、PB15……PG15為第15組,總計(jì)16個(gè)組。通過(guò)寄存器設(shè)置,每組可以選擇其中一個(gè)引腳作為‘值日生’產(chǎn)生中斷/事件,如此一來(lái),分為16組的112個(gè)引腳就可以同時(shí)生成7個(gè)外部中斷請(qǐng)求/事件觸發(fā)。哦?怎么不是16個(gè)中斷請(qǐng)求呢?原來(lái)0~4組可以生成獨(dú)立的外部中斷/事件EXTI0~EXTI4,而5~9組和10~15組只能各自產(chǎn)生一個(gè)外部中斷/事件EXTI9_5和EXTI15_10。STM32F1XX把這7個(gè)二級(jí)中斷源/事件源又稱為‘中斷線’,在手冊(cè)里叫LINE0~LINE[9:5]、LINE[15:10]。
    某一組從七個(gè)引腳中選出一個(gè)‘值日生’是寄存器AFIO_EXTICR1~AFIO_EXTICR4的功勞,每個(gè)寄存器用4個(gè)位EXTIx[3:0]管一組,比方說(shuō)圖中5線組到底選誰(shuí)是由AFIO_EXTICR2的EXTI5[3:0]的值說(shuō)了算,當(dāng)EXTI5[3:0]=0010時(shí),PC5就被選中了,所以AFIO_EXTICR的作用相當(dāng)于多路選擇開關(guān)。
    下一關(guān)是通過(guò)EXTI_RTSR和EXTI_FTSR的TR5和TR9確定邊沿觸發(fā)方式,圖中示例是選擇下降沿觸發(fā)。很不幸的是,STM32F1XX雖然可以選定上升沿和下降沿均可觸發(fā),但它沒有像STC一樣的電平觸發(fā),這給某些應(yīng)用帶來(lái)了不便。
    再往后就進(jìn)入了‘復(fù)雜’的重點(diǎn)區(qū)域,造成復(fù)雜局面的寄存器有4個(gè):軟件中斷/事件寄存器EXTI_SWIER、外部中斷掛起寄存器EXTI_PR、外部事件屏蔽寄存器EXTI_EMR和外部中斷屏蔽寄存器EXTI_IMR。通過(guò)這4個(gè)家伙,剛才哪些中斷線可以像STC一樣產(chǎn)生中斷請(qǐng)求,也可以以事件源的方式觸發(fā)脈沖發(fā)生器產(chǎn)生事件脈沖。
    EXTI_EMR和EXTI_IMR比較好理解,負(fù)責(zé)屏蔽EXTI5事件線路的是EXTI_EMR的MR5,負(fù)責(zé)屏蔽EXTI5中斷線路的是EXTI_IMR的MR5,寫0將屏蔽所在線路不產(chǎn)生事件或中斷。
    最麻煩的是這兩個(gè)與門前面的EXTI_SWIER和EXTI_PR。
    如果我們想讓PC5成為EXTI5之后只產(chǎn)生中斷,那么,EXTI_EMR的MR5寫0屏蔽事件線路,EXTI_IMR的MR5寫1開放中斷線路,EXTI_SWIER的SWIER5寫0(其實(shí)也不用特意寫0,因?yàn)樗膹?fù)位值就是0。)EXTI5有效的下降沿通過(guò)或門,在圖中的位置向下進(jìn)入與門之后形成EXTI9_5中斷線,同時(shí),EXTI_PR的PR5就會(huì)自動(dòng)置1,如果此時(shí)NVIC_ISER0的SETENA23為1,就會(huì)產(chǎn)生外部中斷請(qǐng)求,至于其優(yōu)先級(jí)如何就要看NVIC_IP5的IP[23]是什么值了。
    注意,在上述過(guò)程中這個(gè)SWIER5千萬(wàn)不要寫1,否則不管PC5來(lái)沒來(lái)下降沿,只要EXTI_IMR的MR5=1就會(huì)立刻產(chǎn)生EXTI9_5中斷請(qǐng)求。這個(gè)功能到底是干什么的,俺也沒搞明白。
    EXTI_PR其實(shí)是一個(gè)中斷標(biāo)志寄存器,作用類似于STC單片機(jī)TCON中的IE0或IE1。EXTI5有效了,EXTI_PR的PR5就被硬件置1,等NVIC響應(yīng)這個(gè)中斷以后,要軟件清除它。需要注意的是,清除PR5不是寫0,而是寫1。
    另外,EXTI_PR和EXTI_SWIER是相互關(guān)聯(lián)的:PR5寫1不僅能夠清除PR5,還同時(shí)清除SWIER5;如果SWIER5寫1,則PR5也會(huì)被自動(dòng)置1。 這就是圖中想要表達(dá)的意思。
    最后說(shuō)說(shuō)STM32F1xx搞出來(lái)一個(gè)EXTI_PR的另外用途。
    如果PC5和PC9要同時(shí)產(chǎn)生中斷,而它們又處于同一個(gè)中斷線EXTI9_5上,NVIC的中斷響應(yīng)程序EXTI9_5_IRQHandler咋知道到底是PC5的EXTI5還是PC9的EXTI9呢?當(dāng)然了,它是不知道的,這就需要在程序中判斷EXTI_PR的PR5和PR9到底誰(shuí)是1了。

評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

板凳
ID:404881 發(fā)表于 2021-6-9 00:08 | 只看該作者
樓主好細(xì)心,感謝分享!
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:57414 發(fā)表于 2021-6-7 13:52 | 只看該作者
樓主你好,我看你發(fā)帖所用到的圖片都很精美,請(qǐng)問(wèn)是您自己畫的還是從其它學(xué)習(xí)資料中截圖的?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表