日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

STM32—中斷詳解(配合按鍵中斷代碼,代碼親測)

發(fā)布者:快樂微笑最新更新時間:2021-09-01 來源: eefocus關(guān)鍵字:STM32  中斷  按鍵中斷 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

在STM32中執(zhí)行中斷主要分三部分:

1.配置NVIC_Config()函數(shù)

2.配置EXTI_Config()函數(shù)

3.編寫中斷服務(wù)函數(shù)

(注:本文章所用代碼為中斷按鍵代碼,實(shí)現(xiàn)了按鍵進(jìn)入中斷從而控制LED亮滅)


配置NVIC_Config()函數(shù)

NVIC 是嵌套向量中斷控制器,控制著整個芯片中斷相關(guān)的功能,它跟內(nèi)核緊密耦合,是內(nèi)核里面的一個外設(shè)。

NVIC_Config()函數(shù)代碼如下:


static void NVIC_Config(void) /* 主要是配置中斷源的優(yōu)先級與打開使能中斷通道 */

{

NVIC_InitTypeDef NVIC_InitStruct ;

/* 配置中斷優(yōu)先級分組(設(shè)置搶占優(yōu)先級和子優(yōu)先級的分配),在函數(shù)在misc.c */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1) ;

/* 配置初始化結(jié)構(gòu)體 在misc.h中 */

/* 配置中斷源 在stm32f10x.h中 */

NVIC_InitStruct.NVIC_IRQChannel = KEY1_EXTI_IRQN ;

/* 配置搶占優(yōu)先級 */

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;

/* 配置子優(yōu)先級 */

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0 ;

/* 使能中斷通道 */

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;

/* 調(diào)用初始化函數(shù) */

NVIC_Init(&NVIC_InitStruct) ;

/* 對key2執(zhí)行相同操作 */

NVIC_InitStruct.NVIC_IRQChannel = KEY2_EXTI_IRQN ;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1 ;

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;

NVIC_Init(&NVIC_InitStruct) ;

}


配置NVIC_Config()的目的是選擇中斷源的優(yōu)先級以及打開中斷通道,主要功能通過配置NVIC初始化結(jié)構(gòu)體NVIC_InitStruct來完成。通俗的講,STM32中有很多中斷,而當(dāng)有多個中斷同時發(fā)生時就涉及到中斷執(zhí)行的先后問題了,所以引入了中斷優(yōu)先級的概念,中斷優(yōu)先級越高中斷就越先執(zhí)行。在這里我們只討論外部中斷的優(yōu)先級,在 NVIC 有一個專門的寄存器:中斷優(yōu)先級寄存器 NVIC_IPRx,用來配置外部中斷的優(yōu)先級。優(yōu)先級高低的比較包括搶占優(yōu)先級和子優(yōu)先級,先比較搶占優(yōu)先級,如果搶占優(yōu)先級相同就比較子優(yōu)先級,從而得出中斷之間的優(yōu)先級高低。NVIC的主要任務(wù)就是給對應(yīng)的中斷源分配中斷優(yōu)先級。 中斷優(yōu)先級分配的原理繁雜,但固件庫編程的好處就是化繁為簡,我們只需要按照NVIC_InitStruct()中的內(nèi)容進(jìn)行配置就行。


接下來簡單講解一下NVIC_Config()函數(shù)的內(nèi)容:


1.首先設(shè)置中斷優(yōu)先級分組

中斷優(yōu)先級分組其實(shí)是確立一個大綱,中斷優(yōu)先級寄存器 NVIC_IPRx中有4個位用來確定優(yōu)先級,中斷優(yōu)先級的分組就是把這4個位分配在搶占優(yōu)先級和子優(yōu)先級中。比如設(shè)定一個位配置搶占優(yōu)先級,其余三個位配置子優(yōu)先級。通過函數(shù)NVIC_PriorityGroupConfig() ; 實(shí)現(xiàn)分組,詳細(xì)代碼如下:


