日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STM32】外部中断实验代码详解

發布時間:2025/4/5 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STM32】外部中断实验代码详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • main.c
  • exit.c
  • exit.h

STM32 的每個 IO 都可以作為外部 中斷的中斷輸入口,這點也是 STM32 的強大之處。

STM32F103 的 19 個外部中斷為:

  • 線 0~15:對應外部 IO 口的輸入中斷。
  • 線 16:連接到 PVD 輸出。
  • 線 17:連接到 RTC 鬧鐘事件。
  • 線 18:連接到 USB 喚醒事件。
  • 庫函數中,配置 GPIO 與中斷線的映射關系通過以下函數來實現:void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
    該函數將 GPIO 端口與中斷線映射起來,使用范例為:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);
    將中斷線 2 與 GPIOE 映射起來,那么很顯然是 GPIOE.2 與 EXTI2 中斷線連接了。

    中斷線上中斷的初始化是通過以下函數實現的:void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
    給一個例子,設置中斷線 4 上的中斷為下降沿觸發:

    EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line4; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根據 EXTI_InitStruct 中指定的參數初始化外設 EXTI 寄存器

    結構體 EXTI_InitTypeDef 的成員變量有:

  • EXTI_Line。中斷線的標號,取值范圍為 EXTI_Line0~EXTI_Line15;
  • EXTI_Mode。中斷模式,可選值為中斷 EXTI_Mode_Interrupt 和事件 EXTI_Mode_Event;
  • EXTI_Trigger。觸發方式,可以是下降沿觸發 EXTI_Trigger_Falling,上升沿觸發 EXTI_Trigger_Rising,或者任意電平(上升沿和下降沿)觸發 EXTI_Trigger_Rising_Falling。
  • EXTI_LineCmd。使能中斷線。

  • 我們配置好中斷線和 GPIO 映射關系,然后又設置好了中斷的觸發模式等初始化參數。既然是外部中斷,涉及到中斷我們當然還要設置 NVIC 中斷優先級。

    接著上面的范例,我們設置中斷線 2 的中斷優先級。

    NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //使能按鍵外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優先級 2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子優先級 2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure); //中斷優先級分組初始化

    配置完中斷優先級之后,接著要做的就是編寫中斷服務函數 EXTIx_IRQHandler。

    在編寫中斷服務函數的時候會經常使用到兩個函數,第一個函數是判斷某個中斷線上的中斷是否發生(標志位是否置位):ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); 這個函數一半是用在中斷服務函數的開頭判斷中斷是否發生。

    另一個函數是清除某個中斷線上的中斷標志位:void EXTI_ClearITPendingBit(uint32_t EXTI_Line); 這個函數一般應用在中斷服務函數結束之前,清除中斷標志位。


    我們再總結一下 使用 IO 口外部中斷的一般步驟:

  • 初始化 IO 口為輸入。
  • 開啟 IO 口復用時鐘,設置 IO 口與中斷線的映射關系。
  • 初始化線上中斷,設置觸發條件等。
  • 配置中斷分組(NVIC),并使能中斷。
  • 編寫中斷服務函數。

  • main.c

    #include "led.h" #include "delay.h" #include "sys.h" #include "key.h" #include "usart.h" #include "exti.h" int main(void){ delay_init(); //延時函數初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 設置中斷優先級分組2uart_init(9600); //串口初始化為9600LED_Init(); //初始化與LED連接的硬件接口 EXTIX_Init(); //外部中斷初始化LED0=0; //點亮LEDwhile(1){ printf("OK\n"); delay_ms(1000); } }

    exit.c

    #include "led.h" #include "key.h" #include "delay.h" #include "usart.h"//外部中斷初始化函數 void EXTIX_Init(void) {EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //外部中斷,需要使能AFIO時鐘KEY_Init();//初始化按鍵對應io模式//GPIOC.5 中斷線以及中斷初始化配置GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource5);EXTI_InitStructure.EXTI_Line = EXTI_Line5;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); //根據EXTI_InitStruct中指定的參數初始化外設EXTI寄存器//GPIOA.15 中斷線以及中斷初始化配置GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);EXTI_InitStructure.EXTI_Line = EXTI_Line15;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); //根據EXTI_InitStruct中指定的參數初始化外設EXTI寄存器//GPIOA.0 中斷線以及中斷初始化配置GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); //根據EXTI_InitStruct中指定的參數初始化外設EXTI寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按鍵所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優先級2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子優先級1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //使能按鍵所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優先級2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子優先級1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按鍵所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優先級2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子優先級1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道NVIC_Init(&NVIC_InitStructure); }void EXTI0_IRQHandler(void) {delay_ms(10); //消抖if(WK_UP==1){ LED0=!LED0;LED1=!LED1; }EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0線路掛起位 }void EXTI9_5_IRQHandler(void) { delay_ms(10); //消抖 if(KEY0==0) {LED0=!LED0;}EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE5上的中斷標志位 }void EXTI15_10_IRQHandler(void) {delay_ms(10); //消抖 if(KEY1==0) {LED1=!LED1;}EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE15線路掛起位 }

    exit.h

    #ifndef __EXTI_H #define __EXIT_H #include "sys.h"void EXTIX_Init(void);//IO初始化#endif 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的【STM32】外部中断实验代码详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品色哟哟 | 992tv在线成人免费观看 | 毛片在线免费观看网址 | 狠狠操操| 少女情窦初开的第4集在线观看 | 91福利在线视频 | a一级免费视频 | 国产一区二区三区视频免费观看 | 欧美午夜网站 | 欧美国产日韩一区二区三区 | 国产成人久久77777精品 | 操综合网 | 97人妻天天摸天天爽天天 | 日韩经典午夜福利发布 | 国产一级免费片 | 亚洲精品久久久久久动漫器材一区 | 日日干干 | 国产精品wwww | 波岛野结衣 | av在线官网 | 青青草狠狠操 | 亚洲精品123区 | 欧美影院一区二区三区 | 在线视频自拍 | 久久99精品久久久 | 中文字幕女同 | 性做久久久久 | 97人妻精品一区二区三区软件 | 哪里可以免费看毛片 | 精品国偷自产国产一区 | 欧美在线综合 | 看黄色的网址 | 欧美片17c07.com| 天天操夜夜草 | 久久香蕉精品 | 国产精品二区一区 | 日本黄网在线观看 | 亚洲六月丁香色婷婷综合久久 | 污污的视频在线观看 | 日韩中文在线字幕 | 女人久久久久 | 国产做爰视频免费播放 | 少妇又紧又爽视频 | 免费毛片大全 | 免费的毛片 | 91理论片午午伦夜理片久久 | 69网站在线观看 | 午夜一区二区三区四区 | 日韩乱码人妻无码系列中文字幕 | 97超碰中文| 91免费福利视频 | 日本色综合网 | 精品少妇人妻av免费久久洗澡 | 嫩草影院在线观看视频 | 中文字幕免费高清视频 | 亚洲色图美腿丝袜 | 美国美女黄色片 | 日本免费高清一区二区 | 久91 | 久久亚洲成人 | 饥渴少妇伦色诱公 | av福利网站| h色视频在线观看 | 好吊视频一区 | 欧美高h| 亚洲精品中文字幕在线 | 91爱爱网站| 日韩福利在线视频 | 久草中文在线 | 成人免费视频软件网站 | 亚洲欧美精品一区二区 | 全国男人的天堂网 | 哺乳援交吃奶在线播放 | www五月婷婷 | 日韩理论在线观看 | 色综合久久88色综合天天 | 欧美成人一区二区三区 | 成在线人免费视频 | 丰满人妻一区二区三区免费视频棣 | 国产精品色哟哟 | 午夜福利视频一区二区 | 日韩少妇中文字幕 | 成人av网站在线播放 | 国产精品自拍合集 | 亚洲1234区| 亚洲性图一区二区三区 | 又白又嫩毛又多15p 超碰在线一区 | 日韩精品人妻一区二区中文字幕 | 一本色道久久综合亚洲精品按摩 | 亚洲v欧美v另类v综合v日韩v | 欧美大片高清 | 男人的天堂一级片 | 亚洲视频手机在线观看 | 久久99久久99精品免观看软件 | 91在线观看免费高清完整版在线观看 | 免费簧片在线观看 | 在线免费视频观看 | 奇米影视四色777 | 天堂av免费在线观看 |