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

          新聞中心

          STM32 外部中斷簡介

          作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          STM32IO口中斷的一些基礎(chǔ)概念。STM32的每個IO都可以作為外部中斷的中斷輸入口,這點也是STM32的強大之處。STM32F103的中斷控制器支持19個外部中斷/事件請求。每個中斷設(shè)有狀態(tài)位,每個中斷/事件都有獨立的觸發(fā)和屏蔽設(shè)置。STM32F103的19個外部中斷為:

          線0~15:對應(yīng)外部IO口的輸入中斷。

          本文引用地址:http://www.ex-cimer.com/article/201611/318698.htm

          線16:連接到PVD輸出。

          線17:連接到RTC鬧鐘事件。

          線18:連接到USB喚醒事件。

          在庫函數(shù)中,配置GPIO與中斷線的映射關(guān)系的函數(shù)GPIO_EXTILineConfig()來實現(xiàn)的:

          voidGPIO_EXTILineConfig(uint8_tGPIO_PortSource,uint8_tGPIO_PinSource)

          該函數(shù)將GPIO端口與中斷線映射起來,使用范例是:

          GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

          將中斷線2與GPIOE映射起來,那么很顯然是GPIOE.2與EXTI2中斷線連接了。設(shè)置好中斷線映射之后,那么到底來自這個IO口的中斷是通過什么方式觸發(fā)的呢?接下來我們就要設(shè)置該中斷線上中斷的初始化參數(shù)了。

          中斷線上中斷的初始化是通過函數(shù)EXTI_Init()實現(xiàn)的。EXTI_Init()函數(shù)的定義是:

          voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct);

          下面我們用一個使用范例來說明這個函數(shù)的使用:

          點擊(此處)折疊或打開

          1.   EXTI_InitTypeDef EXTI_InitStructure;
          2.   EXTI_InitStructure.EXTI_Line=EXTI_Line4;//中斷線的標號 取值范圍為EXTI_Line0~EXTI_Line15
          3.   EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//中斷模式,可選值為中斷 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event。
          4.   EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//觸發(fā)方式,可以是下降沿觸發(fā) EXTI_Trigger_Falling,上升沿觸發(fā) EXTI_Trigger_Rising,或者任意電平(上升沿和下降沿)觸發(fā)EXTI_Trigger_Rising_Falling
          5.   EXTI_InitStructure.EXTI_LineCmd=ENABLE;
          6. EXTI_Init(&EXTI_InitStructure);

          既然是外部中斷,涉及到中斷我們當然還要設(shè)置NVIC中斷優(yōu)先級。

          點擊(此處)折疊或打開

          1.   NVIC_InitTypeDef NVIC_InitStructure;
          2.   NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;//使能按鍵外部中斷通道
          3.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;//搶占優(yōu)先級 2,
          4.   NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;//子優(yōu)先級 2
          5.   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能外部中斷通道
          6.   NVIC_Init(&NVIC_InitStructure);

          配置完中斷優(yōu)先級之后,接著我們要做的就是編寫中斷服務(wù)函數(shù)。中斷服務(wù)函數(shù)的名字是在MDK中事先有定義的。這里需要說明一下,STM32的IO口外部中斷函數(shù)只有6個,分別為:

          EXPORTEXTI0_IRQHandler

          EXPORTEXTI1_IRQHandler

          EXPORTEXTI2_IRQHandler

          EXPORTEXTI3_IRQHandler

          EXPORTEXTI4_IRQHandler

          EXPORTEXTI9_5_IRQHandler

          EXPORTEXTI15_10_IRQHandler

          中斷線0-4每個中斷線對應(yīng)一個中斷函數(shù),中斷線5-9共用中斷函數(shù)EXTI9_5_IRQHandler,中斷線10-15共用中斷函數(shù)EXTI15_10_IRQHandler。

          在編寫中斷服務(wù)函數(shù)的時候會經(jīng)常使用到兩個函數(shù),

          第一個函數(shù)是判斷某個中斷線上的中斷是否發(fā)生(標志位是否置位):

          ITStatusEXTI_GetITStatus(uint32_tEXTI_Line);

          這個函數(shù)一般使用在中斷服務(wù)函數(shù)的開頭判斷中斷是否發(fā)生。另一個函數(shù)是清除某個中斷線上的中斷標志位:

          voidEXTI_ClearITPendingBit(uint32_tEXTI_Line);

          這個函數(shù)一般應(yīng)用在中斷服務(wù)函數(shù)結(jié)束之前,清除中斷標志位。

          常用的中斷服務(wù)函數(shù)格式為:

          voidEXTI2_IRQHandler(void)

          {

          if(EXTI_GetITStatus(EXTI_Line3)!=RESET)//判斷某個線上的中斷是否發(fā)生

          {

          中斷邏輯…

          EXTI_ClearITPendingBit(EXTI_Line3);//清除LINE上的中斷標志位

          }

          }

          使用IO口外部中斷的一般步驟:

          1)初始化IO口為輸入。

          2)開啟IO口復(fù)用時鐘,設(shè)置IO口與中斷線的映射關(guān)系。

          3)初始化線上中斷,設(shè)置觸發(fā)條件等。

          4)配置中斷分組(NVIC),并使能中斷。

          5)編寫中斷服務(wù)函數(shù)。



          關(guān)鍵詞: stm32外部中

          評論


          技術(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); })();