久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6926|回復(fù): 6
收起左側(cè)

stm32按鍵中斷總結(jié)

[復(fù)制鏈接]
ID:113276 發(fā)表于 2016-4-10 14:23 | 顯示全部樓層 |閱讀模式
stm32學(xué)習(xí)筆記——按鍵(外部中斷)

目的:使用外部中斷方式觸發(fā)按鍵,會使用外部中斷的操作

配置文件:#include "stm32f10x_gpio.h"

  #include "stm32f10x_rcc.h"

#include "stm32f10x_exti.h"

寄存器:EXTI_IMR:高13位保留,低19位對應(yīng)19個中斷線編號,置1時開放該線上外部 中斷

EXTI_EMR:高13位保留,低19位對應(yīng)19個中斷線編號,置1時開放該線上事 件中斷

EXTI_RTSR:高13位保留,低19位對應(yīng)19個中斷線編號,置1時允許上升沿觸 發(fā)事件和外部中斷

EXTI_FTSR:高13位保留,低19位對應(yīng)19個中斷線編號,置1時允許下降沿觸 發(fā)事件和外部中斷

EXTI_SWIER:高13位保留,低19位對應(yīng)19個中斷線編號,置1時允許軟件中 斷,引起EXTI_PR掛起位置1,在IMR或EMR允許時產(chǎn)生中斷

EXTI_PR:發(fā)生觸發(fā)請求時置1,向該位寫1可清除標(biāo)志位

結(jié)構(gòu)體定義:

中斷向量初始化結(jié)構(gòu)體:

typedef struct

{

  uint8_t NVIC_IRQChannel;   //中斷通道

   

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

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

  FunctionalState NVIC_IRQChannelCmd;        / /使能中斷

} NVIC_InitTypeDef;

其中宏定義有

typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;//使能宏定義

中斷通道宏定義(注意中斷線5以后的標(biāo)號有變化)

  EXTI0_IRQn                  = 6,      

  EXTI1_IRQn                  = 7,      

  EXTI2_IRQn                  = 8,      

  EXTI3_IRQn                  = 9,      

  EXTI4_IRQn                  = 10,     

EXTI9_5_IRQn                = 23,     

EXTI15_10_IRQn              = 40,     

中斷優(yōu)先級設(shè)置表

中斷初始化結(jié)構(gòu)體

typedef struct

{

  uint32_t EXTI_Line;    //無符號32位變量設(shè)置中斷線           

   

  EXTIMode_TypeDef EXTI_Mode;    //中斷模式  

  EXTITrigger_TypeDef EXTI_Trigger;  //中斷觸發(fā)方式

  FunctionalState EXTI_LineCmd;     //中斷使能

}EXTI_InitTypeDef;

其中有幾個宏定義枚舉量:

typedef enum  //中斷模式選擇,外部中斷和事件中斷

{

  EXTI_Mode_Interrupt = 0x00,

  EXTI_Mode_Event = 0x04

}EXTIMode_TypeDef;

typedef enum    //下降沿,上升沿,兩者兼有

{

  EXTI_Trigger_Rising = 0x08,

  EXTI_Trigger_Falling = 0x0C,  

  EXTI_Trigger_Rising_Falling = 0x10

}EXTITrigger_TypeDef;

中斷線定義

#define EXTI_Line0       ((uint32_t)0x00001)  

#define EXTI_Line1       ((uint32_t)0x00002)  

#define EXTI_Line2       ((uint32_t)0x00004)  

#define EXTI_Line3       ((uint32_t)0x00008)  

#define EXTI_Line4       ((uint32_t)0x00010)  

#define EXTI_Line5       ((uint32_t)0x00020)  

#define EXTI_Line6       ((uint32_t)0x00040)  

#define EXTI_Line7       ((uint32_t)0x00080)  

#define EXTI_Line8       ((uint32_t)0x00100)  

#define EXTI_Line9       ((uint32_t)0x00200)  

#define EXTI_Line10      ((uint32_t)0x00400)  

#define EXTI_Line11      ((uint32_t)0x00800)  

#define EXTI_Line12      ((uint32_t)0x01000)  

#define EXTI_Line13      ((uint32_t)0x02000)  

