STM32F1筆記(五)外部中斷EXTI

STM32的每個IO都可以作為外部中斷的中斷輸入口。

STM32F103的中斷控制器支持19個外部中斷/事件請求。每個中斷設有狀態為,每個中斷/事件都有獨立的觸發和屏蔽設置。

STM32F103的19個外部中斷為:

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

EXTI線16:連接到PVD輸出。(Programmable?Votage?Detector?可編程電壓監測器。連到EXTI的電源電壓檢測(PVD)中斷)

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

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

?

STM32供IO口使用的中斷線只有16個,而STM32的IO口遠超16個。

所以STM32的GPIOx.0~GPIOX.15(x=A,B,C,D,E,F,G)分別對應中斷線0~15。

以線0為例,對應了GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。

從《STM32中文參考手冊》里可以看到映像,如下圖:

但是中斷線每次只能連接到1個IO口上,需要通過配置來指定中斷線配置到哪個GPIO上。

在標準函數庫中,該配置函數為:

/*** @brief  Selects the GPIO pin used as EXTI Line.* @param  GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.*   This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).* @param  GPIO_PinSource: specifies the EXTI line to be configured.*   This parameter can be GPIO_PinSourcex where x can be (0..15).* @retval None*/
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)

配置示例:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);

GPIO_PinSource2即為EXTI2的線,在庫里定義命名為EXTI_Line2。

EXTI_Line2相關配置如下:

EXTI_InitTypeDef EXTI_InitStructure;EXTI_InitStructure.EXTI_Line = EXTI_Line2;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

接著需要配置中斷的優先級:

NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

配置結束后就要編寫中斷服務函數。

需要注意的是,中斷線0~4每個中斷線各自對應一個中斷服務函數

EXPORT  EXTI0_IRQHandler           [WEAK]
EXPORT  EXTI1_IRQHandler           [WEAK]
EXPORT  EXTI2_IRQHandler           [WEAK]
EXPORT  EXTI3_IRQHandler           [WEAK]
EXPORT  EXTI4_IRQHandler           [WEAK]

中斷線5~9共用一個中斷服務函數

EXPORT  EXTI9_5_IRQHandler         [WEAK]

中斷線10~15共用一個中斷服務函數

EXPORT  EXTI15_10_IRQHandler       [WEAK]

在中斷服務函數里,經常需要使用兩個函數。

1、判斷某個中斷線上的中斷是否發生(即相關標志位是否置位);

2、清除某個中斷線上的中斷標志位。

示例:

void EXTI2_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line2) != RESET){    ...EXTI_ClearITPendingBit(EXTI_Line2);}
}

除了EXTI_GetITStatus之外函數庫還提供了EXTI_GetFlagStatus,兩者的區別是EXTI_GetITStatus會先判斷這種中斷是否使能,使能了才去判斷中斷標志位,而EXTI_GetFlagStatus直接用來判斷狀態標志位。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374406.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

您不想錯過的十大Java書籍

我們通過閱讀書籍并進行實驗來學習。 因此,必須選擇最佳的可用選項。 在本文中,我想與一些書分享我的經驗,以及它們如何幫助您發展為Java開發人員。 讓我們從頭開始,對于任何Java學生來說,前三本書都是一個很好的起點。…

pythonos模塊_Python3 入門教程——os模塊使用(文件/目錄操作)

前言 os模塊是Python標準庫中一個用于訪問操作系統的功能模塊。 使用os模塊中提供的接口,可以輕松實現跨平臺訪問。 在os模塊中提供了一系列訪問操作系統功能的接口,如,新建目錄、刪除目錄、變更目錄、重命名目錄.... 新建單級目錄 基本語法&…

當數據量很少的時候,tableview會顯示多余的cell--iOS開發系列---項目中成長的知識二...

