STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

server/2024/11/17 0:54:28/

 配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好

第一步:配置RCC,把我们涉及到的外设的时钟都打开

(此处EXTI是默认打开的,而NVIC是内核外设无需配置)

第二步:配置GPIO,选择端口为输入模式

第三步:配置AFIO,一共有16个引脚可以选择,每个引脚只能配一个GPIO端口

第四步:配置EXTI,选择边沿触发方式,比如上升沿,下降沿,双边沿,

选择触发响应方式(中断响应,事件响应)

中断响应:CPU处理

事件响应:对应某个外设处理,CPU正常工作

第五步:配置NVIC,给中断设置响应优先级和抢占优先级

响应优先级:当中断队列中有多个请求时,响应优先级高的(数字越小越高)将会优先执行

抢占优先级:当已有中断在运行时,此时再来一中断请求若其抢占优先级比正在运行的中断事件的抢占优先级高的话会在原中断事件上再嵌套一个中断事件

原理图:

 模板代码:

uint16_t Key_Count = 0;//中断计数位
void KeyIt_Init(void)//按键中断初始化函数
{GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化传参结构体EXTI_InitTypeDef EXTI_InitStructure;//定义EXTI初始化传参结构体NVIC_InitTypeDef NVIC_InitStructure;//定义NVIC初始化传参结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开AFIO时钟GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//设置为上拉输入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//选择1号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置IO口速度为50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO,传入结构体参数GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);//在AFIO里将1号引脚的中断线路分配给GPIOA端口EXTI_InitStructure.EXTI_Line = EXTI_Line1;//选择外部中断线路为1号线路(1号引脚对应的线路)EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能对应外部中断线路EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断模式(有中断模式和事件模式)EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//设置为低电平触发中断EXTI_Init(&EXTI_InitStructure);//初始化EXTI,传入结构体参数NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//将优先级设置为分组2的配置,即抢占优先级为2位(0~3),响应优先级为2位(0~3),数字越小优                        先级越高NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//选择为EXTI1通道NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能对应通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//设置抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//设置响应优先级为1NVIC_Init(&NVIC_InitStructure);//初始化NVIC,传入结构体参数
}
uint16_t Key_Count_Get(void)//返回中断计数位函数
{return Key_Count;//返回中断计数位
}
void EXTI1_IRQHandler(void)//每个中断的中断处理函数都是固定的,在启动文件里找
{if (EXTI_GetITStatus(EXTI_Line1) == SET//如果该中断线路状态寄存器值为SET){Key_Count++;//中断计数位自增EXTI_ClearITPendingBit(EXTI_Line1);//清除中断标志位}
}


http://www.ppmy.cn/server/142513.html

相关文章

python遇到问题

1,BeautifulSoup lxml 解析器安装 问 1,BeautifulSoup lxml 解析器安装2,BeautifulSoup 如何引入第三方库 BeautifulSoup lxml,默认是导入的是python内置的解析器答1 1. 安装 Python 和 pip 确保你已经安装了 Python 和 pip。你…

JVM——类加载器、类加载器的分类

类加载器是java虚拟机提供给应用程序去 实现获取类和接口字节码数据 的技术 类加载器的分类: 一类是 Java代码中实现的一类是 Java虚拟机底层源代码实现的 通常可以细分为三大类:jdk8版本中的 java代码中的 扩展类加载器:Extension 允许扩…

力扣-Mysql-3322- 英超积分榜排名 III(中等)

一、题目来源 3322. 英超积分榜排名 III - 力扣(LeetCode) 二、数据表结构 表:SeasonStats --------------------------- | Column Name | Type | --------------------------- | season_id | int | | team_id …

Element-ui Select选择器自定义搜索方法

效果图 具体实现 <template><div class"home"><el-selectref"currencySelect"v-model"currency"filterable:spellcheck"false"placeholder"请选择":filter-method"handleCurrencyFilter"change&q…

刷题统计(C语言)

问题描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 aa 道题目, 周六和周日每天做 bb 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 nn 题? 输入格式 输入一行包含三个整数 a,ba,b 和 nn. 输出格式 输出一个整数代表天…

将 HTML 转换为 JSX:JSX 和 JSX 规则

JSX 是 JavaScript 的语法扩展。您可以在 JavaScript 文件中编写 HTML 格式。 它基于 Web、Html、Css 和 JavaScript。Web 开发人员将页面内容分别编写为 Html 文件&#xff0c;将设计编写为 Css 文件&#xff0c;将逻辑编写为 JavaScript 文件。 须知 &#xff1a; JSX 是一个…

Spring Boot编程训练系统:实战开发技巧

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

C++__day1

1、思维导图 2、如果登录失败&#xff0c;提示用户登录失败信息&#xff0c;并且提示错误几次&#xff0c;且重新输入&#xff1b;如果输入错误三次&#xff0c;则退出系统 #include <iostream> using namespace std;int main() {string id , pswd;string user"admi…