#define EXTI_Line14      ((uint32_t)0x04000)  

#define EXTI_Line15      ((uint32_t)0x08000)  

#define EXTI_Line16      ((uint32_t)0x10000)  

#define EXTI_Line17      ((uint32_t)0x20000)  

#define EXTI_Line18      ((uint32_t)0x40000)                                      

#define EXTI_Line19      ((uint32_t)0x80000)  

庫函數(shù):

NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) //中斷向量初始化函數(shù),參數(shù):中斷向量初始化結(jié)構(gòu)體

EXTI_DeInit(void) 中斷初始化為缺省值

EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) 中斷初始化為中斷初始化結(jié)構(gòu)體中的指定值

參數(shù):中斷初始化結(jié)構(gòu)體

EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)中斷初始化為復(fù)位值 參數(shù):中斷初始化結(jié)構(gòu)體

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) 查詢中斷標(biāo)志位,參數(shù),無符號32位中斷線標(biāo)號,返回該中斷線的中斷標(biāo)志位是否置1

EXTI_ClearFlag(uint32_t EXTI_Line) 清除中斷標(biāo)志位,參數(shù),無符號32位中斷線標(biāo)號

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)查詢中斷標(biāo)志位并查看是否被屏蔽,參數(shù),無符號32位中斷線標(biāo)號,返回中斷線上標(biāo)志位是否置1而且未被屏蔽

EXTI_ClearITPendingBit(uint32_t EXTI_Line)清空中斷標(biāo)志位,與之前那個完全相同,參數(shù),無符號32位中斷線標(biāo)號

GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource),這個函數(shù)屬于GPIO的配置,所以單獨列寫,用于指定IO口作為中斷的輸入口,這個函數(shù)的參數(shù)有如下宏定義:

#define GPIO_PinSource0            ((uint8_t)0x00)

#define GPIO_PinSource1            ((uint8_t)0x01)

#define GPIO_PinSource2            ((uint8_t)0x02)

#define GPIO_PinSource3            ((uint8_t)0x03)

#define GPIO_PinSource4            ((uint8_t)0x04)

#define GPIO_PinSource5            ((uint8_t)0x05)

#define GPIO_PinSource6            ((uint8_t)0x06)

#define GPIO_PinSource7            ((uint8_t)0x07)

#define GPIO_PinSource8            ((uint8_t)0x08)

#define GPIO_PinSource9            ((uint8_t)0x09)

#define GPIO_PinSource10           ((uint8_t)0x0A)

#define GPIO_PinSource11           ((uint8_t)0x0B)

#define GPIO_PinSource12           ((uint8_t)0x0C)

#define GPIO_PinSource13           ((uint8_t)0x0D)

#define GPIO_PinSource14           ((uint8_t)0x0E)

#define GPIO_PinSource15           ((uint8_t)0x0F)

#define GPIO_PortSourceGPIOA       ((uint8_t)0x00)

#define GPIO_PortSourceGPIOB       ((uint8_t)0x01)

#define GPIO_PortSourceGPIOC       ((uint8_t)0x02)

#define GPIO_PortSourceGPIOD       ((uint8_t)0x03)

#define GPIO_PortSourceGPIOE       ((uint8_t)0x04)

#define GPIO_PortSourceGPIOF       ((uint8_t)0x05)

#define GPIO_PortSourceGPIOG       ((uint8_t)0x06)

注意:FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)只是檢測是否產(chǎn)生了中斷標(biāo)志位,  并不一定響應(yīng)中斷

  ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)出了檢測是否中斷標(biāo)志位是否置1外  還確認(rèn)是不是中斷不被屏蔽,會響應(yīng)中斷

      EXTI_ClearITPendingBit(uint32_t EXTI_Line)與EXTI_ClearFlag(uint32_t EXTI_Line)            功能是相同的,都是清除中斷標(biāo)志位的。

程序代碼分析(代碼出自FIRE)

static void NVIC_Configuration(void) // 配置中斷向量