1 /**

2 * 配置中斷優(yōu)先級分組:搶占優(yōu)先級和子優(yōu)先級

3 * 形參如下:

4 * @arg NVIC_PriorityGroup_0: 0bit for 搶占優(yōu)先級

5 *                       4 bits for 子優(yōu)先級

6 * @arg NVIC_PriorityGroup_1: 1 bit for 搶占優(yōu)先級

7 *                            3 bits for 子優(yōu)先級

8 * @arg NVIC_PriorityGroup_2: 2 bit for 

9 *                            2 bits for 子優(yōu)先級

10 * @arg NVIC_PriorityGroup_3: 3 bit for 搶占優(yōu)先級

11 *                           1 bits for 子優(yōu)先級

12 * @arg NVIC_PriorityGroup_4: 4 bit for 搶占優(yōu)先級

13 *                           0 bits for 子優(yōu)先級

14 * @注意 如果優(yōu)先級分組為 0,則搶占優(yōu)先級就不存在,優(yōu)先級就全部由子優(yōu)先級控制

15 */

16 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

17 {

18 // 設(shè)置優(yōu)先級分組

19 SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;

20 }


2.優(yōu)先級分組完畢后,是配置NVIC初始化結(jié)構(gòu)體


typedef struct {

2 uint8_t NVIC_IRQChannel; // 中斷源

3 uint8_t NVIC_IRQChannelPreemptionPriority; // 搶占優(yōu)先級

4 uint8_t NVIC_IRQChannelSubPriority; // 子優(yōu)先級

5 FunctionalState NVIC_IRQChannelCmd; // 中斷使能或者失能

6 } NVIC_InitTypeDef;


初始化結(jié)構(gòu)體的作用是,收集中斷源的信息(包括配置的是哪一個中斷源、中斷源的搶占優(yōu)先級是多少、中斷源的子優(yōu)先級是多少、中斷源的使能是否開啟)。


NVIC_IROChannel:用來設(shè)置中斷源,不同的中斷中斷源不一樣,且不可寫錯,即使寫錯了程序也不會報(bào)錯,只會導(dǎo)致不響應(yīng)中斷。 stm32f10x.h 頭文件里面的 IRQn_Type 結(jié)構(gòu)體定義,這個結(jié)構(gòu)體包含了所有的中斷源。


NVIC_IRQChannelPreemptionPriority和NVIC_IRQChannelSubPriority 分別設(shè)置搶占優(yōu)先級和子優(yōu)先級,具體的值要根據(jù)中斷優(yōu)先級分組來確定。


NVIC_IRQChannelCmd:設(shè)置中斷使能(ENABLE)或者失能(DISABLE),相當(dāng)于一個電源總開關(guān)。


3.最后借助NVIC初始化函數(shù)將NVIC初始化結(jié)構(gòu)體中的信息寫入相應(yīng)的寄存器中 (體現(xiàn)了固件庫編程的優(yōu)點(diǎn),不需要我們深入到寄存器層次去,只需要掌握相應(yīng)函數(shù)的配置即可)


配置EXTI_Config()函數(shù)

EXTI(External interrupt/event controller):外部中斷/事件控制器,管理了控制器的 20個中斷/事件線。每個中斷/事件線都對應(yīng)有一個邊沿檢測器,可以實(shí)現(xiàn)輸入信號的上升沿檢測和下降沿的檢測。 EXTI 可以實(shí)現(xiàn)對每個中斷/事件線進(jìn)行單獨(dú)配置,可以單獨(dú)配置為中斷或者事件,以及觸發(fā)事件的屬性。


按我的理解,EXTI是一個有著多達(dá)20個接口的控制器,它可以為每一個接入接口的信號源配置中斷(或事件)線、設(shè)置信號的檢測方式、設(shè)置觸發(fā)事件的性質(zhì),也就是說,傳入EXTI的僅僅是一個信號,EXTI的功能就是根據(jù)信號傳入的“線”對信號做出相應(yīng)的處理,然后將處理后的信號轉(zhuǎn)向NVIC。 就像一個分揀機(jī)器,傳入的東西經(jīng)過篩選處理被送往不同的地方,只是EXTI分揀的是信號罷了。 如果說NVIC是配置中斷源,那么EXTI就是向NVIC傳送中斷信號。


