stm32——4、中断exti

2023-05-16

这里是基于正点原子开发板的学习记录。
首先你要加入固件库
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);//ÍⲿÖжϳõʼ»¯¡
#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"


//ÏÈд¶ÔÄÇЩÏß×öÖжÏ
//ÔÙдÖж϶ÔÓ¦µÄÓÅÏȼ¶

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

	KEY_Init();  //°´¼ü¶Ë¿Ú³õʼ»¯
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ʹÄܸ´Óù¦ÄÜʱÖÓ
	
	//ÏÖÔÚ¶ÔGPIOE.2 ÖжÏÏßÒÔ¼°Öжϳõʼ»¯ÅäÖà   ϽµÑØ´¥·¢
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);
	
	///ͬÑùµÄAÀïÃæÅäÖÃÒ»´Î¾ÍÐУ¬ÅäÖúó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  ÖжÏÏßÒÔ¼°Öжϳõʼ»¯ÅäÖà ÉÏÉýÑسý·¨ 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);


//ÕâÀïµÄ0¶ÔӦǰÃæдµÄÖжϵÄEXTI_Line0
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;			//ʹÄÜ°´¼üWK_UPËùÔÚµÄÍⲿÖжÏͨµÀ
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//ÇÀÕ¼ÓÅÏȼ¶2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;					//×ÓÓÅÏȼ¶3
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ʹÄÜÍⲿÖжÏͨµÀ
  	NVIC_Init(&NVIC_InitStructure); 

//ÕâÀïµÄ0¶ÔӦǰÃæдµÄÖжϵÄEXTI_Line2
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;			//ʹÄÜ°´¼üKEY2ËùÔÚµÄÍⲿÖжÏͨµÀ
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//ÇÀÕ¼ÓÅÏȼ¶2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;					//×ÓÓÅÏȼ¶2
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ʹÄÜÍⲿÖжÏͨµÀ
  	NVIC_Init(&NVIC_InitStructure); 

//ÕâÀïµÄ0¶ÔӦǰÃæдµÄÖжϵÄEXTI_Line3
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;			//ʹÄÜ°´¼üKEY1ËùÔÚµÄÍⲿÖжÏͨµÀ
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//ÇÀÕ¼ÓÅÏȼ¶2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;					//×ÓÓÅÏȼ¶0
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ʹÄÜÍⲿÖжÏͨµÀ
  	NVIC_Init(&NVIC_InitStructure); 

//ÕâÀïµÄ0¶ÔӦǰÃæдµÄÖжϵÄEXTI_Line4
	NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;			//ʹÄÜ°´¼üKEY0ËùÔÚµÄÍⲿÖжÏͨµÀ
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//ÇÀÕ¼ÓÅÏȼ¶2
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;					//×ÓÓÅÏȼ¶0
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//ʹÄÜÍⲿÖжÏͨµÀ
  	NVIC_Init(&NVIC_InitStructure);  //³õʼ»¯NVIC¼Ä´æÆ÷

}
//ÍⲿÖжÏ0
void EXTI0_IRQHandler(void)
{
	delay_ms(10);//Ïû¶¶
	if(KEY3==1)	 	 //WK_UP°´¼ü
	{				 
		BEEP=!BEEP;	
	}
	EXTI_ClearITPendingBit(EXTI_Line0); //Çå³ýLINE0µÄÖжϱêÖ¾Îλ
}
 
//ÍⲿÖжÏ2
void EXTI2_IRQHandler(void)
{
	delay_ms(10);
	if(KEY2==0)	  //°´¼üKEY2
	{
		LED0=!LED0;
	}		 
	EXTI_ClearITPendingBit(EXTI_Line2);  
}
//ÍⲿÖжÏ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

  • 第三个函数就很简单了

就很简单了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32——4、中断exti 的相关文章

  • c项目makefile多重定义错误

    这个问题是一个对应于创建的repexthis问题 在我的嵌入式 C 项目中 我有两个独立的板 我想为每个板创建两个 c 文件 master c 和 Slave c 其中包含自己的特定main 功能 我使用 stm32cumbemx 生成带有
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • 硬件基础-电容

    电容 本质 电容两端电压不能激变 所以可以起到稳定电压作用 充放电 电容量的大小 想使电容容量大 使用介电常数高的介质 增大极板间的面积 减小极板间的距离 品牌 国外 村田 muRata 松下 PANASONIC 三星 SAMSUNG 太诱
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32F207 I2C 测试失败

    我正在使用 STM32F207 微控制器在 STM3220G EVAL 板上学习嵌入式开发 我尝试通过连接同一芯片上的两个 I2C2 和 I2C3 模块并发送 接收字符来测试 I2C 接口 这是我当前编写的代码 使用 mdk arm 5 i
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT

随机推荐