中断-STM32

中断-STM32

中断:在主程序运行过程中,出现了特定的中断触发条件 (中断源),使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。
中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源。
中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回。
68个可屏蔽中断通道包含EXTI、TIM、ADCUSART、SPI、12C、RTC等多个外设。
使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。
在这里插入图片描述
GPIO_Pin中Pin相同的不能同时触发中断。
在这里插入图片描述

配置步骤

在这里插入图片描述
第一步,配置RCC,把涉及的外设的时钟都打开。
第二步,配置GPIO,选择端口为输入模式。
第三步,配置AFIO,选择用的这一路GPIO,连接到后面的EXTI。
第四步,配置EXTI,选择边沿触发方式,比如上升沿、下降沿或者双边沿。还有选择触发响应方式,可以选择中断响应和事件响应。(一般选择中断响应)。
第五步,配置NMIC,给我们这个中断选择一个合适的优先级。通过NVIC,外部中断信号就能进入CPU了。CPU才能收到中断信号,才能跳转到中断函数里执行中断程序。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
以IRQHandler结尾的字符串就是中断函数的名字
在这里插入图片描述

#include "stm32f10x.h"                  // Device header

//用一个数字来统计中断触发的次数
uint16_t CountSensor_Count;

void CountSensor_Inint(void)
{
	//第一步:配置时钟
	
	//开启RRC时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//注意函数和参数的这个APB2、APB1和AHB要对应起来
	//开启AFIO的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

	//第二步:配置GPIO
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//跟参考手册选择上拉模式,复用
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	//第三步:配置AFIO
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);//选择GPIOB_14为中断引脚
	
	//第四步:配置EXTI
	EXTI_InitTypeDef EXTI_InitStruct;
	EXTI_InitStruct.EXTI_Line = EXTI_Line14;//选择第14路中断
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;//使能中断
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//中断触发
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
	EXTI_Init(&EXTI_InitStruct);
	
	
	//配置NVIC
	//注意:分组方式整个芯片只能用一种,因此,分组的代码只需要执行一次
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStruct);
}

//编写中断函数
//中断函数的名字都是固定的,中断函数都是无参数无返回值的
//写错了就进不了中断了,最好是直接从启动文件复制过来
//中断函数就不用声明,因为中断函数不需要调用,它是自动执行的
void EXTI15_10_IRQHandler(void)
{
	//一般先进行中断标志位的判断	
	if(EXTI_GetITStatus(EXTI_Line14) == SET)
	{
		CountSensor_Count++;//记录进入中断的次数
		//每次中断程序结束后,都应该清除一下中断标志位
		EXTI_ClearITPendingBit(EXTI_Line14);
	}
}

//返回中断次数
uint16_t Get_CountSensor_Count(void)
{
	return CountSensor_Count;
}

#ifndef _COUNTSENSOR_H
#define _COUNTSENSOR_H

void CountSensor_Inint(void);
uint16_t Get_CountSensor_Count(void);
#endif

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "CountSensor.h"


int main(void)
{

	CountSensor_Inint();
	
	while(1)
	{

	}
}

注意:
在中断函数里,最好不要执行耗时过长的代码。

不要在中断函数和主函数调用相同的函数或者操作同一个硬件。

建议:在中断里操作变量或者标志位,当中断返回时,再对这个变量操作。既能保证中断函数的筒短快速,又能保证不产生冲突的硬件操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/17855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Halcon】 Halcon 22.11 安装详细教程

文章目录 1安装2 获取许可证 license2.1 license下载2.2 激活 license放置在相应文件夹下3 DLT 安装1安装 1.解压安装包 2.打开运行 exe 程序 跳转至页面 点击“可获得的”,并安装选择: AVAILABLE ->INSTALL 可获得的 ->安装

云计算中的边缘计算技术及其应用

章节一:云计算和边缘计算的简介 随着互联网的发展,数据中心的规模不断扩大,云计算也成为了越来越受欢迎的计算模式。但是,云计算存在着一些问题,比如延迟较高,网络瓶颈,数据隐私和安全性等等。…

Wikidata 模型分析+实体抽取+数据处理

Wikidata 数据分析与处理 需求:Wikidata 数据描述了很多实体,以及实体属性。比如某一个公司/组织/机构名称是:阿里巴巴,对数据内该组织的相关属性进行观察、分析、治理、抽取等,最后用图数据库进行存储和展示其关系&am…

蓝牙资讯|苹果与谷歌起草蓝牙定位追踪设备行业规范

苹果与谷歌于当地时间5月2日联合提交了一份行业规范草案,以帮助应对蓝牙定位追踪设备遭滥用的问题。目前已有包括三星在内的追踪设备制造厂商宣布支持该草案。 据了解,苹果与谷歌此次联合提交的行业规范草案将云熙蓝牙定位追踪设备兼容跨iOS以及Android平…