EXTI功能框圖:

在這里插入圖片描述

EXTI 可分為兩大部分功能,一個是產(chǎn)生中斷,另一個是產(chǎn)生事件,線路1-2-4-5是產(chǎn)生中斷的流程,20/代表著有20條相同的線路。


接下來講解一下EXTI_Config()函數(shù)代碼:


void EXTI_Config() /* 主要是連接EXTI與GPIO */

{

GPIO_InitTypeDef GPIO_InitStruct ;

EXTI_InitTypeDef EXTI_InitStruct ;

NVIC_Config();


/* 初始化要與EXTI連接的GPIO */

/* 開啟GPIOA與GPIOC的時鐘 */

RCC_APB2PeriphClockCmd(KEY1_EXTI_GPIO_CLK | KEY2_EXTI_GPIO_CLK, ENABLE) ;

GPIO_InitStruct.GPIO_Pin = KEY1_EXTI_GPIO_PIN ;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;

GPIO_Init(KEY1_EXTI_GPIO_PORT , &GPIO_InitStruct) ;

GPIO_InitStruct.GPIO_Pin = KEY2_EXTI_GPIO_PIN ;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING ;

GPIO_Init(KEY2_EXTI_GPIO_PORT , &GPIO_InitStruct) ;

/* 初始化EXTI外設(shè) */

/* EXTI的時鐘要設(shè)置AFIO寄存器 */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE) ;

/* 選擇作為EXTI線的GPIO引腳 */

GPIO_EXTILineConfig( KEY1_GPIO_PORTSOURCE , KEY1_GPIO_PINSOURCE) ;

/* 配置中斷or事件線 */

EXTI_InitStruct.EXTI_Line = KEY1_EXTI_LINE ;

/* 使能EXTI線 */

EXTI_InitStruct.EXTI_LineCmd = ENABLE ;

/* 配置模式:中斷or事件 */

EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt ;

/* 配置邊沿觸發(fā) 上升or下降 */

EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising ;

EXTI_Init(&EXTI_InitStruct) ;

GPIO_EXTILineConfig( KEY2_GPIO_PORTSOURCE , KEY2_GPIO_PINSOURCE) ;

EXTI_InitStruct.EXTI_Line = KEY2_EXTI_LINE ;

EXTI_InitStruct.EXTI_LineCmd = ENABLE ;

EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt ;

EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling ;

EXTI_Init(&EXTI_InitStruct);

}


代碼可大體分為三部分:

配置GPIO相應(yīng)引腳、配置EXTI并連接GPIO引腳、傳入NVIC_Config()


1.配置GPIO相應(yīng)引腳

該代碼是通過按鍵產(chǎn)生一個電平信號,然后經(jīng)EXTI處理傳入NVIC產(chǎn)生中斷的,所以要配置連接按鍵的GPIO引腳,主要是設(shè)置相應(yīng)的引腳模式為浮空輸入 。老規(guī)矩,先開啟相應(yīng)GPIO的時鐘,然后配置引腳初始化結(jié)構(gòu)體,再利用初始化函數(shù)將初始化結(jié)構(gòu)體寫入寄存器中。


2.配置EXTI并連接GPIO引腳

要操作外設(shè),首先要打開相關(guān)的時鐘,EXTI掛載在APB2總線上,并且開啟時鐘時要操作AFIO寄存器 ,準(zhǔn)備工作就緒后連接GPIO相應(yīng)的引腳到EXTI中,前面說了EXTI有20個接口,所以特定的引腳有特定的接口,所以要根據(jù)GPIO_EXTILineConfig();函數(shù)選擇用作EXTI線的GPIO引腳,函數(shù)說明如下