{

  NVIC_InitTypeDef NVIC_InitStructure; //結(jié)構(gòu)體定義中斷向量結(jié)構(gòu)體

  

  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//設(shè)置中斷向量通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//設(shè)置搶占優(yōu)先級

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//設(shè)置子優(yōu)先級

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中斷向量通道使能

  NVIC_Init(&NVIC_InitStructure);

}

void EXTI_PA0_Config(void)//中斷配置函數(shù)

{

GPIO_InitTypeDef GPIO_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;  //結(jié)構(gòu)體定義中斷結(jié)構(gòu)體

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); //開啟GPIOA時鐘和第二功能時鐘

NVIC_Configuration();//中斷向量配置

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;      

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉輸入

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //選擇A0為中斷口

  EXTI_InitStructure.EXTI_Line = EXTI_Line0;//中斷線0

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中斷模式

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中斷

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中斷使能

  EXTI_Init(&EXTI_InitStructure); //調(diào)用中斷初始化函數(shù)

}

開放總中斷和關(guān)閉總中斷的宏定義,中斷前需調(diào)用

#define CLI()      __set_PRIMASK(1)/

#define SEI() __set_PRIMASK(0)/

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

void EXTI0_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line0) != RESET) //檢查中斷是否開啟

{

LED1_TOGGLE;//進入中斷則led取反

EXTI_ClearITPendingBit(EXTI_Line0);     //清除中斷標(biāo)志位

}  

}

小總結(jié):1、配置中斷首先配置中斷向量,再配置中斷,配置中斷時要調(diào)用中斷向量的配置,并在GPIO中配置中斷口的選擇

2、中斷函數(shù)開始時需確認(rèn)中斷是否響應(yīng),結(jié)束時需要清除中斷標(biāo)志位

3、Stm32有19個中斷線,其中16個為IO口外部中斷,每一個對應(yīng)IO口編號(A...E), 一共有80個中斷,其它的3個 EXTI線16連接到PVD輸出 EXTI線17連接到 RTC鬧鐘事件 EXTI線18連接到USB喚醒事件

4、中斷掛起寄存器實際上就是中斷標(biāo)志位寄存器

5、中斷服務(wù)函數(shù)在stm32f10x_it.c 文件中定義,這里定義了一些基本的中斷服務(wù)函數(shù)


評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100

查看全部評分

回復(fù)

使用道具 舉報

ID:113675 發(fā)表于 2016-4-12 10:45 | 顯示全部樓層
看著好高深的樣子
回復(fù)

使用道具 舉報

ID:113502 發(fā)表于 2016-4-15 12:56 | 顯示全部樓層
好資料,謝謝樓主
回復(fù)

使用道具 舉報

ID:113502 發(fā)表于 2016-4-15 12:56 | 顯示全部樓層
aw1202 發(fā)表于 2016-4-12 10:45
看著好高深的樣子

好資料,謝謝樓主
回復(fù)

使用道具 舉報

ID:588361 發(fā)表于 2021-3-19 10:39 | 顯示全部樓層
基礎(chǔ)進階版
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜在线 | 亚洲综合一区二区三区 | 久久久久久久久久久高潮一区二区 | 成人在线不卡 | 国产精品一区一区 | 综合国产第二页 | 美国黄色毛片 | 国产精品福利视频 | 一区二区三区高清在线观看 | 精品美女久久久久久免费 | 皇色视频在线 | 免费的一级视频 | 91精品国产色综合久久 | 国产在线精品一区二区 | 精品欧美一区二区三区精品久久 | 国产精品69毛片高清亚洲 | 91免费在线播放 | 亚洲第一免费播放区 | 精品一区二区三区免费视频 | 日韩视频中文字幕 | 日本二区在线观看 | 国产一区在线免费观看 | 人人干人人舔 | 亚洲在线一区二区 | 紧缚调教一区二区三区视频 | 在线播放一区二区三区 | 四虎影院在线播放 | 国产精品极品美女在线观看免费 | 亚洲精品视频在线看 | 欧美日产国产成人免费图片 | 最新一级毛片 | 亚洲精品福利视频 | 中文字幕在线观看视频网站 | 久久久高清 | 日本精品免费 | 国产视频久久 | 色网站入口 | 青青久久 | 毛片av免费在线观看 | 成年人在线观看视频 | 一区二区三区视频免费看 |