asp.net+sqlserver漫画绘本借阅管理系统

摘 要1 第1章 系统概述5 1.1 研究背景5 1.2 研究的意义5 1.3 主要研究内容5 第2章 系统开发环境7 2.1 ASP.NET概述7 2.2 动态网站技术介绍8 2.3 数据库技术8 第3章 需求分析9 3.1 需求分析9 3.1.1 功能需求9 3.2 可行性分析9 3.2.1 可行性分析9 3.2.2 技术可行性9 3.2.3 运行可…

详解c++---模拟实现stack和queue

目录标题 设计模式stack的模拟实现准备工作各种函数的实现 queue的模拟实现准备工作queue的接口实现 deque的介绍为什么会有dequedeque的原理deque的迭代器为什么使用deque 设计模式 设计模式分为两个:迭代器模式和适配器模式 第一个:迭代器模式 迭代器…

FT2000+ qemu kvm 64C64G 通过频繁设置CPU online 状态导致虚拟机openEuler 操作系统假死测试用例2

前文: https://hknaruto.blog.csdn.net/article/details/130408240 测试程序 /** tcti.cpp参考: https://www.cnblogs.com/organic/p/17321523.htmlg -stdc11 -lpthread trigger_cgroup_timer_inactive.cpp -o inactive_timer ./inactive_timer 100000…

【刷题】141. 环形链表

141. 环形链表 一、题目描述二、示例三、实现思考总结 141. 环形链表 一、题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环…

Spring是什么?关于Spring家族

初识Spring 什么是Spring? Spring是一个开源的Java企业级应用程序开发框架,由Rod Johnson于2003年创建,并在接下来的几年里得到了广泛的发展和应用。它提供了一系列面向对象的编程和配置模型,支持开发各种类型的应用程序&#x…

晒出新高度?2023夏季小红书防晒趋势前瞻

夏日将临,防晒需求激增,进入市场旺季。今年防晒赛道朝着“防护升级,多面兼顾”大势发展。 哪些趋势值得关注?本期,千瓜将通过小红书数据分析和笔记内容洞察,为品牌提供数据支持和方向参考。 月增长高达501.…

QProgressBar详解

QProgressBar详解 [1] QProgressBar详解1.QProgressBar简述2.常用方法3.示例,比较进度条4.设置样式表 [1] QProgressBar详解 原文链接:https://blog.csdn.net/wzz953200463/article/details/125530997 1.QProgressBar简述 QProgressBar提供了一个水平…

分布式锁Redisson对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对

文章目录 1 Redisson介绍2 Redisson快速入门3 Redisson可重入锁原理4 Redisson锁重试和WatchDog机制5 Redisson锁的MutiLock原理 基于setnx实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff…

创维高安版-E900-Hi3798MV100-强刷卡刷固件包-当贝纯净桌面

创维高安版-E900-Hi3798MV100-强刷卡刷固件包-当贝纯净桌面-内有主板图短接点和教程 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置…

架构师日记-深入理解软件设计模式 | 京东云技术团队

作者:京东零售 刘慧卿 一 设计模式与编程语言 1.1 什么是设计模式 设计模式(Design pattern) :由软件开发人员在软件开发中面临常见问题的解决方案,是经过长时间的试验积累总结出来的,它使设计更加灵活和…

Ubuntu 安装 Mysql

主要内容 本文主要是实现在虚拟机 Ubuntu 18.04 成功安装 MySQL 5.7,并实现远程访问功能,以 windows 下客户端访问虚拟机上的 mysql 数据库。 1. 切换至 root 用户 ,shell 终端指令均执行在 root 用户下 sudo su 2. 安装并设置 mysql 安…

通用操作日志处理方案

why(目的理念):操作日志是什么需要做哪些事情? 摘自美团博客的操作日志的介绍 操作日志的记录格式大概分为下面几种: * 单纯的文字记录,比如:2021-09-16 10:00 订单创建。 * 简单的动态的文本…

springboot+dubbo+zookeeper 项目实战

现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。 springboot集成dub…

【软考备战·希赛网每日一练】2023年5月4日

文章目录 一、今日成绩二、错题总结第一题第二题第三题第四题三、知识查缺 题目及解析来源:2023年05月04日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 修改Linux文件权限命令:chmod。 第二题 解析: 第三题 解析…

坚持伙伴优先,共创数据存储新生态

4 月 26 日,2023 阿里云合作伙伴大会上,阿里巴巴集团董事会主席兼 CEO、阿里云智能集团 CEO 张勇表示,阿里云的核心定位是一家云计算产品公司,生态是阿里云的根基。让被集成说到做到的核心,是要坚定走向“产品被集成”…

【OpenSSH】无需公网IP使用SSH远程连接服务器

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…