/**

  * @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)

{

  uint32_t tmp = 0x00;

  /* Check the parameters */

  assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));

  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));

  

  tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));

  AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;

  AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));

}


其實(shí)對應(yīng)的EXTI線就對應(yīng)GPIO引腳號,這樣看起來還比較直觀。


連接好GPIO引腳與EXTI后就該配置EXTI的初始化結(jié)構(gòu)體了,結(jié)構(gòu)體如下:


typedef struct 

{

uint32_t EXTI_Line; // 中斷/事件線

EXTIMode_TypeDef EXTI_Mode; // EXTI 模式

EXTITrigger_TypeDef EXTI_Trigger; // 觸發(fā)類型

FunctionalState EXTI_LineCmd; // EXTI 使能

 } EXTI_InitTypeDef;


配置此結(jié)構(gòu)體主要是:選擇相應(yīng)的EXTI線 、選擇觸發(fā)模式、選擇產(chǎn)生的結(jié)果(中斷還是事件)、是否使能EXTI線。


EXTI_Line:中斷線選擇,可選 EXTI_0 至 EXTI_19(一共20個)。既然剛才配置好了與GPIO引腳對應(yīng)的EXTI線,所以初始化結(jié)構(gòu)體中的EXTI線就是與GPIO連接的那個線。


EXTI_Mode: EXTI 模式選擇,可選為產(chǎn)生中斷或者產(chǎn)生事件。就是決定信號的發(fā)展方向,是產(chǎn)生中斷呢?還是產(chǎn)生事件呢?此處是中斷。


EXTI_Trigger: EXTI 邊沿觸發(fā)模式,可選上升沿觸發(fā)、下降 沿 觸 發(fā) 或 者 上 升 沿 和 下 降 沿 都 觸 發(fā)。觸發(fā)信號。


EXTI_LineCmd:控制是否使能 EXTI 線,可選使能 EXTI 線或禁用。


初始化結(jié)構(gòu)體配置完畢后交由初始化函數(shù)寫入相應(yīng)的寄存器中。


3.傳入NVIC_Config()

之后就自動傳入NVIC中了。。。


編寫中斷服務(wù)函數(shù)

到這里就萬事俱備只欠東風(fēng)了,中斷的觸發(fā)與處理及優(yōu)先級定義都已經(jīng)安排上了,最后一步就是編寫中斷函數(shù)的內(nèi)容了,只要進(jìn)入中斷就會執(zhí)行中斷函數(shù)中的代碼,所以這是收尾工作。STM32的中斷服務(wù)函數(shù)不同于51單片機(jī)中的中斷服務(wù)函數(shù),STM32的所有中斷函數(shù)都被偷偷安排了,每個中斷都有其固定的名字,只有找到這個名字,在這個固定的函數(shù)名下編寫中斷服務(wù)函數(shù)才是有效的,所有中斷函數(shù)的編寫都要在stm32f10x_it.c 中,如示:

在這里插入圖片描述

從所給的信息可得知外設(shè)的中斷服務(wù)函數(shù)的名字都存放在startup_stm32f10x_xx.s 中,而且是由匯編語言編寫,如示:

在這里插入圖片描述

可知EXTI線0到EXTI線4線都是單獨(dú)的中斷函數(shù)名、EXTI線5到EXTI線9共用一個中斷函數(shù)名、EXTI線10線到EXTI線15線共用一個中斷函數(shù)名。


我們要做的就是以相應(yīng)的EXTI線的中斷函數(shù)名字在stm32f10x_it.c中編寫中斷函數(shù) 如下:


void EXTI0_IRQHandler(void)

{

if(  EXTI_GetITStatus(KEY1_EXTI_LINE)!=RESET)

{

LED1_TOGGLE;   //LED1的亮滅狀態(tài)反轉(zhuǎn)

}

EXTI_ClearITPendingBit(KEY1_EXTI_LINE);

}


void EXTI15_10_IRQHandler(void)

