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

STM32F0單片機如何用一個GPIO引腳來觸發中斷

發布者:HappyExplorer最新更新時間:2024-05-10 來源: elecfans關鍵字:STM32F0  單片機  GPIO  觸發中斷 手機看文章 掃描二維碼
隨時隨地手機看文章

1. 按鍵如何觸發中斷

我們從一個例程看一下,如何用一個GPIO引腳來觸發中斷,來控制另一個引腳的翻轉去控制LED指示燈。


我們用 Keil 打開下面這個工程:

STM32Cube_FW_F0_V1.11.0ProjectsSTM32F030R8-NucleoExamplesGPIOGPIO_EXTIMDK-ARMProject.uvprojx

編譯下載運行此代碼,然后按壓 B1 USER 這個按鍵,每一次按壓會觸發板上一個LED燈翻轉一次。這個功能也很簡單,但它牽涉到的東西卻不少。看一下代碼:

poYBAGL0dQuADHVPAACEzR_lGo8262.png

上一篇文章講了如何翻轉GPIO引腳,所以現在我們只關注一下如何用一個引腳觸發中斷吧。main()函數里調用了一個外部中斷模塊(EXTI)初始化后就進入while循環了。

我們在下面可以找到這個初始化函數的實現。它調用HAL庫函數對按鍵連接的引腳PC13做了初始化,把此引腳初始化為能觸發中斷的模式。

pYYBAGL0dSSAOr_jAAD-tegA2iw829.png

初始化函數的下面是一個回調函數(Callback Function)。在此函數中翻轉了連接LED的引腳。我們接下來分別講一下這個回調函數和如何把一個GPIO引腳初始化為中斷模式。

2. 回調函數

回調函數這個概念,解釋可以說五花八門,什么原因呢?因為這好像不是一句自然(人)語言(話)。咱們還是打個比方好理解一些。

好比你在廚房做菜,突然發現醬油沒了。你叫你兒子去給你打醬油,兒子就是你的驅動。兒子聽到你的召喚,說:行啊,老爸,但你得先給我點錢啊!你看,兒子這就是回調(Callback)。一會兒兒子打醬油回來了,然后把醬油交給你,這也是回調。

pYYBAGL0dT-ALExrAAB_VTSltZU096.png

那我們回到程序,看一下應用程序(Application),驅動(Driver)和回調函數(Callback Function)是什么關系。如果應用程序調用一個驅動,這個驅動在執行前先調用一個函數來獲取一些參數,而這些參數需要由應用程序提供,所以此函數位于應用層,它就是一個回調函數。還有一種情況就是驅動執行完畢,通過調用應用層的一個函數返回結果,或通知應用層執行完畢,此函數也是回調函數。

下面就是從中斷發生,一直到應用層的回調路徑:

B1 USER 按鍵(連接至PC13引腳)按下,中斷發生EXTI4_15_IRQHandler     <-startup_stm32f030x8.sEXTI4_15_IRQHandler(void)     <-stm32f0xx_it.cHAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)     <- stm32f0xx_hal_gpio.c

HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)     <-main.c

那么如何才能讓PC13觸發這個中斷呢?

3. GPIO中斷引腳配置

MCU是如何把一個引腳電平的變化和一個中斷聯系起來的呢?我們馬上想到給每個GPIO引腳分配一個中斷向量就好了。當一個引腳電平變化,馬上就可以跳轉到自己對應的中斷服務程序。這確實是最簡單的辦法,但MCU一般都有幾十個引腳,如果這樣做像M0這種內核只支持32個外部中斷,根本就不夠用的。所以我們看STM32F030僅支持16個外部中斷,又在中斷向量表中進一步縮減為3個中斷向量。

pYYBAGL0dViAWge0AADLtzGx2Ec974.png

RM0360 STM32F030 Reference manual

外部中斷0至15

0,1對應一個中斷向量(5號中斷);

2,3對應一個(6號中斷);

4至15對應一個(7號中斷)。

STM32F030的16個外部中斷是如何對應到各個引腳上的呢?

這就要通過 EXTI (Extended interrupts and events controller)這個模塊。它除了可以完成中斷引腳的選擇(映射),還可以配置是上升沿還是下降沿觸發,也可以屏蔽(Mask)某個引腳。下面的示意圖簡要的顯示了這種關系。

poYBAGL0dXKAAnMIAAEaBvvciz8676.png

大家注意,圖中這些模塊雖然都在一個芯片內,但是EXTI是芯片級模塊,NVIC是在M0內核之中。

相關寄存器介紹:

pYYBAGL0dY-ADxwWAADGwz1YYUc923.png

一共有4個這樣的寄存器:

