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

 配置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.rhkb.cn/news/476333.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT】绘图

个人主页~ 绘图 一、绘图1、基础内容2、绘制形状(1)线段(2)矩形(3)圆形(4)文本(5)画笔(6)画刷 3、绘制图片(1)…

Quality minus junk论文阅读

Quality minus junk论文阅读 文章目录 Quality minus junk论文阅读 AbstractTheoretical FrameworkEmpirical AnalysisDataQuality scorePortfoliosEx ante quality forecasts fundamentals Results and DiscussionThe price of qualityUnderstanding the price of quality: th…

葡萄酒(wine)数据集——LDA、贝叶斯判别分析

1 葡萄酒(wine)数据集介绍 葡萄酒识别数据集(Wine Recognition dataset)通常用于多类别分类问题建模。数据集包括从三个不同的品种(类别)的葡萄酒中测得的13种不同的化学特征,共178个样本。这些化学特征包括酸度、灰分、酒精浓度等。 该数据集是由UCI机器学习库提供,并…

贪心算法 -- 递增子序列

目录 最长递增子序列 题解: 代码: 递增的三元子序列 题解: 代码: 简易版: 最长连续递增序列 题解: 代码: 最长递增子序列 300. 最长递增子序列 - 力扣(LeetCode&#xf…

【ArcGIS微课1000例】0132:从多个GIS视角认识与攀登珠穆朗玛峰

文章目录 1. Map Viewer中打开2. 场景查看器中打开3. ArcGIS中打开4. QGIS中打开5. Globalmapper中打开6. ArcGIS Earth中打开官网地址:https://www.arcgis.com/home/item.html?id=504a23373ab84536b7760c0add1e0c1c 1. Map Viewer中打开 以下展示不同底图样式的珠穆朗玛峰壮…

如何在Word文件中设置水印以及如何禁止修改水印

在日常办公和学习中,我们经常需要在Word文档中设置水印,以保护文件的版权或标明文件的机密性。水印可以是文字形式,也可以是图片形式,能够灵活地适应不同的需求。但仅仅设置水印是不够的,有时我们还需要确保水印不被随…

windows的WSL Ubuntu子系统重置root或其他用户的密码

思路:以管理员身份运行PowerShell,在命令行窗口重置密码 ,不需要删除或重新安装Linux子系统。 1、以管理员身份运行PowerShell 2、用root用户启动Ubuntu,执行 wsl.exe --user root 3、重置密码,执行passwd username&…

UE5 5.1.1创建C++项目,显示error C4668和error C4067的解决方法

因为工作要求,没法使用最新 5.5版本的ue5 而是要用ue5.1和5.2版本。 但是我在安装下载了visual studio2022后,使用 ue5.1编辑器 创建C项目,爆出如下错误。 error C4668: ?????__has_feature?????ΪԤ?????꣬???0????…

SpringCloud多机部署,负载均衡-LoadBalance

一.负载均衡 1.1问题描述 //根据应用名称获取服务列表 List<ServiceInstance> instancesdiscoveryClient.getInstances("product-service"); //一个微服务可能有多个实例&#xff0c;获取第一个 EurekaServiceInstance instance(EurekaServiceInstance)insta…

『 Linux 』文件与网络套接字的内部关系

文章目录 回顾进程控制块socket与文件的关系wait_queue_head_t文件与套接字相关的调用方法系统中的套接字网络协议栈与方法集报文的管理 回顾进程控制块 每个进程都存在着自己的PCB结构体,即task_struct结构体,这个结构体是用来描述一个进程的; /* 已省略部分代码 */ struct t…

科研实验室的数字化转型:Spring Boot系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理实验室管理系统的相关信息成为必然。开发合…

【前端】CSS修改div滚动条样式

示例 分别是滚动条默认样式和修改后的样式 代码 <div class"video-list"><div class"list-item" onclick"videoinfo(100)"><img src"/index/images/coverimg/方和谦.png"><div class"txt">国医大…

【AIGC】如何使用高价值提示词Prompt提升ChatGPT响应质量

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 &#x1f4af;前言&#x1f4af;提示词英文模板&#x1f4af;提示词中文解析1. 明确需求2. 建议额外角色3. 角色确认与修改4. 逐步完善提示5. 确定参考资料6. 生成和优化提示7. 生成最终响…

centos安装jenkins

本机使用虚拟机centos 7.9.2009 安装gitlab&#xff0c;本机的虚拟机ip地址是 192.168.60.151&#xff0c; 步骤记录如下 1、下载jenkins&#xff0c;安装jenkins之前需要安装jdk jdk和jenkins的版本对应关系参考&#xff1a;Redhat Jenkins Packages Index of /redhat-stable…

使用redis-shake工具进行redis的数据同步

前言&#xff1a; 工作中将常遇到测试环境和正式环境的数据同步或者需要进行数据迁移&#xff0c;对于mysql数据库的方案倒是不少&#xff0c;但是redis中如何快速便捷的迁移呢&#xff1f;答案是阿里云提供的:redis-shake RedisShake是阿里云基于豌豆荚开源的redis-port进行…

04 —— Webpack打包CSS代码

加载器css-loader &#xff1a;解析css代码 webpack 中文文档 | webpack中文文档 | webpack中文网 加载器style-loader&#xff1a;把解析后的css代码插入到DOM style-loader | webpack 中文文档 | webpack中文文档 | webpack中文网 准备css代码&#xff0c;放到src/login目…

Nacos实现IP动态黑白名单过滤

一些恶意用户&#xff08;可能是黑客、爬虫、DDoS 攻击者&#xff09;可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此我们需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 本次练习使用到的是Nacos配合布隆过滤器实现动态IP黑白名单过滤 文章…

SAP PI/PO Proxy2JDBC SQL_QUERY动态接口示例

目录 背景&#xff1a; 完整demo步骤&#xff1a; IR: ID: SPROXY: 测试代码&#xff1a; 注意点&#xff1a; 背景&#xff1a; 中途临时帮客户项目做其他功能&#xff0c;项目上有部分开发项需要通过PO去第三方数据库取数&#xff0c;项目上的开发对PO不太熟&#xf…

如何使用本地大模型做数据分析

工具&#xff1a;interpreter --local 样本数据&#xff1a; 1、启动分析工具 2、显示数据文件内容 输入&#xff1a; 显示/Users/wxl/work/example_label.csv 输出&#xff1a;(每次输出的结果可能会不一样&#xff09; 3、相关性分析 输入&#xff1a; 分析客户类型与成…

中间件--laravel进阶篇

laravel版本11.31,这中间件只有3种,分别是全局中间件,路由中间件,控制器中间件。相比thinkphp8,少了一个应用中间件。 一、创建中间件 laravel创建中间件可以使用命令的方式创建,非常方便。比如php artisan make:middleware EnsureTokenIsValid。EnsureTokenIsValid是中间…