STM32学习记录(五)————外部中断EXTI

文章目录

  • 前言
  • 一、外部中断EXTI基础知识
    • 1.外部中断介绍
    • 2.外部中断框架
      • 2.1AFIO
      • 2. 2.STM32外部中断机制框架
  • 总结


前言

一个学习STM32的小白~ 有问题私信或评论区指出~


提示:以下是本篇文章正文内容,下面案例可供参考

一、外部中断EXTI基础知识

1.外部中断介绍

  • EXTI(Extern Interrupt)外部中断
  • EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
  • 支持的触发方式:上升沿/下降沿/双边沿/软件触发
  • 支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断· 通道数:16个GPIO_Pin.外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
  • 触发响应方式:中断响应/事件响应

2.外部中断框架

江科大PPT图片

2.1AFIO

AFIO主要用于引脚复用功能
的选择和重定义
在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择
在这里插入图片描述

2. 2.STM32外部中断机制框架

执行过程:

  1. 边沿检测:上升沿,下降沿或者双边沿
  2. 软件配置中断或者事件寄存器
  3. 屏蔽中断寄存器或事件寄存器
  4. 请求挂起寄存器
  5. 中断发送给NVIC中断控制器
  6. 事件则产生一个脉冲响应
    在这里插入图片描述

代码练习:对射式红外传感器计次

//外部中断配置
#include "CountSensor.h"
#include "usart.h"
#include "stm32f10x.h"                  // Device header

uint16_t CountSensor_Count;
void CountSensor_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
	
	EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line = EXTI_Line14;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
}

#include "stm32f10x.h"
#include "main.h"
#include "usart.h"
#include "CountSensor.h"
#include <stdio.h>

int  main()
{
	LED_Init();
	Usart_Init();
	CountSensor_Init();

	
   while(1)
	 {
		
	 }
		 
   
}
void EXTI15_10_IRQHandler(void)
{
	if(EXTI_GetITStatus(EXTI_Line14) == SET)
	{
		CountSensor_Count++;
		printf("%5d",CountSensor_Count);
		EXTI_ClearITPendingBit(EXTI_Line14);
	}

}

在这里插入图片描述

总结

要注意外部中断的开启要开启AFIO并且要在GPIO中打开外部中断:GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
配置完EXTI要配置NVIC,找到对应的中断程序号然后写中断程序。

图片如有侵权请联系删除~

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

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

相关文章

CSS加载动画1

3个圈圈加载的动画 CSS结构 #app-loading {position: relative;top: 45vh;margin: 0 auto;color: #409eff;font-size: 12px;}#app-loading,#app-loading::before,#app-loading::after {width: 2em;height: 2em;border-radius: 50%;animation: 2s ease-in-out infinite app-loa…

GraphQL(7):ConstructingTypes

1 使用GraphQLObjectType 定义type&#xff08;类型&#xff09; 不使用ConstructingTypes定义方式如下&#xff1a; 使用ConstructingTypes定义方式如下&#xff1a; 更接近于构造函数方式 var AccountType new graphql.GraphQLObjectType({name: Account,fields: {name: …

使用Redis将单机登录改为分布式登录

使用Redis将单机登录改为分布式登录 1. 背景 ​ 现在大多数的应用程序登录的方式都是必须满足分布式登录的效果&#xff0c;比如我们在一个客户端登录之后可以在另一个客户端上面共享当前用户的信息&#xff0c;这样在另一个客户端登录的时候就不用用户再次输入自己的账号密码…

Python 全栈系列253 再梳理flask-celery的搭建

说明 最近做了几个实验&#xff0c;将结论梳理一下&#xff0c;方便以后翻看。 1 flask-celery 主要用于数据流的同步任务&#xff0c;其执行由flask-aps发起&#xff0c;基于IO并发的方法&#xff0c;达到资源的高效利用&#xff0c;满足业务上的需求。2 目前部署环境有算网…

string类的使用手册

1.构造函数 补充&#xff1a;npos&#xff1a;size_t类型数据的最大值 default (1) string(); 构造空的string类对象 copy (2) string (const string& str); 拷贝构造函数&#xff08;深拷贝&#xff09; substring (3) string (const string& str, size_t pos, size_…

pytest + yaml 框架 - 65.Pycharm 设置 yaml 格式用例模板,高效写用例

前言 初学者对yaml 格式不太熟悉,自己写yaml用例的时候,总是格式对不齐,或者有些关键字会忘记。 于是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。 pycharm设置用例模板 File - Settings Live Templates - python 点 + 号…

【react小项目】bmi-calculator

bmi-calculator 目录 bmi-calculator初始化项目01大致布局01代码 02完善样式02代码 03输入信息模块03代码 04 使用图表04代码 05详细记录信息渲染05代码 06 让数据变成响应式的06-1输入框的数据处理06-2图表&#xff0c;和记录信息的区域数据处理 07 删除功能&#xff0c;撤销功…

