国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2.外部中斷方式檢測按鍵輸入并控制LED示例

這篇具有很好參考價值的文章主要介紹了2.外部中斷方式檢測按鍵輸入并控制LED示例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.什么是中斷

打斷CPU執(zhí)行正常的程序,轉(zhuǎn)而處理緊急程序,然后返回原暫停的程序繼續(xù)運行,就叫中斷。

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

2.中斷向量表

2.1 系統(tǒng)中斷

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

其中,系統(tǒng)中斷表 及對應的說明 如下圖所示:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

我們可以按住 Ctrl 點擊中斷向量表中的 ISR 函數(shù)名,可以進入該函數(shù),可以發(fā)現(xiàn),這些系統(tǒng)函數(shù)雖然都定義了,但是沒有編寫其工作方式,即函數(shù)體。

例如:按如下操作:

第1 步:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

第2步:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

此就是滴答中斷函數(shù):(其他找到 中斷函數(shù)的方法 都一樣)

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

如果用戶需要對中斷內(nèi)容進行定義,就要在對應的中斷函數(shù)內(nèi)編寫對應的中斷執(zhí)行代碼。

其中,SysTick是個非常有用的定時中斷,它能精確產(chǎn)生 1ms 的定時供用戶使用。

2.2 外部可屏蔽中斷(82個可屏蔽中斷)

NVIC采用4位二進制數(shù)設置中斷優(yōu)先級,分為 搶占優(yōu)先級次優(yōu)先級。

1.搶占優(yōu)先級次優(yōu)先級 相同的情況下,自然優(yōu)先級越高,就先執(zhí)行;

2.次優(yōu)先級 相同的情況下,即使次優(yōu)先級 高的中斷正在執(zhí)行,搶占優(yōu)先級 高 的中斷也可以打斷它,并先執(zhí)行;

3.次優(yōu)先級 高的中斷不能打斷 次優(yōu)先級 低的中斷;

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

注意:中斷優(yōu)先級別設置非常重要,但該工作都可以在CUBEMX中可視化完成,比較簡單。

在CUBEMX中設置NVIC方法如下:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

中斷的相關函數(shù)所在位置:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

3.外部中斷的使用

3.1 23個EXIT外部中斷線(16個GPIO線關聯(lián),7個外部事件關聯(lián))

? STM32F407有23個外部中斷,其中16個與GPIO引腳相掛鉤(如下圖所示),另外7個EXIT線與其他外設產(chǎn)生的事件信號相關聯(lián)。

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

外部中斷EXIT線共用及ISR函數(shù)情況:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

另外7個EXIT線連接的對應事件信號:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

3.2 跟GPIO相關的EXIT外部中斷線函數(shù)

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

4.外部中斷按鍵示例

要求:以外部中斷方式檢測按鍵按下,并控制LED的亮滅

第1步:導入先前建立的.ioc文件,就可以在原來的MX配置文件中繼續(xù)添加功能了

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

第2步:輸入新的工程文件名

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

第3步:將引腳從原來的“輸入模式”修改為 “外部中斷”模式

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

按鍵引腳修改完成以后的前后對比:

修改以前:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

修改以后:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

然后設置NVIC優(yōu)先級:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

第4步:保存,點擊生成代碼:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

第5步 生成代碼分析

main.c主程序分析:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

main.h 對引腳號、端口的宏定義:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

在文件 stm32f4xx_it.c中,自動生成了4個ISR的代碼框架,如下圖所示:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

CTRL鍵,進入到該函數(shù)

HAL_GPIO_EXTI_IRQHandler()

中,這些ISR最終都要調(diào)用回調(diào)函數(shù)

HAL_GPIO_EXTI_Callback()

如下圖所示:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

因此,我們只需要重新實現(xiàn) 該 回調(diào)函數(shù) 的功能, 就可以完成中斷的任務了。

第6步 編寫用戶功能代碼

在其中調(diào)用外部中斷軟中斷的宏函數(shù):2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

在gpio.c中,用戶沙箱中重新編寫該“回調(diào)函數(shù)”:

