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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > STM32學習之外部中斷

          STM32學習之外部中斷

          作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          之前看了網(wǎng)上有關(guān)外部中斷的使用介紹,覺得很簡單,現(xiàn)在想想有那種想法真是浮躁,不要做浮躁的嵌入式工程師,要腳踏實地。今天把外部中斷實驗做了一下,不做不知道,一作就是沒做出來,網(wǎng)上參考別人的程序和有關(guān)資料還是沒做出來,最后到群里問了問,被一個叫STM32的網(wǎng)友發(fā)現(xiàn)了我的問題,改過來之后程序按照自己的想法執(zhí)行。
          下面介紹一下今天的使用總結(jié):
          STM32中,每一個GPIO都可以觸發(fā)一個外部中斷,但是,GPIO的中斷是以組位一個單位的,同組間的外部中斷同一時間只能使用一個。比如說,PA0,PB0,PC0,PD0,PE0,PF0,PG0這些為1組,如果我們使用PA0作為外部中斷源,那么別的就不能夠再使用了,在此情況下,我們智能使用類似于PB1,PC2這種末端序號不同的外部中斷源。每一組使用一個中斷標志EXTIx。EXTI0 – EXTI4這5個外部中斷有著自己的單獨的中斷響應函數(shù),EXTI5-9共用一個中斷響應函數(shù),EXTI10-15共用一個中斷響應函數(shù)。
          上面這一段話把外部中斷介紹的很詳細。要注意的是紅字部分,今天我使用的外部中斷管腳是PB.7 PB.8 PB.9 這幾個管腳正好對應在一個中斷響應函數(shù)里EXTI5-9。
          //選擇中斷管腳PB.7 PB.8 PB.8
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
          EXTI_InitStructure.EXTI_Line = EXTI_Line7 | EXTI_Line8 | EXTI_Line9; //選擇中斷線路7 8 9
          在這里我出錯了EXTI_InitStructure.EXTI_Line 選中的中斷管腳要和GPIO_EXTILineConfig 選中的管腳保持一致 也就是上面說的
          我們智能使用類似于PB1,PC2這種末端序號不同的外部中斷源這句話。
          源代碼如下
          /*
          ********************************************************************************
          ** 函數(shù)名稱 : void EXTI_Configuration(void))
          ** 函數(shù)功能 : 外部中斷初始化
          ** 輸 入 : 無
          ** 輸 出 : 無
          ** 返 回 : 無
          ********************************************************************************
          */
          void EXTI_Configuration(void)
          {
          EXTI_InitTypeDef EXTI_InitStructure;
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //復用時鐘
          //清空中斷標志
          EXTI_ClearITPendingBit(EXTI_Line2);
          EXTI_ClearITPendingBit(EXTI_Line3);
          EXTI_ClearITPendingBit(EXTI_Line5);
          //選擇中斷管腳PB.7 PB.8 PB.8
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource7);
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
          GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
          EXTI_InitStructure.EXTI_Line = EXTI_Line7 | EXTI_Line8 | EXTI_Line9; //選擇中斷線路7 8 9
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設(shè)置為中斷請求,非事件請求
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //設(shè)置中斷觸發(fā)方式為下降沿觸發(fā)
          EXTI_InitStructure.EXTI_LineCmd = ENABLE; //外部中斷使能
          EXTI_Init(&EXTI_InitStructure);
          }
          void EXTI9_5_IRQHandler(void)
          {
          if(EXTI_GetITStatus(EXTI_Line7) != RESET)
          {
          //添加中斷處理程序
          //點亮LED
          PC1_H;
          PC3_H;
          PC13_L;
          EXTI_ClearFlag(EXTI_Line7);
          EXTI_ClearITPendingBit(EXTI_Line7);
          }
          if(EXTI_GetITStatus(EXTI_Line8) != RESET)
          {
          //添加中斷處理程序
          //點亮LED燈
          PC1_H;
          PC3_L;
          PC13_H;
          EXTI_ClearFlag(EXTI_Line8);
          EXTI_ClearITPendingBit(EXTI_Line8);
          }
          if(EXTI_GetITStatus(EXTI_Line9) != RESET)
          {
          //添加中斷處理程序
          //點亮LED燈
          PC1_L;
          PC3_H;
          PC13_H;
          EXTI_ClearFlag(EXTI_Line9);
          EXTI_ClearITPendingBit(EXTI_Line9);
          }
          }



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