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

STM32—按鍵中斷

這篇具有很好參考價(jià)值的文章主要介紹了STM32—按鍵中斷。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

中斷簡(jiǎn)介

程序

?注:


中斷簡(jiǎn)介

(1)????????EXTI(外部中斷):EXTI是ST公司在其STM32產(chǎn)品上擴(kuò)展的外中斷控制。它負(fù)責(zé)管理映射到GPIO引腳上的外中斷和片內(nèi)幾個(gè)集成外設(shè)的中斷,以及軟件中斷。其輸出最終被映射到NVIC的相應(yīng)通道。因此,配置EXTI中斷的過(guò)程必然包含對(duì)NVIC的配置。

(2)????????NVIC(嵌套向量中斷):嵌套向量中斷控制器,屬于內(nèi)核外設(shè), 管理著包括內(nèi)核和片上所有外設(shè)的中斷相關(guān)的 功能。嵌套向量中斷控制器(NVIC)和處理器核的接口緊密相連,可以實(shí)現(xiàn)低延遲的中斷處理和高效地 處理晚到的中斷。

?????????至于兩者的作用,我們就舉個(gè)例子來(lái)說(shuō)一下。

????????例如下面配置EXTI0的過(guò)程,就要首先配置EXTI控制器(使能相應(yīng)的中斷線,選擇中斷/事件模式,觸發(fā)邊沿極性),然后再配置NVIC控制器(EXTI0映射在NVIC上的通道號(hào),中斷優(yōu)先級(jí),中斷屏蔽狀態(tài))。也就是EXTI類(lèi)比成小門(mén),而NVIC是大門(mén),二者是相互聯(lián)通的,我們使用EXTI來(lái)選擇中斷的中斷源,NVIC判決中斷源的執(zhí)行順序

STM32—按鍵中斷

?程序的編寫(xiě)就是按照這個(gè)流程來(lái)的,這里是有兩條線路,一條事件中斷,另一條為NVIC中斷控制器,編寫(xiě)程序已NVIC中斷為例!

程序

? ? ? ? 為了大家更好的理解,我們就寫(xiě)一個(gè)按鍵中斷來(lái)檢驗(yàn)一下。

LED.c

#include "bsp_led.h"   

 /**
  * @brief  初始化控制LED的IO
  * @param  無(wú)
  * @retval 無(wú)
  */
void LED_GPIO_Config(void)
{		
	GPIO_InitTypeDef	GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
	
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP ;
	GPIO_InitStruct.GPIO_Pin=LED_RED_PIN|LED_GREEN_PIN|LED_YELLOW_PIN;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz ;

	GPIO_SetBits(LED_PORT,LED_RED_PIN|LED_GREEN_PIN|LED_YELLOW_PIN);
	GPIO_Init(LED_PORT,&GPIO_InitStruct);
	

}

LED.h

#ifndef __LED_H
#define	__LED_H

#include "stm32f10x.h"

//LED
#define LED_GPIO_CLK			RCC_APB2Periph_GPIOB

#define LED_GREEN_PIN			GPIO_Pin_0
#define LED_PORT				GPIOB

#define LED_RED_PIN				GPIO_Pin_5
#define LED_YELLOW_PIN			GPIO_Pin_1

#define		ON					1
#define 	OFF					0

#define	LED_GREEN(a)			if(a)\
									{GPIO_ResetBits(LED_PORT,LED_GREEN_PIN);}\
								else\
									{GPIO_SetBits(LED_PORT,LED_GREEN_PIN);}

#define	LED_RED(a)				if(a)\
									{GPIO_ResetBits(LED_PORT,LED_RED_PIN);}\
								else\
									{GPIO_SetBits(LED_PORT,LED_RED_PIN);}


#define	LED_YELLOW(a)			if(a)\
									{GPIO_ResetBits(LED_PORT,LED_YELLOW_PIN);}\
								else\
									{GPIO_SetBits(LED_PORT,LED_YELLOW_PIN);}
//打開(kāi)燈									
#define	LED_G					{LED_GREEN(ON);LED_RED(OFF);LED_YELLOW(OFF);}					
#define	LED_R					{LED_GREEN(OFF);LED_RED(ON);LED_YELLOW(OFF);}
#define	LED_B					{LED_GREEN(OFF);LED_RED(OFF);LED_YELLOW(ON);}