/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == Key_Up_Pin)     //上按鍵  按下,兩LED燈翻轉(zhuǎn)
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(500);
	}
	else if(GPIO_Pin == Key_Right_Pin) //右上按鍵 按下,LED2燈翻轉(zhuǎn)
	{
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(1000);
	}
	else if(GPIO_Pin == KeyDown_Pin)   //下上按鍵  按下,上按鍵產(chǎn)生軟中斷,兩LED燈翻轉(zhuǎn)
	{
		__HAL_GPIO_EXTI_GENERATE_SWIT(Key_Up_Pin);
		HAL_Delay(1000);
	}
	else if(GPIO_Pin == KeyLeft_Pin)  //左上按鍵  按下,LED1燈翻轉(zhuǎn)
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_Delay(1000);
	}
}
/* USER CODE END 2 */

還需要對以下系統(tǒng)函數(shù)調(diào)整語句位置:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32

最后實現(xiàn)功能:

  • 按下 上按鍵,兩個LED輸出翻轉(zhuǎn);
  • 按下 下按鍵,產(chǎn)生EXTI0軟中斷,模擬 上按鍵 按下;
  • 按下 右按鍵,LED2輸出翻轉(zhuǎn);
  • 按下 左按鍵,LED1輸出翻轉(zhuǎn);

中斷優(yōu)先級測試:

2.外部中斷方式檢測按鍵輸入并控制LED示例,# STM32F407高效開發(fā)學習教程,嵌入式硬件,stm32文章來源地址http://www.zghlxwxcb.cn/news/detail-849702.html

  • 按下 左按鍵 后,再快速按下右按鍵 ,LED2不會立刻翻轉(zhuǎn),需要等待1000ms后再變化。
  • 按下 下按鍵,產(chǎn)生EXTI0軟中斷,執(zhí)行1000ms的延時后,再進入 上按鍵 產(chǎn)生的中斷,實現(xiàn)兩LED翻轉(zhuǎn)。