{

if(  EXTI_GetITStatus(KEY2_EXTI_LINE)!=RESET)

{

LED2_TOGGLE;   //LED2的亮滅狀態(tài)反轉(zhuǎn)

}

EXTI_ClearITPendingBit(KEY2_EXTI_LINE);

}


每次進(jìn)入中斷函數(shù)后,靠ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)讀取中斷是否執(zhí)行 ,執(zhí)行完之后要利用void EXTI_ClearITPendingBit(uint32_t EXTI_Line)清除清除中斷標(biāo)志位,以免不斷進(jìn)入中斷


大功告成

到此完整的中斷系統(tǒng)就已經(jīng)完成,主函數(shù)只需調(diào)用即可?。?!

(附上主函數(shù)及倆個頭文件)

希望可以一起交流學(xué)習(xí)

qq:2723808286


#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_key.h"


int main(void)

LED_GPIO_Config();

EXTI_Config();

while(1) 

{

}

}


#ifndef __BSP_KEY_H

#define __BSP_KEY_H


#include "stm32f10x.h"


#define KEY1_EXTI_GPIO_CLK      RCC_APB2Periph_GPIOA

#define KEY1_EXTI_GPIO_PORT     GPIOA

#define KEY1_EXTI_GPIO_PIN      GPIO_Pin_0

#define KEY1_EXTI_IRQN          EXTI0_IRQn      /* 對應(yīng)著引腳號 */

#define KEY1_EXTI_LINE          EXTI_Line0      /* 中斷、事件線對應(yīng)引腳號 */

#define KEY1_GPIO_PORTSOURCE    GPIO_PortSourceGPIOA

#define KEY1_GPIO_PINSOURCE     GPIO_PinSource0

#define  KEY1_EXTI_IRQHANDLER       EXTI0_IRQHandler


#define KEY2_EXTI_GPIO_CLK      RCC_APB2Periph_GPIOC

#define KEY2_EXTI_GPIO_PORT     GPIOC

#define KEY2_EXTI_GPIO_PIN      GPIO_Pin_13

#define KEY2_EXTI_IRQN          EXTI15_10_IRQn

#define KEY2_EXTI_LINE          EXTI_Line13

#define KEY2_GPIO_PORTSOURCE    GPIO_PortSourceGPIOC

#define KEY2_GPIO_PINSOURCE     GPIO_PinSource13

#define  KEY2_EXTI_IRQHANDLER       EXTI15_10_IRQHandler


void EXTI_Config(void);

#endif


#ifndef __BSP_LED_H

#define __BSP_LED_H


#include "stm32f10x.h"


#define LED1_GPIO_CLK   RCC_APB2Periph_GPIOC   /*時鐘*/

#define LED1_GPIO_PORT  GPIOC                  /*端口*/

#define LED1_GPIO_PIN   GPIO_Pin_2             /*引腳*/



#define LED2_GPIO_PIN   GPIO_Pin_3

#define LED2_GPIO_CLK   RCC_APB2Periph_GPIOC

#define LED2_GPIO_PORT  GPIOC


#define digitalTOGGLE(p,i)     {p->ODR ^=i;}

#define LED1_TOGGLE            digitalTOGGLE(LED1_GPIO_PORT,LED1_GPIO_PIN)

[1] [2]
關(guān)鍵字:STM32  中斷  按鍵中斷 引用地址:STM32—中斷詳解(配合按鍵中斷代碼,代碼親測)

上一篇:STM32—重定向printf和getchar函數(shù)到串口
下一篇:STM32—串口通訊詳解

推薦閱讀最新更新時間:2025-06-11 09:04