當數據量很少的時候,tableview會顯示很多的cell,而且是空白的,這樣很不美觀 所以使用下面的方法可以去掉多余的底部的cell 原理是:設置footerView為frame 是 CGRectZero ,造成一種假象! UIView *v [[UIView alloc] initWithFrame:CGRectZero]; [self.myTable setTableFooterVi…

逗牙搞笑網www.idouya.xin

有一天,小明問媽媽“媽媽,媽媽,爸爸是什么啊?”媽媽剛剛和爸爸吵架,生氣的回答“孩子,記住所有的男的都是色狼!”小明有去問爸爸“爸爸,爸爸,媽媽是什么啊?”…

STM32F1筆記(六)獨立看門狗IWDG

STM32F1內置了兩個看門狗,獨立看門狗IWDG和窗口看門狗WWDG,可以用來檢測和解決由軟件錯誤引起的故障。 IWDG最適合應用于那些需要看門狗作為一個在主程序之外,能夠完全獨立工作,并且對時間精度要求較低的場合。WWDG最適合那些要求…

在JSF 2中對定制驗證器進行參數化

在JSF 2中編寫自定義驗證器并不復雜。 您實現Validator接口,添加FacesValidator批注,并在faces-config.xml中插入Validator聲明, 僅此而已 。 一塊蛋糕。 但是,讓我們考慮以下情形: 您需要自定義日期驗證器&#xff0c…

python繪制散點圖的函數_python matplotlib更新函數的散點圖

有幾種方法可以對matplotlib圖進行動畫處理.在下文中,我們將使用散點圖查看兩個最小示例. (a)使用交互式模式plt.ion() 要進行動畫制作,我們需要一個事件循環.獲取事件循環的一種方法是使用plt.ion()(“交互式打開”).然后需要首先繪制圖形,然后可以循環更新繪圖.在循環內部,我…

偷學來的資料

--矛盾 fis3的pngcrush不支持你的node版本v4.4.0 換成4.2.4就可以了. --工具 淘寶 NPM 鏡像:http://npm.taobao.org/ FIS2 to FIS3:https://github.com/fex-team/fis3/blob/master/doc/docs/fis2-to-fis3.md fis3demo:https://github.com/fex-team/fis3-demo --前端blog/網站 廖…

Java EE6事件:JMS的輕量級替代品

我今天要討論的功能是Java EE 6中的事件機制。一般的想法是觸發一個事件,并讓事件監聽器來接收它。 我創建了這個完全沒有用的示例,但是它的簡單性幫助我專注于重要的內容。 我將從后備操作中觸發LogEvent,該事件將記錄到java.util.Logger中。…

STM32F1筆記(七)WWDG窗口看門狗

窗口看門狗與獨立看門狗最大的不同是中斷,窗口看門狗擁有一個提前喚醒中斷。也就是在快要產生復位的前一段時間(T[6:0]0x40)來提醒需要進行喂狗,否則將復位。因此當窗口看門狗的計數器值減到0x40的時候,產生中斷&#…

求助!求助!網站頁面圖片太多,加載時間太長該怎么辦?

以下是百度統計的診斷,小弟萬般無奈,html上的緩存以及圖片處理技巧欠缺,希望各位大大幫幫忙支個招! 以下元素可在不損失原信息量的前提下進行壓縮: http://www.5atl.com/Style/main.css (大小: …

groovy怎樣從sql語句中截取表名_Mysql和SQL

基本概念1.數據庫DataBase簡稱:DB2.什么數據庫?——用于存儲和管理數據的倉庫。存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說只需創建一次,以后在該程序中就可以調用多次。3.數據庫的特點&#xff1a…

使用java.util.prefs.Preferences代替java.util.Properties

典型的應用程序安裝程序需要向用戶詢問幾個選項,其中一些是配置問題,例如,應用程序應在其上運行的端口,應如何運行等。應用程序必須記住這些選項,并在每個選項中使用它們。跑。 解決此問題的標準方法是將這些選項寫入屬…

STM32F1筆記(八)時鐘

STM32有五種時鐘源 1、HSI。高速內部時鐘,RC振蕩器,頻率為8MHz。 2、HSE。高速外部時鐘,可接石英/陶瓷諧振器,或者借外部時鐘源,頻率范圍為4MHz~16MHz。 3、PLL。鎖相環倍頻輸出,其時鐘輸入源可選擇為HS…

java常用工具類(一)

一、String工具類 package com.mkyong.common; import java.util.ArrayList; import java.util.List; /** * * String工具類. <br> * * author 宋立君 * date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NO…

Oracle定時器調用存儲過程

關于Oracle定時器調用存儲過程的一點總結&#xff0c;如果有不足的地方&#xff0c;希望大家多多指導&#xff0c;也是第一次在博客上寫東西&#xff0c;以前也只是自己總結之后放在硬盤了&#xff0c;后來同事告訴自己&#xff0c;其實寫博客可以獲得很多&#xff0c;不管是知…

python可以下載百度文庫_不用下載券也能下載百度文庫資料,Python幫你輕松搞定...

大家可能平時都有在百度文庫下載文檔的經歷&#xff0c;費盡心思好不容易在文庫找了一份可以用的資料&#xff0c;一看需要用下載券下載&#xff0c;搞的人很煩。 有的人為了節省時間&#xff0c;就任性辦理了個文庫VIP&#xff0c;再也不用糾結怎么下文檔了。如果你是一個百度…

將對象映射到多個XML模式–天氣示例

我已經在EclipseLink JAXB&#xff08;MOXy&#xff09;的XmlPath和外部綁定文件擴展中撰寫了以前的文章。 在本文中&#xff0c;我將通過將單個對象模型映射到兩個不同的XML模式來演示這些擴展的功能。 為了使示例更加“真實”&#xff0c;XML數據將來自提供天氣信息的兩種不同…

STM32F1筆記(九)通用定時器

STM32F1的定時器分為TIME1/8等高級定時器&#xff0c;TIME2~5等通用定時器&#xff0c;TIME6/7基本定時器。三者的區別主要參考《STM32中文參考手冊》里特性的每種定時器主要特性的異同。 先看中文手冊中通用定時器的簡介&#xff1a; 通用定時器的寄存器有一個比較有趣的地方…

佳能MP258的5200錯誤和P08代碼解決方法及清零方法

參考文章轉載于:https://www.cnblogs.com/arcer/p/5659624.html