新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32筆記之外部中斷GPIO

        STM32筆記之外部中斷GPIO

        作者: 時間:2016-12-03 來源:網絡 收藏
        b) 初始化函數定義:
        void EXTI_Configuration(void); //定義IO中斷初始化函數
        c) 初始化函數調用:
        EXTI_Configuration();//IO中斷初始化函數調用簡單應用:
        d) 初始化函數:
        void EXTI_Configuration(void)
        {
        EXTI_InitTypeDef EXTI_InitStructure; //EXTI初始化結構定義

        EXTI_ClearITPendingBit(EXTI_LINE_KEY_BUTTON);//清除中斷標志
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3);//管腳選擇
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);

        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//事件選擇
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//觸發模式
        EXTI_InitStructure.EXTI_Line = EXTI_Line3 | EXTI_Line4; //線路選擇
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;//啟動中斷
        EXTI_Init(&EXTI_InitStructure);//初始化
        }

        e) RCC初始化函數中開啟I/O時鐘
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

        GPIO初始化函數中定義輸入I/O管腳。
        //IO輸入,GPIOA的4腳輸入
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
        GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化
        f) 在NVIC的初始化函數里面增加以下代碼打開相關中斷:
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //通道
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//占先級
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //響應級
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //啟動
        NVIC_Init(&NVIC_InitStructure); //初始化

        g) 在stm32f10x_it.c文件中找到void USART1_IRQHandler函數,在其中添入執行代碼。一般最少三個步驟:先使用if語句判斷是發生那個中斷,然后清除中斷標志位,最后給字符串賦值,或做其他事情。
        if(EXTI_GetITStatus(EXTI_Line3) != RESET) //判斷中斷發生來源
        { EXTI_ClearITPendingBit(EXTI_Line3); //清除中斷標志
        USART_SendData(USART1, 0x41); //發送字符“a”
        GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_2)));//LED發生明暗交替
        }
        h) 中斷注意事項:
        中斷發生后必須清除中斷位,否則會出現死循環不斷發生這個中斷。然后需要對中斷類型進行判斷再執行代碼。
        使用EXTI的I/O中斷,在完成RCC與GPIO硬件設置之后需要做三件事:初始化EXTI、NVIC開中斷、編寫中斷執行代碼。


        關鍵詞: STM32外部中斷GPI

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大石桥市| 长治县| 德庆县| 泉州市| 龙口市| 湖口县| 惠州市| 白银市| 梁山县| 友谊县| 小金县| 山丹县| 通河县| 中牟县| 清丰县| 新余市| 奉化市| 胶州市| 嫩江县| 木里| 大埔县| 昌邑市| 娱乐| 通渭县| 卫辉市| 汾西县| 鲁甸县| 无为县| 扎兰屯市| 澳门| 密山市| 无棣县| 嘉义县| 平乐县| 武安市| 赣州市| 宜君县| 大埔区| 怀安县| 靖宇县| 东平县|