到了這里,關于2.外部中斷方式檢測按鍵輸入并控制LED示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【stm32----按鍵中斷實驗,按鍵控制LED燈】

    【stm32----按鍵中斷實驗,按鍵控制LED燈】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1滅; 2、按下KEY2,LED2亮,再次按下KEY2,LED2滅; 3、按下KEY3,LED3亮,再次按下KEY3,LED3滅; 一、頭文件 1、gpio.h 2、key.h 二、初始化函數(shù)及功能函數(shù) 1、gpio.c 2、key.c 三、中斷處理函數(shù) do_irq.c 四、主函數(shù) main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    瀏覽(25)
  • 驅(qū)動——按鍵中斷控制LED燈實驗

    要求:按鍵按一下燈亮,再按一下燈滅 注:由于開發(fā)板位置,為了方便一一對應觀察,采用key1控制LED3,key2控制LED2,key3控制LED1 0、添加相關設備樹節(jié)點信息 ①按鍵相關引腳,通過原理圖可得: key1------gpiof9; key2------gpiof7; key3------gpiof8 ②LED燈相關引腳: led1-----gpioe10; led2---

    2023年04月18日
    瀏覽(27)
  • stm32按鍵控制LED燈亮滅(中斷法)

    stm32按鍵控制LED燈亮滅(中斷法)

    用按鍵控制STM32上的LED燈亮滅,可以采用輪詢法和中斷法。輪詢法需要不斷檢測按鍵的狀態(tài),消耗MCU;而中斷法只是在按下的那一刻觸發(fā)中斷,控制燈亮滅。輪詢法相對于更常規(guī),容易操作。因此我們這里講的用中斷法。關于中斷的概述,這里不作介紹,只講操作,分析代碼

    2024年02月07日
    瀏覽(22)
  • ARM day9 (按鍵中斷控制led亮滅)

    ARM day9 (按鍵中斷控制led亮滅)

    ?保存現(xiàn)場 異常的處理流程,保存現(xiàn)場會做哪些事情(四大步三小步) ----CPU自動完成 1.保存CPSR寄存器中的值,到SPSR_mode寄存器中 2.修改CPSR寄存器對應的位 ????????1修改CPSR寄存器對應的狀態(tài)位(T位) ????????2根據(jù)需要,禁止相應中斷位(I位 / F位) ????????3修改CPSR寄存

    2024年02月13日
    瀏覽(23)
  • STM32——05-按鍵、時鐘控制、中斷復位 點亮LED燈

    STM32——05-按鍵、時鐘控制、中斷復位 點亮LED燈

    如何點亮一顆LED燈 ? 編程實現(xiàn)點燈 常用的?GPIO HAL?庫函數(shù): void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_TogglePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin ); ?結(jié)構(gòu)體? GPIO_InitTypeDef? 定義:

    2024年02月08日
    瀏覽(20)
  • 夜深人靜學32系列10——GPIO中斷/NVIC/EXTI/SYSCFG詳解,外部中斷控制LED

    夜深人靜學32系列10——GPIO中斷/NVIC/EXTI/SYSCFG詳解,外部中斷控制LED

    上期我們學習了GPIO驅(qū)動數(shù)碼管/蜂鳴器/LED和按鍵等外設,本期我們一起來學習STM32中斷的相關內(nèi)容 當CPU正在處理某個事件的時候,外界發(fā)生了緊急事件請求,CPU需要暫停當前的工作,轉(zhuǎn)而去處理這個緊急事件,處理完之后,再次回到之前被中斷的地方,繼續(xù)執(zhí)行原來的工作,

    2024年01月16日
    瀏覽(20)
  • 物聯(lián)網(wǎng)|按鍵實驗---學習I/O的輸入及中斷的編程|函數(shù)說明的格式|如何使用CMSIS的延時|讀取通過外部中斷實現(xiàn)按鍵捕獲代碼的實現(xiàn)及分析-學習筆記(14)

    物聯(lián)網(wǎng)|按鍵實驗---學習I/O的輸入及中斷的編程|函數(shù)說明的格式|如何使用CMSIS的延時|讀取通過外部中斷實現(xiàn)按鍵捕獲代碼的實現(xiàn)及分析-學習筆記(14)

    1 代碼的流程分析 2 代碼的實現(xiàn) 庫函數(shù)HAL_Init(void)分析: HAL_Delay()系統(tǒng)延時的步驟: 它的實現(xiàn)步驟如下: 1.用變量獲得系統(tǒng)時鐘源計數(shù)器的值 2.獲得要延遲時間的參數(shù)值 3.比較兩者大小,若時鐘計數(shù)器的值大于要實現(xiàn)延遲的值,就會困在循環(huán)里;反之,跳出循環(huán),延時完成。

    2024年02月14日
    瀏覽(24)
  • STM32矩形(矩陣)按鍵(鍵盤)輸入控制LED燈 ——4*4矩陣按鍵源碼解析

    STM32矩形(矩陣)按鍵(鍵盤)輸入控制LED燈 ——4*4矩陣按鍵源碼解析

    本文基于標準函數(shù)庫的工程實現(xiàn)stm32F103C8T6使用4*4的矩陣按鍵控制LED燈的亮滅及閃爍等功能。 程序源碼:鏈接:https://pan.baidu.com/s/1_MPhvMduKCTP0MPG-Gtw3A?pwd=2syk? 提取碼:2syk 文章目錄 一、矩形鍵盤介紹 1、硬件電路基本原理 2、兩種識別方法介紹 3、硬件接線即使用 二、程序源碼

    2024年02月04日
    瀏覽(26)
  • LED燈閃爍拓展實驗——單按鍵控制LED燈不同閃爍方式

    LED燈閃爍拓展實驗——單按鍵控制LED燈不同閃爍方式

    實現(xiàn)平臺:Vivado2018.3 1. 使用按鍵KEY0和KEY_1分別控制LED0和LED1兩個LED燈的閃爍方式; 2. 當沒有按鍵按下時,兩個LED燈均不亮; 3. 當按鍵KEY0按下后,LED0燈閃爍,當按鍵KEY0再次按下后則LED1燈閃爍,如此循環(huán)往復; 4. 當按鍵KEY1按下后,LED0和LED1交替閃爍,當按鍵KEY1再次按下后則

    2024年01月23日
    瀏覽(17)
  • stm32單片機開關控制LED燈(中斷方式)(proteus電路圖)

    stm32單片機開關控制LED燈(中斷方式)(proteus電路圖)

    ? 補充一點:拼多多上面LED額定電流20mA,額定電壓2V,額定電阻100歐姆,后邊這個是STM32 如果只是用面包板做實驗,輸入輸出都不是很多,就直接用灌電流的方式把LED直接接到STM32了,即使是設計產(chǎn)品,如果能夠直接接,那么肯定也是不會浪費錢去買額外的原件的,所以只有

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包