#define LED_G_TOGGLE			{LED_PORT->ODR^=GPIO_Pin_0;}

//BEEPER
#define BEEP_GPIO_CLK			RCC_APB2Periph_GPIOA
#define BEEP_PIN				GPIO_Pin_8
#define BEEP_PORT				GPIOA


void LED_GPIO_Config(void);
void BEEP_Config(void);
#endif /* __LED_H */

KEY.h

#ifndef ___bsp_key____H
#define ___bsp_key____H

#include "stm32f10x.h"

//KEY1
#define KEY1_GPIO_CLK			RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO

#define KEY1_GPIO_PIN			GPIO_Pin_0
#define KEY1_PORT				GPIOA
#define	KEY1_IRQn				EXTI0_IRQn 
#define	KEY1_PortSource			GPIO_PortSourceGPIOA
#define KEY1_PinSource			GPIO_PinSource0
#define KEY1_IRQHandler			EXTI0_IRQHandler
#define	KEY1_Line				EXTI_Line0

//KEY2
#define KEY2_GPIO_CLK			RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO

#define KEY2_GPIO_PIN			GPIO_Pin_13
#define KEY2_PORT				GPIOC
#define	KEY2_IRQn				EXTI15_10_IRQn
#define	KEY2_PortSource			GPIO_PortSourceGPIOC
#define KEY2_PinSource			GPIO_PinSource13
#define KEY2_IRQHandler			EXTI15_10_IRQHandler
#define	KEY2_Line				EXTI_Line13


void KEY_Config(void);

#endif

KEY.c

#include "bsp_key.h"


static void NVIC_Config()
{
	NVIC_InitTypeDef	NVIC_Initstruct;
	
	//嵌套向量KEY1中斷控制器

    //配置優(yōu)先級(jí)組為1,級(jí)別越低,等級(jí)越高
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    //選擇中斷源——KEY1按鍵
	NVIC_Initstruct.NVIC_IRQChannel=KEY1_IRQn;
    //搶占優(yōu)先級(jí)配置為1
	NVIC_Initstruct.NVIC_IRQChannelPreemptionPriority=1;
    //子優(yōu)先級(jí)為1
	NVIC_Initstruct.NVIC_IRQChannelSubPriority=1;
    //使能中斷通道
	NVIC_Initstruct.NVIC_IRQChannelCmd=ENABLE;
	
	NVIC_Init(&NVIC_Initstruct);

    //KEY2按鍵和上面的都一樣
	NVIC_Initstruct.NVIC_IRQChannel=KEY2_IRQn;
	NVIC_Init(&NVIC_Initstruct);
}


void KEY_Config(void)
{		
	GPIO_InitTypeDef	GPIO_InitStruct;
	EXTI_InitTypeDef	EXTI_Initatruct;
	
	
	//KEY1/2時(shí)鐘使能
	RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK,ENABLE);
	RCC_APB2PeriphClockCmd(KEY2_GPIO_CLK,ENABLE);
    
    // 初始化中斷控制器   
	NVIC_Config();
    
    //按鍵屬于輸入,所以這里上拉輸入
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING ;
	GPIO_InitStruct.GPIO_Pin=KEY1_GPIO_PIN;
	
    //EXTI信號(hào)源的選擇
	GPIO_EXTILineConfig(KEY1_PortSource,KEY1_PinSource);
	EXTI_Initatruct.EXTI_Line=EXTI_Line0;
    //配置為中斷模式
	EXTI_Initatruct.EXTI_Mode=EXTI_Mode_Interrupt;
    //上升沿檢測(cè),這里也可以是下降沿后上升下降沿
	EXTI_Initatruct.EXTI_Trigger=EXTI_Trigger_Rising;
    //使能中斷
	EXTI_Initatruct.EXTI_LineCmd=ENABLE;
	EXTI_Init(&EXTI_Initatruct);  

	GPIO_Init(KEY1_PORT,&GPIO_InitStruct);
	
	//KEY2初始化
	RCC_APB2PeriphClockCmd(KEY2_GPIO_CLK,ENABLE);
	GPIO_InitStruct.GPIO_Pin=KEY2_GPIO_PIN;
	GPIO_Init(KEY2_PORT,&GPIO_InitStruct);
	
	GPIO_EXTILineConfig(KEY2_PortSource,KEY2_PinSource);
	EXTI_Initatruct.EXTI_Line=EXTI_Line13;
	EXTI_Initatruct.EXTI_Mode=EXTI_Mode_Interrupt;
	EXTI_Initatruct.EXTI_Trigger=EXTI_Trigger_Falling;
	EXTI_Initatruct.EXTI_LineCmd=ENABLE;
	EXTI_Init(&EXTI_Initatruct);
	
}



