IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32f407VET6 系统学习 day02 GPIO 引脚的按键 中断,中断设置 (配置) -> 正文阅读

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

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);
	 
}

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:27:08  更:2022-12-25 11:27:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:18:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码