STM32中斷方式檢測按鍵
1.簡述 對于按鍵,常見的是通過MCU不斷檢測按鍵連接 GPIO 的狀態(tài)變化(高– 低或低— 高),來確認(rèn)是否有按鍵輸入,這樣的缺點(diǎn)很明顯,MCU 一直在循環(huán)檢測,對資源是一種浪費(fèi),不夠高效。對于STM32,GPIO 是可以配置成中斷的,有這個優(yōu)勢,我們就可以通過中斷的方式來檢測 GPIO 上電平的變化,進(jìn)一步的得到按鍵的狀態(tài)。 2.硬件電路 按鍵無上拉電阻,需要在 GPIO 上設(shè)為上拉狀態(tài),提供一個確定電平。 3.驅(qū)動實(shí)現(xiàn) //按鍵初始化做了三件事 ///1.按鍵連接的GPIO初始化;2.中斷配置初始化;3.中斷優(yōu)先級配置 void Key_Init(void) { GPIO_InitTypeDef
[單片機(jī)]
<font color='red'>STM32</font><font color='red'>中斷</font>方式檢測<font color='red'>按鍵</font>
【GD32F470紫藤派開發(fā)板使用手冊】第三講 EXTI-按鍵中斷檢測實(shí)驗(yàn)
3.1實(shí)驗(yàn)內(nèi)容 通過本實(shí)驗(yàn)主要學(xué)習(xí)以下內(nèi)容: EXTI中斷原理; 按鍵中斷檢測原理; 3.2實(shí)驗(yàn)原理 3.2.1NVIC中斷向量控制器 介紹EXTI之前,首先為各位讀者介紹NVIC中斷向量控制器,NVIC為M4內(nèi)核組件,用于實(shí)現(xiàn)高效的異常和中斷處理。NVIC可以支持搶占以及咬尾中斷,具有多達(dá)68種外設(shè)中斷以及4位中斷優(yōu)先等級配置(最多支持16個中斷有限等級),當(dāng)中斷或異常產(chǎn)生時,系統(tǒng)自動將當(dāng)前處理器工作狀態(tài)壓棧,在執(zhí)行完中斷服務(wù)子程序(ISR) 后自動將其出棧。 有關(guān)NVIC中斷相關(guān)配置函數(shù)可參考gd32f4xx_misc.c,其中主要有以下幾個函數(shù),其功能簡介如下表所示。 3.2.2EXTI中斷原理 EXTI為外部中斷
[單片機(jī)]
【GD32F470紫藤派開發(fā)板使用手冊】第三講 EXTI-<font color='red'>按鍵</font><font color='red'>中斷</font>檢測實(shí)驗(yàn)
MSP430用按鍵中斷控制定時器產(chǎn)生持續(xù) 1s 的周期信號
////////////////////////////////////////////////////////////////////////////////////////////////////// // 2012 年吉林省大學(xué)生電子設(shè)計(jì)大賽 C題 聲源定位系統(tǒng) ----(聲源部分) // 要求: 有信號產(chǎn)生電路, 放大電路, 聲音頻率 800Hz 左右, 按一次鍵響聲持續(xù) 1 秒. // 聲源模塊體積不超過 4cm*4cm*4cm. //======================================================================================
[單片機(jī)]
STM32基于標(biāo)準(zhǔn)外設(shè)庫的外部中斷配置
本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)庫的外部中斷配置,以及基于參考手冊如何更加寄存器配置外部中斷 2 STM32的外部中斷 下圖來自《STM32參考手冊》,從整個架構(gòu)圖可以知道,外部中斷的功能可以配置六個寄存器; 中斷屏蔽寄存器(EXTI_IMR) 事件屏蔽寄存器(EXTI_EMR) 上升沿觸發(fā)選擇寄存器(EXTI_RTSR) 下降沿觸發(fā)選擇寄存器(EXTI_FTSR) 軟件中斷事件寄存器(EXTI_SWIER) 掛起寄存器(EXTI_PR) EXTI支持配置20個中斷和事件屏蔽位; GPIO端口以下圖的方式連接到16個外部中斷/事件線上;EXTI_Line0 — EXTI_Line15; EXTI_Line16 連接到PVD
[單片機(jī)]
<font color='red'>STM32</font>基于標(biāo)準(zhǔn)外設(shè)庫的外部<font color='red'>中斷</font>配置
STM32外部中斷大問題
問題:一直進(jìn)入中斷,沒有觸發(fā)信號,也一直進(jìn)入。 描述:開PA0為外部中斷,剛剛很好,一個觸發(fā)信號一個中斷,中斷函數(shù)沒有丟,也沒有搶跑,開PA1為外部中斷也是,都很好,只要能開到3個外部中斷以上,就會出現(xiàn)這種情況,明明沒有觸發(fā)外部中斷,可是中斷服務(wù)函數(shù)還是不斷的++。 問題一:電氣噪聲和抖動 電氣噪聲和抖動是常見的問題,可能會導(dǎo)致STM32的外部中斷不斷觸發(fā),即使沒有明顯的觸發(fā)信號。以下是一些處理電氣噪聲和抖動的方法: 1.添加電容濾波器:在外部中斷引腳上添加適當(dāng)大小的電容,以平滑信號并抑制高頻噪聲。電容的值應(yīng)根據(jù)信號頻率和噪聲特性進(jìn)行選擇。 2.使用濾波器電路:在外部信號引腳前添加濾波器電路,如低通濾波器,以濾除高頻噪
[單片機(jī)]
STM32定時器中斷應(yīng)用實(shí)例
本文將介紹:通過STM32cube mx配置工程文件,實(shí)現(xiàn)定時器中斷的功能; 實(shí)例中使用的是STM32F407芯片 ①STM32cube mx配置工程文件 ②代碼實(shí)現(xiàn) ①STM32cube mx配置工程文件 Step1:使能RCC、選擇外部晶振 Step2:配置時鐘樹 Step3:使能TIM6、配置TIM6 ,1秒產(chǎn)生一次定時器中斷 Step4:配置中斷的優(yōu)先級分組、中斷優(yōu)先級 Step4:使能串口、用于調(diào)試使用 Step5:生成工程文件 ②代碼實(shí)現(xiàn) Step1:編寫串口輸出重定向函數(shù),用于調(diào)試使用;記得添加頭文件stdio.h Step2:開啟定時器中斷 Step3:自定義定時器中斷服務(wù)函數(shù) 先在
[單片機(jī)]
<font color='red'>STM32</font>定時器<font color='red'>中斷</font>應(yīng)用實(shí)例
STM32中斷函數(shù)名
和普通的ARm裸板開發(fā)不同。使用stm32庫函數(shù)編程時,中斷函數(shù)名是固定死的。 具體函數(shù)名可以在啟動文件startup_stm32fxxx_xd.s的Vector Table Mapped(中斷函數(shù)向量表)中查看。 啟動文件 startup_stm32fxxx_xd.s里面都是匯編代碼 ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size __V
[單片機(jī)]
STM32中斷與事件
關(guān)于事件、中斷事件 、中斷三個概念的比喻 比如一老師在教室里給學(xué)生們上課。課堂上的學(xué)生可能做出各種行為動作,比方做筆記、打哈氣、翻書包、講小話等,我們把這些行為統(tǒng)稱為事件,其中有些行為老師往往只是視而不見,繼續(xù)他的上課;而有些行為可能導(dǎo)致老師的上課中止,比方講小話,并對學(xué)生的相關(guān)行為予以警告、批評或糾正等,然后繼續(xù)上課。我們把老師因?yàn)閷W(xué)生的某些行為而中止授課,并產(chǎn)生后續(xù)動作,之后接著上課的這個過程理解為中斷或中斷響應(yīng)。我們把可能導(dǎo)致老師上課中斷的學(xué)生行為理解為中斷事件。 結(jié)合具體的ST MCU運(yùn)行過程 ST MCU運(yùn)行過程,其中會有許多各種各樣的事件,比方管腳電平變化、計(jì)數(shù)器溢出、DMA空、FIFO非空、AD轉(zhuǎn)換結(jié)束、超時、
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章
隨便看看

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved