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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> stm32——4、中断exti -> 正文阅读

[嵌入式]stm32——4、中断exti

这里是基于正点原子开发板的学习记录。
首先你要加入固件库
stm32f10x_exti.h 和 stm32f10x_exti.c
1、STM32中每个io口都可以作为外部中断的中断输入口。
2、STM32F103的中断控制器支持19个外部中断/事件请求:
线 0~15:对应外部 IO 口的输入中断。
线 16:连接到 PVD 输出。
线 17:连接到 RTC 闹钟事件。
线 18:连接到 USB 唤醒事件。

不同滴事件咱就滴选不同滴线。

GPIO 的管教 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0~15。
这样我们就可以吧所有IO口控制起来啦。
在这里插入图片描述
所以呢简简单单,咱们就配置GPIO与中断线配置起来就行了啊

运用函数GPIO_EXTILineConfig()例如:GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

这里我们先写exti.h

#ifndef __EXTI_H
#define __EXIT_H	 
#include "sys.h"

void EXTIX_Init(void);//ía2??D??3?ê??ˉ?
#endif

再写exti.c文件

#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
#include "beep.h"
#include "stm32f10x_exti.h"


//?èD′????D???×??D??
//?ùD′?D????ó|μ?ó??è??

void EXTIX_Init(void)
{
 	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	KEY_Init();  //°′?ü???ú3?ê??ˉ
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ê1?ü?′ó?1|?üê±?ó
	
	//???ú??GPIOE.2 ?D????ò??°?D??3?ê??ˉ????   ???μ??′¥·¢
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
	
	///í??ùμ?Aà???????ò?′??íDD£?????oóAà???ó?μ?μ?????ê????μ??′¥·¢
  	EXTI_InitStructure.EXTI_Line=EXTI_Line2;	//KEY2
  	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
  	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	
	//??GPIOE.3
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
	EXTI_InitStructure.EXTI_Line=EXTI_Line3;
	EXTI_Init(&EXTI_InitStructure);
	
		//??GPIOE.4
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);
	EXTI_InitStructure.EXTI_Line=EXTI_Line4;
	EXTI_Init(&EXTI_InitStructure);
	
	//GPIOA.0  ?D????ò??°?D??3?ê??ˉ???? é?éy??3y·¨ PA0 WE_UP
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
	
	EXTI_InitStructure.EXTI_Line=EXTI_Line0;
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;
	EXTI_Init(&EXTI_InitStructure);


//?aà?μ?0??ó|?°??D′μ??D??μ?EXTI_Line0
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			//ê1?ü°′?üWK_UP?ù?úμ?ía2??D??í¨μà
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//?à??ó??è??2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//×óó??è??3
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ê1?üía2??D??í¨μà
  	NVIC_Init(&NVIC_InitStructure); 

//?aà?μ?0??ó|?°??D′μ??D??μ?EXTI_Line2
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;			//ê1?ü°′?üKEY2?ù?úμ?ía2??D??í¨μà
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//?à??ó??è??2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;					//×óó??è??2
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ê1?üía2??D??í¨μà
  	NVIC_Init(&NVIC_InitStructure); 

//?aà?μ?0??ó|?°??D′μ??D??μ?EXTI_Line3
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;			//ê1?ü°′?üKEY1?ù?úμ?ía2??D??í¨μà
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//?à??ó??è??2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;					//×óó??è??0
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ê1?üía2??D??í¨μà
  	NVIC_Init(&NVIC_InitStructure); 

//?aà?μ?0??ó|?°??D′μ??D??μ?EXTI_Line4
	NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;			//ê1?ü°′?üKEY0?ù?úμ?ía2??D??í¨μà
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//?à??ó??è??2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;					//×óó??è??0
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ê1?üía2??D??í¨μà
  	NVIC_Init(&NVIC_InitStructure);  //3?ê??ˉNVIC??′??÷

}
//ía2??D??0
void EXTI0_IRQHandler(void)
{
	delay_ms(10);//????
	if(KEY3==1)	 	 //WK_UP°′?ü
	{				 
		BEEP=!BEEP;	
	}
	EXTI_ClearITPendingBit(EXTI_Line0); //??3yLINE0μ??D??±ê?????
}
 
//ía2??D??2
void EXTI2_IRQHandler(void)
{
	delay_ms(10);
	if(KEY2==0)	  //°′?üKEY2
	{
		LED0=!LED0;
	}		 
	EXTI_ClearITPendingBit(EXTI_Line2);  
}
//ía2??D??3
void EXTI3_IRQHandler(void)
{
	delay_ms(10);//
	if(KEY1==0)	 //°′?üKEY1
	{				 
		LED1=!LED1;
	}		 
	EXTI_ClearITPendingBit(EXTI_Line3); 
}

void EXTI4_IRQHandler(void)
{
	delay_ms(10);
	if(KEY0==0)	 //°′?üKEY0
	{
		LED0=!LED0;
		LED1=!LED1; 
	}		 
	EXTI_ClearITPendingBit(EXTI_Line4); 


代码中文乱码,所以有图片,
在这里插入图片描述

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

  • 第一个函数中断函数

第二个是中断线的标志,取值范围EXTI_Line0~EXTI_Line15
第一个是中断模式,可以选中断 EXTI_Mode_Interrupt 和事 件 EXTI_Mode_Event
第三个是设置触发模式是下降沿触发 EXTI_Trigger_Falling,和上 升沿触发 EXTI_Trigger_Rising
第四个就是使能

 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
  	EXTI_InitStructure.EXTI_Line=EXTI_Line0;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;

了不得啊兄弟,这里我们就已经掌握了第一步了啊。

  • 第二个函数

既然是中断,那肯定要设置中断优先级了啊。
设置中断线0的中断优先级。

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级 2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure); //中断优先级分组初始化

这里写的EXTI0对应前面写的中断里面的EXTI_Line0
也就是说we_up——对应GPIOA.0——对应中断GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);——对应优先级EXTI0_IRQn

  • 第三个函数就很简单了

就很简单了

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章           查看所有文章
加:2022-02-16 13:16:43  更:2022-02-16 13:19:19 
 
开发: 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/26 8:49:04-

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