色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32裸機開發(fā)—外部中斷

          STM32裸機開發(fā)—外部中斷

          作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
          a. 初始化IO口作為輸入
          這一步需要設置你要作為外部中斷輸入的IO口的狀態(tài),可以設置為上拉/下拉輸入,也可以設置為浮空輸入,但浮空的時候外部硬件一定要上拉或下拉。否則可能導致中斷不停地被觸發(fā)。在干擾較大的地方,就算使用了上拉/下拉,也建議在外部硬件上設置上拉/下拉,這樣可以在一定程度上防止外部干擾帶來的影響。
          *RCC_APB2ENR=0x00000019;//打開portb和portc的時鐘和復用時鐘
          *PORTA_CRL=0x44444844;//設置PA2口為上拉/下拉輸入模式
          由于還需要驅(qū)動液晶屏所以同時打開了PORTB和PORTC的時鐘。
          b. 開啟IO口復用時鐘,設置IO口與中斷線的映射關系
          STM32的IO口與中斷線的對應關系需要配置外部中斷配置寄存器EXTICR,這樣我們要先開啟復用時鐘,然后配置IO口與中斷線的對應關系。才能把外部中斷與中斷線連接起來。從圖中看到一共有19條中斷線(EXTIx),幾號端口就是幾號中斷線。這里PA2顯然就是EXTI2線。
          *AFIO_EXTICR1=0x00000000;//打開PA2口的復用設置
          c. 開啟與該IO口相對的線上中斷事件,設置觸發(fā)條件
          這一步,我們要配置中斷產(chǎn)生的條件,STM32可以配置成上升沿觸發(fā),下降沿觸發(fā),或者任意電平變化觸發(fā),但是不能配置成高電平和低電平觸發(fā)。這里要根據(jù)自己的實際情況來配置。同時要開啟中斷線上的中斷,這里需要注意的是,如果使用外部中斷,并設置該中斷的EMR位的話,會引起軟件仿真上不能轉(zhuǎn)到中斷,而硬件上是可以的。而不設置EMR,軟件仿真就可以進入中斷服務函數(shù),并且硬件上也是可以的。建議不要配置EMR位。從圖中可以看到,要進入NVIC interrupt controller必須要設置中斷屏蔽寄存器。掛起請求寄存器從目前的理解來看應該是在硬件中斷的時候接到中斷事件就自動置1,中斷被處理了就置0,可以通過寫該寄存器來實現(xiàn)軟中斷,故在這里沒有進行設置。
          *EXTI_IMR=0x00000004;//打開PA2的中斷屏蔽
          *EXTI_FTSR=0x00000004;//設置為下降沿觸發(fā)

          d. 配置中斷分組(NVIC),并使能中斷
          這一步,我們就是配置中斷的分組,以及使能,對于STM32來說,只有配置了NVIC的設置,并開啟才能被執(zhí)行,否則是不會執(zhí)行到中斷服務函數(shù)里面去的。對于裸機開發(fā)來說,ST半導體的STM32參考手冊中沒有標明NVIC寄存器的地址,如下圖,直接標成了reserved。事實上NVIC寄存器已經(jīng)是CM3的私房外設了。通過看論壇上的討論知道了在ARM發(fā)布的Cortex-M3 Technical Reference Manual (r2p0)中能找到。NVIC寄存器組主要有Interrupt Set-Enable Registers,Interrupt Clear-Enable Registers,Interrupt Set-Pending Register,Interrupt Clear-Pending Register,Active Bit Register,Interrupt Priority Registers。這里重點要關心的是Interrupt Set-Enable Registers,因為它是用來設置中斷通道使能的,不設置的話中斷服務函數(shù)不會響應。它的地址是0xE000E100。EXTI2的中斷向量號為8(查詢中斷向量表),所以代碼如下:
          *NVIC_ISER=0x00000100;//打開EXTI線2中斷


          e. 寫中斷服務函數(shù)
          舉個例子:
          void EXTI2_IRQHandler(void)
          {
          drawwin8();
          }
          中斷服務函數(shù)的格式大概就是 void XXXX(中斷名稱)_IRQHandler()。中斷名稱直接查手冊上的中斷向量表。



          評論


          技術專區(qū)

          關閉