stm32f407VET6 系统学习 day02 GPIO 引脚的按键 中断,中断设置 (配置)

news2024/11/19 23:37:15

1.中断基本知识

1.知识点: STM32的所有中断(内部或外部)都是由NVIC(嵌套向量中断控制器)控制
注意:在KEIL5工程中的fwlib分组中,misc.c文件提供了NVIC相关的固件库函数。

2.中断源 :引起CPU中断的根源,称为中断源。

3.中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处玛事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。


2.中断分类

1. STM32中断系统包括内部中断和外部中断


1.内部中断是指STM32内置外设或接口产生的中断,如定时器TIMx、串口UART中断等。


2.外部中断是指独立于STM32的外部器件,通过I/O引脚产生的请求STM32处理的中断,
FLASH如按键、Lora模块请求的中断等。


 3.中断分组 ,每个组的优先级,与响应优先级


4.内部中断的使用 的配置 

1.第一步:配置NVIC属性,包括:

1.配置IRQ号;
2.中断优先级(组优先级和组内子优先级)

3.使能对应的IRQ中断。


5.外部中断的使用 配置

1.配置外部的中断线

2. 配置流程



3.代码:

.h 文件

#ifndef __MYEXIT_H__
#define __MYEXIT_H__

void MYEXIT_init(void);//初始化


#endif



.cpp 

#include "MYEXIT.h"
#include "stm32f4xx.h"  //头文件
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "KEY.h"
#include "LED.h"
#include "mysystick.h"


void MYEXIT_init(void)//初始化
{
    EXTI_InitTypeDef EXTI_InitStructure;
		NVIC_InitTypeDef NVIC_InitStruct;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);//中断使能
		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//分组
	
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource5);//绑定端口
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);//绑定端口
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource6);//绑定端口
		SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource13);//绑定端口
		
	  EXTI_InitStructure.EXTI_Line = EXTI_Line5 | EXTI_Line4 |EXTI_Line6 |EXTI_Line13;//那根中断线
	  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置中断和事件
		EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
		EXTI_InitStructure.EXTI_LineCmd = ENABLE; //中断使能
		EXTI_Init(&EXTI_InitStructure);
	
		NVIC_InitStruct.NVIC_IRQChannel = EXTI4_IRQn;
		NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =1;//设置抢占优先级
		NVIC_InitStruct.NVIC_IRQChannelSubPriority =1; //设置响应优先级
		NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能
		NVIC_Init(&NVIC_InitStruct);
	
	
		NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;
		NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =2;//设置抢占优先级
		NVIC_InitStruct.NVIC_IRQChannelSubPriority =2; //设置响应优先级
		NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能
		NVIC_Init(&NVIC_InitStruct);
		
		
		NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;
		NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =2;//设置抢占优先级
		NVIC_InitStruct.NVIC_IRQChannelSubPriority =1; //设置响应优先级
		NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能
		NVIC_Init(&NVIC_InitStruct);

}

void EXTI9_5_IRQHandler(void)
{
	 static int BEEP_a=1;
	 static int LED=1;
	  if(EXTI_GetITStatus(EXTI_Line5) != RESET)//按下KEY2
   { 
      delay_ms(20);
			if(key_youxi()==2)
			{
					if(LED%2==1)
					{
						select_led(2);
						LED++;
					}
					else if(LED%2==0)
					{
						close_num_led(2);
						LED++;
					}
			}
			EXTI_ClearITPendingBit(EXTI_Line5);
   }
   else if(EXTI_GetITStatus(EXTI_Line6) != RESET)  //按下KEY3
   {
        delay_ms(20); //消除抖动
				if(key_youxi()==3)
				{
						if(BEEP_a%2==1)
						{
							openBeep();
							BEEP_a++;
						}
						else if(BEEP_a%2==0)
						{
							closeBeep();
							BEEP_a++;
						}
				}
				
				EXTI_ClearITPendingBit(EXTI_Line6);
   }
	 
     
}

