娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月15日(星期日)

2018年06月15日 | STM32F4外部中斷入口和外部中斷線

發布者:靜默思考 來源: eefocus關鍵字:STM32F4  外部中斷入口  外部中斷線 手機看文章 掃描二維碼
隨時隨地手機看文章

STM32F4的每個IO都可以作為外部中斷的中斷輸入口,這點也是STM32F4的強大之處。STM32F407的中斷控制器支持22個外部中斷/事件請求。每個中斷設有狀態位,每個中斷/事件都有獨立的觸發和屏蔽設置。STM32F407的22個外部中斷為:

EXTI線0~15:對應外部IO口的輸入中斷。

EXTI線16:連接到PVD輸出。

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

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

EXTI線19:連接到以太網喚醒事件。

EXTI線20:連接到USB OTG HS(在FS中配置)喚醒事件。

EXTI線21:連接到RTC入侵和時間戳事件。

EXTI線22:連接到RTC喚醒事件。

從上面可以看出,STM32F4供IO口使用的中斷線只有16個,但是STM32F4的IO口卻遠遠不止16個,那么STM32F4是怎么把16個中斷線和IO口一一對應起來的呢?于是STM32就這樣設計,GPIO的管教GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G,H,I)分別對應中斷線0~15。這樣每個中斷線對應了最多9個IO口,以線0為例:它對應了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0,GPIOH.0,GPIOI.0。而中斷線每次只能連接到1個IO口上,這樣就需要通過配置來決定對應的中斷線配置到哪個GPIO上了。下面我們看看GPIO跟中斷線的映射關系圖:



圖1 GPIO和中斷線的映射關系圖

接下來我們講解使用庫函數配置外部中斷的步驟。

1)      使能IO口時鐘,初始化IO口為輸入

       首先,我們要使用IO口作為中斷輸入,所以我們要使能相應的IO口時鐘,以及初始化相應的IO口為輸入模式。這里就不做過多講解。

2)      開啟SYSCFG時鐘,設置IO口與中斷線的映射關系。

接下來,我們要配置GPIO與中斷線的映射關系,那么我們首先需要打開SYSCFG時鐘。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG時鐘

這里大家一定要注意,只要我們使用到外部中斷,就必須打開SYSCFG時鐘。

接下來,我們配置GPIO與中斷線的映射關系。在庫函數中,配置GPIO與中斷線的映射關系的函數SYSCFG_EXTILineConfig ()來實現的:

void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex);

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

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

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

3)      初始化線上中斷,設置觸發條件等。

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

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

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

       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寄存器

上面的例子設置中斷線4上的中斷為下降沿觸發。STM32的外設的初始化都是通過結構體來設置初始值的,這里就不再講解結構體初始化的過程了。我們來看看結構體EXTI_InitTypeDef的成員變量:

typedef struct

{ uint32_t EXTI_Line;

  EXTIMode_TypeDef EXTI_Mode;  

  EXTITrigger_TypeDef EXTI_Trigger;

  FunctionalState EXTI_LineCmd; 

}EXTI_InitTypeDef;

從定義可以看出,有4個參數需要設置。第一個參數是中斷線的標號,對于我們的外部中斷,取值范圍為EXTI_Line0~EXTI_Line15。這個在上面已經講過中斷線的概念。也就是說,這個函數配置的是某個中斷線上的中斷參數。第二個參數是中斷模式,可選值為中斷EXTI_Mode_Interrupt和事件EXTI_Mode_Event。第三個參數是觸發方式,可以是下降沿觸發EXTI_Trigger_Falling,上升沿觸發EXTI_Trigger_Rising,或者任意電平(上升沿和下降沿)觸發EXTI_Trigger_Rising_Falling,相信學過51的對這個不難理解。最后一個參數就是使能中斷線了。

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

我們設置好中斷線和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);                          //中斷優先級分組初始化