SYSCFG_EXTICR1,SYSCFG_EXTICR2,SYSCFG_EXTICR3,SYSCFG_EXTICR4

每一個寄存器對應著4個引腳的選擇。下面的這些寄存器都有 32 bits (Bit31 - Bit0),每一個bit對應一個中斷。

EXTI_IMR (Interrupt mask register)

0: 屏蔽所對應的中斷。1: 允許對應中斷。

EXTI_RTSR (Rising trigger selection register)

0: 禁止上升沿觸發。1: 使能上升沿觸發。

EXTI_FTSR (Falling trigger selection register)

0: 禁止下降沿觸發。1: 使能下降沿觸發。

如果上升沿和下降沿都設置為1,那么在上升沿和下降沿都會觸發中斷。

EXTI_PR (Pending register)

0: 沒有中斷請求。1: 有中斷請求。

當中斷發生使此寄存器某一位被置1后,在此位寫入1可以清除此標志位。

現在大家再返回去,理解代碼就會容易一些了。


關鍵字:STM32F0  單片機  GPIO  觸發中斷 引用地址:STM32F0單片機如何用一個GPIO引腳來觸發中斷

上一篇:基于STM32F030對24LC02進行代碼讀寫
下一篇:stm32多線程 單片機如何實現多線程

推薦閱讀最新更新時間:2025-04-17 06:47