521. 最长特殊序列 Ⅰ

题目 给你两个字符串 a 和 b&#xff0c;请返回这两个字符串中最长的特殊序列的长度。如果不存在&#xff0c;则返回 -1。 「最长特殊序列」定义如下&#xff1a;该序列为某字符串独有的最长子序列&#xff08;即不能是其他字符串的子序列&#xff09;。 字符串 s 的子序列是…

介绍 Whisper 模型

介绍 Whisper 模型 Whisper 是一个通用的语音识别模型。它在大规模多样化的音频数据集上进行训练&#xff0c;并且能够执行多任务处理&#xff0c;包括多语言语音识别、语音翻译和语言识别。 核心方法 Whisper 使用的是 Transformer 序列到序列模型&#xff0c;训练于多种语…

vue项目问题汇总

1.el-select&#xff1a; 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空&#xff0c;因为如果有limit1的时候&#xff0c;没有清空会导致不触发onchange 使用自定义上传方法http-request的时…

基于android开发平台的聊天软件实现(论文+源码)_kaic

摘要&#xff1a;互联网时代的到来使得手机通讯变得更为普及和强大&#xff0c;人们可以随时随地地进行交流。由于工作的繁忙以及生活节奏的加快&#xff0c;人们无法有更多时间展开面对面的交谈&#xff0c;导致在线聊天软件的使用更加频繁&#xff0c;所以本文尝试设计了一款…

Excel报表

(Apache POI) 入门案例 P164 使用POI需要导入下面2个坐标&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId> </dependency> <dependency><groupId>org.apache.poi</groupId>&…

docker-compose部署FastDFS分布式文件系统

文章目录 一、技术选型二、fastDFS组成部分三、docker-compose文件四、客户端nginx配置五、存储器spring Boot集成参考文献 一、技术选型 还有一个更好的google FS&#xff08;但是他不开源&#xff0c;我也没找到社区版一类的可以不要钱使用的&#xff09;。 最后考虑到我们存…

AD学习记录

1. 负信号&#xff1a; \WR或者W\R\ 2.快捷键&#xff1a; MMS VGS X/W CTLRW原理图画总连接线&#xff0c;shift快速复制 TAA管理器&#xff0c;TG封装管理器 3. 选中后按住ctlr进行位移 4.原理图里切换原理图库&#xff1a; 5.重要警报&#xff1a;&#xff0…

CleanMyMacX4.15.4如何优化苹果电脑系统缓存,告别MacBook卡顿,提升mac电脑性能

你是否曾为苹果电脑存储空间不够而烦恼&#xff1f;是否曾因系统运行缓慢而苦恼&#xff1f;别担心&#xff0c;今天我要给大家种草一个神器——CleanMyMac&#xff01;这款软件可以帮助你轻松解决苹果电脑的种种问题&#xff0c;让你的电脑焕然一新&#xff01; 让我来给大家介…

论文学习day01

1.自我反思的检索增强生成&#xff08;SELF-RAG&#xff09; 1.文章出处&#xff1a; Chan, C., Xu, C., Yuan, R., Luo, H., Xue, W., Guo, Y., & Fu, J. (2024). RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation. ArXiv, abs/2404.00610. 2.摘…

使用消息队列(MQ)实现MySQL持久化存储与MySQL server has gone away问题解决

在现代应用程序开发中&#xff0c;消息队列&#xff08;MQ&#xff09;扮演着重要的角色。它们可以帮助我们解决异步通信和解耦系统组件之间的依赖关系。而其中一个常见的需求是将消息队列中的数据持久化到数据库中&#xff0c;以确保数据的安全性和可靠性。在本文中&#xff0…

java第二十四课 —— super 关键字 | 方法重写

super 关键字 基本介绍 super 代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器。 基本语法 访问父类的属性&#xff0c;但不能访问父类的 private 属性。 super.属性名; 访问父类的方法&#xff0c;不能访问父类的 private 方法。 super.方法名(参数列表); 访…

Java的一些内容

transient的作用 transient是Java语言的关键字&#xff0c;用来表示一个成员变量不是该对象序列化的一部分。当一个对象被序列化的时候&#xff0c;transient型变量的值不包括在序列化的结果中。而非transient型的变量是被包括进去的。 注意static修饰的静态变量天然就是不可序…

Python **运算符(python**kwargs:参数解包)(kwargs:keyword arguments)

文章目录 Python中的 ** 运算符&#xff1a;参数解包参数解包基础语法和示例 在函数定义中使用 **示例代码 使用场景和好处1. 灵活性&#xff1a;使用 **kwargs 允许函数设计得更加灵活&#xff0c;可以接受未来可能增加的新参数而无需修改函数定义。2. 可读性和可维护性&#…