5)      編寫中斷服務函數。

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

EXPORT  EXTI0_IRQHandler         

EXPORT  EXTI1_IRQHandler      

EXPORT  EXTI2_IRQHandler        

EXPORT  EXTI3_IRQHandler       

EXPORT  EXTI4_IRQHandler          

EXPORT  EXTI9_5_IRQHandler       

EXPORT  EXTI15_10_IRQHandler     

中斷線0-4每個中斷線對應一個中斷函數,中斷線5-9共用中斷函數EXTI9_5_IRQHandler,中斷線10-15共用中斷函數EXTI15_10_IRQHandler。在編寫中斷服務函數的時候會經常使用到兩個函數,第一個函數是判斷某個中斷線上的中斷是否發生(標志位是否置位):

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

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

void EXTI_ClearITPendingBit(uint32_t EXTI_Line);

這個函數一般應用在中斷服務函數結束之前,清除中斷標志位。

常用的中斷服務函數格式為:

void EXTI3_IRQHandler(void)

{

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

       { …中斷邏輯…

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

       }           

}

在這里需要說明一下,固件庫還提供了兩個函數用來判斷外部中斷狀態以及清除外部狀態標志位的函數EXTI_GetFlagStatus和EXTI_ClearFlag,他們的作用和前面兩個函數的作用類似。只是在EXTI_GetITStatus函數中會先判斷這種中斷是否使能,使能了才去判斷中斷標志位,而EXTI_GetFlagStatus直接用來判斷狀態標志位。

講到這里,相信大家對于STM32的IO口外部中斷已經有了一定了了解。下面我們再總結一下使用IO口外部中斷的一般步驟:

1)使能IO口時鐘,初始化IO口為輸入。

2)使能SYSCFG時鐘,設置IO口與中斷線的映射關系。

3)初始化線上中斷,設置觸發條件等。

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

5)編寫中斷服務函數。

通過以上幾個步驟的設置,我們就可以正常使用外部中斷了。


關鍵字:STM32F4  外部中斷入口  外部中斷線 引用地址:STM32F4外部中斷入口和外部中斷線

上一篇:STM32外部中斷映射
下一篇:STM32啟動后系統初始化SystemInit()

推薦閱讀

工業互聯網正在給傳統制造業帶來前所未有的沖擊,越來越多的工廠開始數字化轉型,運用人工智能、物聯網、云計算和大數據等新一代信息技術將工廠升級到工業4.0,以獲得快速應對市場的能力,并最大限度提升生產效率和節省成本。?近年來,受到人力和材料成本快速上漲等因素影響,制造業的利潤空間越來越薄,加上全球經濟放緩,在訂單不穩定的形勢下,稍有不...
英國科技委員會就英國電信基礎設施建設舉行聽證會,華為公司應邀參加。 近來,美國對華為持續進行打壓,還拉攏英國等國要求共同抵制華為。聽證會上,面對英國議員們的質詢,華為外籍高管有禮有節、坦誠應對。 華為公司網絡安全主管約翰·薩福克:華為主張完全公開與透明,我們歡迎大家來找問題,不管是1個問題,還是100個問題,都不要緊。 當天,華為公司...
優派(ViewSonic)推出一款高性價比的 4K 顯示器 VX2731-4K-HD。優派 VX2731-4K-HD 擁有 27 英寸屏幕,搭配 3840 x 2160 UHD 分辨率,4K 高清視覺效果,盡享細膩清晰的畫面;其三邊微邊框的外觀,符合人體工學的多功能升降旋轉底座設計,搭載 SuperClear? IPS 廣視角技術,可擴展到 178 度的顯示器垂直與水平可視角,呈現出更加出眾的...
據外媒報道,當地時間6月10日,電動汽車電池技術領導者OneD Battery Sciences宣布推出一項可為下一代電動汽車電池提供動力的突破性技術——SINANODE。對于電動汽車行業而言,打造含有更多硅的電池一直是一個挑戰,而SINANODE無縫集成至現有的生產工藝中,讓硅納米線與商用石墨粉末融合,將電池陽極的能量密度提高了兩倍,但是將每kWh的成本降低了一半。...

