最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

STM32CUBEMX(11)--外部中斷(EXTI)

2021-06-04 00:02 作者:記帖  | 我要投稿

概述

????外部中斷和事件控制器 (EXTI) 管理外部和內部異步事件 / 中斷,并生成相應的事件請求到CPU/ 中斷控制器和到電源管理的喚醒請求。本例程主要講解如何使用外部中斷觸發(fā)LED。

硬件準備

? ?首先需要準備一個開發(fā)板,這里我準備的是NUCLEO-F030R8的開發(fā)板。? ?

選擇芯片型號

????使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:

配置時鐘源

????HSE與LSE分別為外部高速時鐘和低速時鐘,在本文中使用內置的時鐘源,故都選擇Disable選項,如下所示:

配置時鐘樹

????STM32F0的最高主頻到48M,所以配置48即可:

中斷口配置

????開發(fā)板上的PC13為藍色按鈕,故配置此端口為中斷口。

????GPIO 口連接到 16 個外部中斷 / 事件線如下圖 。可以看到PC13應該是在EXTI13上。

????外部中斷/事件控制器用于產生事件/中斷請求的邊沿檢測器。每根輸入線都可單獨進行配置,以選擇類型(中斷或事件)和相應的觸發(fā)事件(上升沿觸發(fā)、下降沿觸發(fā)或邊沿觸發(fā))。每根輸入線還可單獨屏蔽。掛起寄存器用于保持中斷請求的狀態(tài)線。

????所以需要配置中斷口是上升沿觸發(fā)或者下降沿觸發(fā)。

????查看向量表可以得知PC15應該開啟EXIT4到15的中斷。

GPIO配置

????PA5為板上LED燈,配置PA5為輸出口,當中斷發(fā)生時候改變IO口極性。

生成工程設置

????注意在生產工程設置中不能出現(xiàn)中文,不然會報錯。

代碼生成設置

????最后設置生成獨立的初始化文件。

生成代碼

配置keil

設置IO口模式,觸發(fā)條件,設置 IO? 口與中斷線的映射關系

????首先在mian.c的MX_GPIO_Init中,GPIO_Initure.Mode=GPIO_MODE_IT_RISING,這里設置為上升沿觸發(fā)。Mode值為GPIO_MODE_IT_RISING(外部中斷上升沿觸發(fā)),GPIO_MODE_IT_FALLING(外部中斷下降沿觸發(fā))或者GPIO_MODE_IT_RISING_FALLING(外部中斷雙邊沿觸發(fā))。

????GPIO_InitStruct.Pull=GPIO_NOPULL,這個為管腳懸空,沒有上下拉。

配置中斷優(yōu)先級(NVIC),并使能中斷

????同樣的,在mian.c的MX_GPIO_Init中,設置好中斷線和 GPIO 映射關系,然后又設置好了中斷的觸發(fā)模式等初始化參數。既然是外部中斷,涉及到中斷我們當然還要設置 NVIC 中斷優(yōu)先級。

????HAL_NVIC_SetPriority的中間0表示搶占優(yōu)先級為0,最右邊的0表示子優(yōu)先級為0。

  1. 搶占優(yōu)先級比子優(yōu)先級的優(yōu)先權更高,這意味搶占優(yōu)先級更高的中斷會先執(zhí)行,而不管子優(yōu)先級的優(yōu)先權,數值越低優(yōu)先級越高。

  2. 同理,如果搶占優(yōu)先級相同,那么就會比較子優(yōu)先級,子優(yōu)先級更高的中斷將會先被執(zhí)行,數值越低優(yōu)先級越高。

  3. 當兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達,則中斷控制器根據他們的響應優(yōu)先級高低來決定先處理哪一個;如果他們的搶占式優(yōu)先級和響應優(yōu)先級都相等,則根據他們在中斷表中的排位順序決定先處理哪一個。

中斷服務函數

????配置完中斷優(yōu)先級之后,接著要做的就是編寫中斷服務函數。中斷服務函數的名字是在 HAL 庫中事先有定義的。STM32F0的IO口外部中斷函數只有3個。

????中斷線 0-1每個中斷線對應一個中斷函數,中斷線 2-3共用中斷函數 ,中斷線 4-15 共用中斷函數。一般情況下,我們可以把中斷控制邏輯直接編寫在中斷服務函數中,但是 HAL 庫把中斷處理過程進行了簡單封裝。

EXTI4_15_IRQHandler

????在stm32f0xx_it.c中,程序開始執(zhí)行EXTI4_15_IRQHandler函數,EXTI4_15_IRQHandler函數只是調用了另一個函數HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13)。

HAL_GPIO_EXTI_Callback

????在stm32f0xx_hal_gpio.c中,HAL_GPIO_EXTI_IRQHandler該函數實現(xiàn)的作用非常簡單,就是清除中斷標志位,然后調用回調函數HAL_GPIO_EXTI_Callback()實現(xiàn)控制邏輯。根據函數名Callback也能看出來這里才是真正執(zhí)行具體功能的函數,該函數需要在mian.c文件中重寫,通過判斷中斷是來自哪個IO口編寫相應的中斷服務控制邏輯。

代碼

????在main.c中,重寫HAL_GPIO_EXTI_Callback。

演示效果

????LED燈隨著按鍵按下改變極性。


STM32CUBEMX(11)--外部中斷(EXTI)的評論 (共 條)

分享到微博請遵守國家法律
吴堡县| 江阴市| 北流市| 临沂市| 当阳市| 黔江区| 华宁县| 沙湾县| 凌海市| 宜兴市| 陆丰市| 青岛市| 政和县| 禹城市| 永新县| 郯城县| 徐闻县| 长沙市| 大余县| 仁怀市| 民乐县| 天门市| 芜湖市| 多伦县| 波密县| 定安县| 泌阳县| 乐清市| 达拉特旗| 财经| 盐源县| 枝江市| 西平县| 桐城市| 新平| 绵阳市| 济源市| 沁水县| 祥云县| 金坛市| 会泽县|