void EXTI4_IRQHandler(void)
{
	static int LED=1;
	delay_ms(20);
	if(key_youxi()==1)
	{
		    if(LED%2==1)
				{
					select_led(1);
					LED++;
				}
				else if(LED%2==0)
				{
					close_num_led(1);
					LED++;
				}
	}
	EXTI_ClearITPendingBit(EXTI_Line4);

}

void EXTI15_10_IRQHandler(void)
{
	 static int LED=1;
	
		delay_ms(20); //消除抖动
		if(key_youxi()==4)
		{
				if(LED%2==1)
				{
					select_led(3);
					LED++;
				}
				else if(LED%2==0)
				{
					close_num_led(3);
					LED++;
				}
		}
		EXTI_ClearITPendingBit(EXTI_Line13);
	 
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DirectX12_API流程入门篇

本部分主要记录下使用D3D12入门所涉及到的API,记录简单使用方式供后期快速查找使用(数据参照龙书实现)。 首先看一下DX12中拥有的管线能力: Raster Graphics PipelineCompute Graphics PipelineRay Tracing PipelineMesh Geometry Pipeline 具体管线示…

【数据结构】链式二叉树的实现

作者:一个喜欢猫咪的的程序员 专栏:《数据结构》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 1.二叉树的概念及结构 1.1二叉树的概念 1.2二叉树的类型分类&#xff…

腾讯焦虑了,一向温文尔雅的马化腾也发脾气了

大家好,我是校长。昨天小马哥内部讲话在互联网上疯传,这应该是,腾讯这家公司创办以来,马化腾最焦虑也最外露的一次讲话了,重点大概涉及 3 大方面,8 大项内容:1、所有业务线 ROI 化,再…

【关于时间序列的ML】项目 9 :机器学习中的 ARIMA 模型

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

<Linux线程概念及线程控制>——《Linux》

目录 1. Linux线程概念 什么是线程 线程的优点 线程的缺点 线程异常 线程用途 2. Linux进程VS线程 进程和线程 进程的多个线程共享 关于进程线程的问题 3. Linux线程控制 POSIX线程库 创建线程 线程ID及进程地址空间布局 线程终止 线程等待 4. 分离线程 后记:●由于…

ArcGIS 制作这种“清新设计风”的地图海报封面

这种图怎么做?下面是星球研究所制作的一张地图海报,那么究竟是如何制作的呢? 星球研究所 制作 一通鼓捣之下,使用 ArcGIS Pro 制作出了风格相近的成都市区位及地形示意图地图(其实 QGIS 也能做)。 下面教程一并分享给大家。 完全使用 ArcGIS Pro 制作的成果图 1.全国区位…

Python——几个常用的数学函数

1. min()函数:取出给定参数的最小值 说明:获取指定数值或者指定序列中最小值。 print(min(1, 5)) print(min(1, 2, 3, 4, 5, 6)) print(min([2, 3, 4, 5])) 2.max()函数:取出给定参数的最大值 说明:获取指定数值或者指定序列中…

CSS初级教程【第一天】

CSS初级教程【第一天】【1】CSS初识【2】CSS简介【3】CSS语法【4】CSS 选择器【5】CSS使用【6】CSS 注释【7】CSS 颜色【8】CSS RGB 颜色【9】CSS HEX 颜色【10】CSS HSL 颜色(色相| 饱和度 | 明度)【0】末尾声名【1】CSS初识 CSS 是一种描述 HTML 文档样…

【青岛大学·王卓】第3章_栈和队列

【青岛大学王卓】第3章_栈和队列 20221107-20221119 3.1 栈和队列的定义和特点 普通线性表插入和删除可以是线性表中的任意为位置; 3.1.1 栈 栈的概念 栈和队列是两种常用的、重要的数据结构。栈和队列是限定插入和删除只能在表的端点进行的线性表。 栈特点 后…

Anki学习之路

【常规操作】: 【自定义卡片进度】: [右键单击] -> [重设学习进度] //选择放到哪一个队列中( 新卡片队列 / 复习队列 )。 【重新学一遍】: //然后再进行上面的操作步骤。 【牌组齿轮按钮】: 【每日新…

Web前端105天-day62-HTML5_CORE

HTML5CORE02 目录 前言 一、复习 二、拖拽 三、上传服务器 四、Canvas 五、地图 总结 前言 HTML5CORE02学习开始 一、复习 跨域 浏览器的同源策略导致在网页中, 通过 AJAX 发送网络请求时, 默认只能向同源的服务器请求同源: 协议 端口号 域名 三者都相同产生跨域的原因…

杰华特科创板上市:市值227亿 华为英特尔联想是股东

雷递网 雷建平 12月23日杰华特微电子股份有限公司(简称:“杰华特”,股票代码为:“688141” )今日在科创板上市,发行价为38.26元。杰华特此次发行5808万股,发行价为38.26元,募资总额为…

32天高效突击:开源框架+性能优化+微服务架构+分布式,面阿里获P7(脑图、笔记、面试考点全都有)

今年的大环境不佳,所以大部分的人在今年的招聘旺季都没有收获到好的结果。 但不要着急,今天分享的内容则是由 一位阿里P7的面试心得,通过32天的高效突击训练,成功拿下offer的学习方法。 篇章分为三大章节,可以根据自…

【TypeScript】类型兼容性与交叉类型讲解

目录 类型兼容性 对象类型兼容性 接口类型兼容性 函数类型兼容性 交叉类型 类型兼容性 在TS中,类型采用的是结构化类型系统,也叫做 duck typing(鸭子类型),类型检查关注的是值所具有的形状。也就是说&#xff0c…

C. Building a Fence(范围判定)

Problem - 1469C - Codeforces 你想建造一个由n个相等部分组成的栅栏。所有部分的宽度都等于1,高度都等于k。 不幸的是,篱笆下面的地面并不平坦。为了简单起见,你可以认为第i节下面的地面等于hi。 你应该遵循几个规则来建造围栏。 连续的部…

C++知识总结

1.C面向对象三大特征:继承、封装、多态。其中多态分为静态多态和动态多态。静态多态:重载,参数模板 动态多态:虚函数,强制转换。 2.static类型的变量存在静态存储区,初始值为0或者null 3.char *p“PCGAME”…

kubekey初期尝试安装 KubeSphere单机和多机避坑指南

kubekey初期尝试安装 KubeSphere单机和多机避坑指南 准备工作 请注意开始前工作确定各个软件版本情况,本文章要想阅读比较舒服请还得有些Go开发经验 CentOS 7.9 KubeKey v1.21 KubeSphere v3.2.1 Docker 和 Kubernetes 根据支持进行选择: 获取支持可以通…

【复盘】2022年度复盘

年度总结 今年的年度总结比之前写早了一点,主要在因为居家办公时间太久,正好有空就找点时间提前写一下总结复盘计划,说实话要是每月都写一次,我自己也做不到。今年这一年如果用两个字来形容的话,应该是坚定 工作篇 …

用树莓派4B安装gitlab,亲测可用~

最近成功在CentOS7上安装了gitlab,忽然想到是不是可以把吃灰的树莓派4B也装上gitlab,于是研究了一下,做个分享。 树莓派是4B 8G版本。本身装的是官方的64位系统。之前可能还装过一些乱七八糟的东西,这里就不提了。 上gitlab官网…

m基于GRNN广义回归神经网络的飞机发动机剩余寿命预测matlab仿真,训练集采用C-MAPSS数据集

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 GRNN建立在非参数核回归基础上,以样本数据为后验条件,通过执行诸如Parzen非参数估计,从观测样本里求得自变量和因变量之间的联结概率密度函数之后,…