stm32f10x_it.c

void KEY1_IRQHandler(void)
{
	if(EXTI_GetITStatus(KEY1_Line)!=RESET)
	{
		LED_B;//這里是根據(jù)自己的要求實(shí)現(xiàn)不同的函數(shù),這里以LED燈的亮滅為例
	}
	EXTI_ClearITPendingBit(KEY1_Line);  
}

void KEY2_IRQHandler(void)
{
	if(EXTI_GetITStatus(KEY2_Line)!=RESET)
	{
		LED_G_TOGGLE;
	}
	EXTI_ClearITPendingBit(KEY2_Line);  
}

?把這些放入程序里面就可以了,當(dāng)然相應(yīng)的頭文件自己注意下,這里沒(méi)有其他的頭文件。

?注:

????????中斷函數(shù)里面的執(zhí)行的函數(shù)依據(jù)自己的要求,這里以LED燈為例。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-402476.html

到了這里,關(guān)于STM32—按鍵中斷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • (STM32)中斷系統(tǒng)和外部中斷

    (STM32)中斷系統(tǒng)和外部中斷

    中斷系統(tǒng):是執(zhí)行和管理中斷的邏輯結(jié)構(gòu) 外部中斷:是眾多能產(chǎn)生中斷的外設(shè)之一 中斷:指的是中斷源(中斷通道),中斷產(chǎn)生CPU暫停正在執(zhí)行程序,去執(zhí)行中斷程序,然后返回。提高效率 F1系列的STM32有68個(gè)中斷源,不同系列需要看手冊(cè) EXTI(外部中斷)、TIM、ADC、USART、SPI、

    2024年02月06日
    瀏覽(23)
  • STM32—按鍵中斷

    STM32—按鍵中斷

    目錄 中斷簡(jiǎn)介 程序 ?注: (1)???????? EXTI(外部中斷):EXTI是ST公司在其STM32產(chǎn)品上擴(kuò)展的外中斷控制。它負(fù)責(zé)管理映射到GPIO引腳上的外中斷和片內(nèi)幾個(gè)集成外設(shè)的中斷,以及軟件中斷。其輸出最終被映射到NVIC的相應(yīng)通道。因此,配置EXTI中斷的過(guò)程 必然包含對(duì)NVIC的配置

    2023年04月08日
    瀏覽(14)
  • 外部中斷實(shí)驗(yàn)(stm32)

    外部中斷實(shí)驗(yàn)(stm32)

    說(shuō)明:以下內(nèi)容參考正點(diǎn)原子資料 中斷服務(wù)函數(shù)名稱(chēng)默認(rèn) 參考前面的文章實(shí)驗(yàn)代碼 參考前面的文章實(shí)驗(yàn)代碼 參考前面的文章實(shí)驗(yàn)代碼 GPIO 的管教 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F(xiàn),G)分別對(duì)應(yīng)中斷線 0~15,這樣每個(gè)中 斷線對(duì)應(yīng)了最多 7 個(gè) IO 口,以線 0 為例:它對(duì)應(yīng)了 GPIOA.0、GPIOB.0、

    2024年02月13日
    瀏覽(16)
  • 【stm32----按鍵中斷實(shí)驗(yàn),按鍵控制LED燈】

    【stm32----按鍵中斷實(shí)驗(yàn),按鍵控制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)
  • STM32--EXTI外部中斷

    STM32--EXTI外部中斷

    前文回顧---STM32--GPIO 相關(guān)回顧--有關(guān)中斷系統(tǒng)簡(jiǎn)介 目錄 STM32中斷 NVIC ?EXTI外部中斷 AFIO EXTI框圖 旋轉(zhuǎn)編碼器簡(jiǎn)介 對(duì)射式紅外傳感器工程 代碼: 旋轉(zhuǎn)編碼器工程 代碼: 先說(shuō)一下 基本原理 : 1. 中斷請(qǐng)求發(fā)生 :外部事件(如按鍵觸發(fā),定時(shí)器溢出等)引起中斷請(qǐng)求信號(hào); 2. 中

    2024年02月12日
    瀏覽(21)
  • STM32 HAL庫(kù) STM32CubeMx -- 外部中斷

    STM32 HAL庫(kù) STM32CubeMx -- 外部中斷

    中斷,是指處理機(jī)處理程序運(yùn)行中出現(xiàn)的緊急事件的整個(gè)過(guò)程。程序運(yùn)行過(guò)程中,系統(tǒng)外部、系統(tǒng)內(nèi)部或者現(xiàn)行程序本身若出現(xiàn)緊急事件,處理機(jī)立即中止現(xiàn)行程序的運(yùn)行,自動(dòng)轉(zhuǎn)入相應(yīng)的處理程序(中斷服務(wù)程序),待處理完后,再返回原來(lái)的程序運(yùn)行,這整個(gè)過(guò)程稱(chēng)為程序

    2024年02月08日
    瀏覽(21)
  • 【STM32】STM32學(xué)習(xí)筆記-EXTI外部中斷(11)

    【STM32】STM32學(xué)習(xí)筆記-EXTI外部中斷(11)

    中斷 :在主程序運(yùn)行過(guò)程中,出現(xiàn)了特定的中斷觸發(fā)條件(中斷源),使得CPU暫停當(dāng)前正在運(yùn)行的程序,轉(zhuǎn)而去處理中斷程序,處理完成后又返回原來(lái)被暫停的位置繼續(xù)運(yùn)行 中斷優(yōu)先級(jí) :當(dāng)有多個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),CPU會(huì)根據(jù)中斷源的輕重緩急進(jìn)行裁決,優(yōu)先響應(yīng)更加

    2024年02月04日
    瀏覽(21)
  • STM32入門(mén)學(xué)習(xí)之外部中斷

    STM32入門(mén)學(xué)習(xí)之外部中斷

    1.STM32的IO口可以作為外部中斷輸入口。本文通過(guò)按鍵按下作為外部中斷的輸入,點(diǎn)亮LED燈。在STM32的19個(gè)外部中斷中,0-15為外部IO口的中斷輸入口。STM32的引腳分別對(duì)應(yīng)著0-15的外部中斷線。比如,外部中斷線0對(duì)應(yīng)著GPIOA.0-GPIOG.0,以此類(lèi)推就可以將所以的IO映射到0-15個(gè)外部中斷

    2024年02月14日
    瀏覽(18)
  • STM32庫(kù)函數(shù)開(kāi)發(fā)外部中斷

    STM32庫(kù)函數(shù)開(kāi)發(fā)外部中斷

    目錄 函數(shù)介紹:? ? ? ? ? ? ? ? STC32F10x_rcc: GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) NVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup) NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) EXTI15_10_IRQHandler ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) EXTI_ClearITPendingB

    2024年02月16日
    瀏覽(14)
  • STM32 外部中斷 標(biāo)準(zhǔn)庫(kù)函數(shù)

    STM32 外部中斷 標(biāo)準(zhǔn)庫(kù)函數(shù)

    中斷對(duì)于單片機(jī)來(lái)說(shuō)是必不可少的存在。例如使用一個(gè)按鍵打開(kāi)一個(gè)燈的方法,就可以使用 中斷 的方式實(shí)現(xiàn),并且效果更好。 中斷的概念比較容易理解,就相當(dāng)于做飯的時(shí)候,你的主任務(wù)是炒菜,炒菜炒到一半,來(lái)了個(gè)電話你就需要優(yōu)先去接電話,然后電話處理完后才會(huì)繼

    2024年01月16日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包