史海拾趣

問答坊 | AI 解惑

畫電路圖一般用什么軟件啊?(新手)

畫電路圖一般用什么軟件啊?我們做實驗報告的時候要用到…

查看全部問答∨

誰能傳個 單容水箱液位控制系統 謝謝

單容水箱液位控制系統就行! 有原理圖,原理和程序,謝謝!…

查看全部問答∨

用單片機控制手機收發短信息

摘要:介紹用MCS-51系列單片機控制手機收發短信息的原理、硬件電路、PDU數據格式和符合GSM07.05協議要求的短信息發送/接收程序,同時給出了一個應用實例。     關鍵詞:單片機 短信息 PDU GSM 接口 GSM(Global System for Mobile comm ...…

查看全部問答∨

那位高手能幫忙解決一下s3c2410的spi口讀寫無線模塊cc2420的問題??

我的問題主要是spi口到底是用查詢方式還是中斷方式。由于水平有限本人用了查詢方式。 下面是主要的程序: /************************************************* SPI low lever fuctions **********************************************/ void ...…

查看全部問答∨

關于spi的一個問題

我用的是三星的2440,在用spi對外設進行配置時,用示波器觀察輸出波形,發現nSS信號始終是高電平,數據信號和始終信號的波形都是對的。 問下大家,這個nSS我們怎么控制?還是說2440配置位master后,nSS是cpu自動控制的? PS:我現在的做法是將nSS ...…

查看全部問答∨

WCE驅動調試

各位英雄:      我的目標板已經固化了內核,但調試發現其中有一個驅動有問題,需要修改,但不想修改后重新編譯內核并下載固化;能不能在PB中編譯驅動后,把新的驅動dll文件直接替換目標機中的同名dll?如果可以,同名dll在何 ...…

查看全部問答∨

困擾我很久的問題~~~定散分

假設我現在有一個基于Arm核的單片機,并且有了一個基于這款單片機的開發平臺。現在想增加一塊多媒體芯片(比如中芯微968或者簡單些的芯片)來擴展一些功能,接線配置方面的事情我已經做好了,假設我用CS3作為片選。我不解的是:我用什么方法來讀寫多 ...…

查看全部問答∨

老師的IIC 程序 拿來看看

先把老師的程序寫到這里,慢慢研讀,#include <string.h>#include \"..\\inc\\44b.h\"#include \"..\\inc\\44blib.h\"#include \"..\\inc\\iic.h\"volatile int f_nGetACK;//獲取中斷響應標志//初始化IIC接口void Iic_init(void){ rIICCON=(1 ...…

查看全部問答∨

關于msp430g2553的硬件串口問題

有誰有沒有硬件串口寄存器的詳細解釋呀,手冊上說的不一樣呀。寫過的給個程序例子吧,看了手冊,在看頭文件我就迷茫了。。。。…

查看全部問答∨

哪位前輩給小弟簡單系統的介紹一下STM32啊。

它跟51有什么區別啊。跟AVR又有什么區別啊。謝謝了。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 峨山| 海口市| 安龙县| 通海县| 南部县| 辉南县| 玛多县| 莱芜市| 河北区| 郓城县| 青河县| 临朐县| 景泰县| 海兴县| 封丘县| 扎鲁特旗| 县级市| 阜新| 芜湖县| 荥阳市| 临桂县| 金昌市| 永仁县| 民乐县| 潮州市| 沾益县| 温宿县| 乐亭县| 丰镇市| 汤原县| 文成县| 滁州市| 涡阳县| 慈溪市| 寿光市| 万年县| 东阳市| 扎兰屯市| 景谷| 东兰县| 漳州市|