ARM7單片機(學習ing)—(一)、輸入/輸出端口GPIO編程—01
一、輸入/輸出端口GPIO編程 一—(01)、一位數碼管靜態顯示(通過74HC595實現) 1、管腳連接模塊 首先介紹一下LPC2106的相關的管腳~~ 特性:可以實現獨立的管腳配置 應用:管腳連接模塊的用途是將管腳配置為需要的功能(這一章節主要就是介紹GPIO功能~~別的會在接下來的章節中分別予以介紹~~) 描述:管腳連接模塊可以使所選管腳具有一個以上的功能。配置寄存器控制多路開關來連接管腳與片內外設。外設在激活和任何相關只讀使能之前必須連接到適當的管腳。任何使能的外設功能如果沒有映射到相應的管腳,則被認為是無效的。 寄存器的描述: 管腳連接模塊包括兩個寄存器: 管腳功能寄存器0:(PINSEL0) PINSEL0寄存器按
[單片機]
ARM7<font color='red'>單片機</font>(學習ing)—(一)、輸入/輸出端口<font color='red'>GPIO</font>編程—01
STM32F0紅外發射功能的應用
久聞STM32F0系列內置IR_OUT紅外發射功能,此次有幸得到社區贈送STM32F0308-DISCOVERY,終于有機會動手體會。 在許多應用場合需要紅外發射管連續發送經過調制的38KHZ脈沖信號,經過接收頭接收后送信號處理電路來判斷其間有否物體經過。以往使用單片機來處理需要先從IO口產生38KHZ的PWM信號,再通過定時器中斷來控制PWM信號的開啟和關斷。本例中定時器需要每500微秒中斷一次來執行該任務,當CPU還有其他更重要的任務要處理日就顯得有些緊張。 圖1 STM32F0系列的一個特色是增加了IR_OUT功能,它在內部把TIM17-CCR1和TIM16-CCR1經過與非門從IR_O
[單片機]
STM32F0樣片及探索套件在線購買心得
意法半導體的STM32家族又添新軍:STM32 F0系列微控制器。自推出之日起,同步的樣片、評估板及探索套件就可在線購買,這是ST為STM32 F0系列專門設計的重磅出擊模式,下面就請登錄 www.stm32f0.com.cn ,隨小編一同來體驗一下吧。 點擊現在選購,即跳轉到力源的STM32F0在線采購平臺,即可立即訂購STM32F0系列產品。但小編資訊客服之后發現只有C8T和R8T有現貨,其他的都需要預定。 另外,據意法官方宣傳,開發人員還可以購買價值7,99美元的STM32F0探索套件。探索套件包含一個微型微控制器評估板。這個探索板配備按鍵和LED指示燈,可通過USB數據線直接連接PC機,板
[單片機]
<font color='red'>STM32F0</font>樣片及探索套件在線購買心得
STM32庫中關于GPIO_PinRemapConfig函數的使用
對于初學習者來說為什么用到PB3和PB4時無法控制輸出呢? 下面就這一問題進行分析講解。 首先,STM32F10x系列的MCU復位后,PA13/14/15 & PB3/4默認配置為JTAG功能。有時我們為了充分利用MCU I/O口的資源,會把這些 端口設置為普通I/O口。具體方法如下: 在GPIO_Configuration(); // 配置使用的 GPIO 口: GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // 改變指定管腳的映射 GPIO_Remap_SWJ_Disable,SWJ 完全禁用(JTAG+SW-DP),而且管腳映射函數,需要在GPIO配置函數GP
[單片機]
STM32——GPIO設置:快速點亮第一個LED燈
簡介 不同的開發板的原理圖結構也不盡相同,筆者在這里使用野火的MINI-V3(F103VET6)簡易開發板對GPIO口的設置做一個簡單的介紹,并實現按鍵控制LED燈的亮滅。方便讀者可以快速熟悉并靈活應用。 原理圖分析 首先我們來看一下發光二極管部分和按鍵部分的原理圖。 下面是按鍵的原理圖部分: 在這里,我們將使用KEY1(PA0)來控制紅燈PB5的亮滅。由原理圖可知,其控制LED燈的PB5引腳為低電平時,燈亮。當KEY1按下時,PA0引腳由之前的低電平轉為高電平(3V3)。明確了目的之后我們就可以分析GPIO口并進行設置了。 GPIO設置 經過上述的功能明確之后,我們將其分為兩大類,分別是輸入類(如按鍵)和輸出類
[單片機]
STM32——<font color='red'>GPIO</font>設置:快速點亮第一個LED燈
STM32GPIO外部中斷總結
1 STM32中斷分組 STM32 的每一個GPIO都能配置成一個外部中斷觸發源,這點也是 STM32 的強大之處。STM32 通過根據引腳的序號不同將眾多中斷觸發源分成不同的組,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0為第一組,那么依此類推,我們能得出一共有16 組,STM32 規定,每一組中同時只能有一個中斷觸發源工作,那么,最多工作的也就是16個外部中斷。STM32F103 的中斷控制器支持 19 個外部中斷/事件請求。每個中斷設有狀態位,每個中斷/事件都有獨立的觸發和屏蔽設置。STM32F103 的19 個外部中斷為: 線 0~15:對應外部 IO 口的輸入中斷。 線 16:連接到 PVD
[單片機]
關于GPIO實現RS485/422通信的研究
1.引言 工程實踐中,對于解決同一個問題,我們常面臨兩種選擇:要么硬件簡單軟件復雜,要么軟件復雜硬件簡單。如某引信系統的DSP電路,需要與內部兩個組部件以及外部多個系統進行接口或者信息交互,且總體要求采用異步串口方式進行通信。此類問題主要有三種解決方案:第一,在DSP的并行總線上擴展UART芯片,通過硬件轉換實現,軟件最簡單;第二,在DSP的McBSP串行總線上擴展UART芯片,軟件有一定的復雜度;第三,不擴展其他硬件直接利用IO引腳通過軟件控制實現,該方法軟件最復雜。根據以往文獻可知在硬件資源允許的前提下,前兩種方法已經得到了廣泛的研究。 然而在產品的研制過程中,常出現引信硬件資源緊張的情況,無法擴展滿足需求的UART,只
[嵌入式]
基于TI MSPM0 MCU的車載充電機插槍喚醒方案
車載充電機(OBC)在整車下電后,為保證低功耗,包括主控MCU在內的絕大部分電路都處于休眠狀態,此時需要一個低功耗的常待機喚醒模塊,檢測充電槍的插槍信號,來喚醒車載充電機主電路。本文將介紹基于TI MSPM0 MCU的喚醒方案,相對于傳統方案,具有高兼容性,高可靠性,便于維護,更低功耗,以及小體積等優點。 1. GB/T 18487.1-2015 在展開講述前,我們需要簡單了解一下國內比較通用的電動汽車的充電協議標準-GB/T 18487.1-2015(電動汽車傳導充電系統 第1部分:通用要求)。 主要的充電握手步驟可以簡單拆分成以下幾點: 車輛檢測CC端口阻值,判斷車端連接頭的連接狀態(斷開/半連接/連接狀態); 充電設備監
[嵌入式]
基于TI MSPM0 <font color='red'>MCU</font>的車載充電機插槍喚醒方案
小廣播
設計資源 培訓 開發板 精華推薦

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 抚远县| 岳阳市| 陆河县| 巴东县| 旌德县| 东乡县| 沾益县| 高青县| 兴文县| 阿荣旗| 砚山县| 阿克陶县| 印江| 奉新县| 白水县| 乌拉特中旗| 呈贡县| 永济市| 泗水县| 大渡口区| 赤城县| 巴塘县| 柯坪县| 鄂托克前旗| 安福县| 霍城县| 平度市| 平安县| 秀山| 诏安县| 兴安县| 广安市| 剑川县| 新郑市| 米泉市| 蒙自县| 灵山县| 鹿邑县| 通辽市| 和平县| 中卫市|