STM32学习记录--Day5

今天了解了:

中断

中断有多个类别包括:USART中断,I2C中断等;

并通过NVIC来分配中断的优先级

EXTI

EXTI的内部结构:

EXTI线

🔧 ​​一、EXTI系统核心架构​

1. ​​中断源输入(左上区域)​
  • ​GPIO引脚​​:
    支持最多4个GPIO端口(A/B/C/D)的引脚作为中断源。
    ​注意​​:每个GPIO引脚都能触发中断。
  • ​信号合并​​:
    多个GPIO引脚通过 ​​“多路选择器(MUX)”​​ 汇合到一条EXTI线上。
    ​关键限制​​:​​同一时间,每条EXTI线只能连接一个GPIO引脚!​
2. ​​中断线分配(中间黄色铃铛图标)​
  • ​EXTI线数量​​:
    共有​​20条独立中断线​​:
    • EXTI0~EXTI15:​​16条通用线​​(可分配给任意GPIO引脚)
    • EXTI16~EXTI19:​​4条专用线​​(用于特定事件,如PVD、RTC闹钟等)
  • ​资源复用​​:
    EXTI0可同时被PA0、PB0、PC0、PD0使用,但只能选择其中一个。
3. ​​中断触发逻辑(右上区域)​
  • 每条EXTI线可独立配置​​触发模式​​:
    • 上升沿触发(Rising Edge
    • 下降沿触发(Falling Edge
    • 双边沿触发(Both Edges
  • 中断信号最终传递到 ​​NVIC(嵌套向量中断控制器)​​,执行用户中断服务函数。

⚙️ ​​二、GPIO与EXTI的绑定规则​

1. ​​引脚号决定EXTI线号​
  • ​引脚0(如PA0/PB0)→ 绑定到EXTI0​
  • ​引脚1(如PA1/PB1)→ 绑定到EXTI1​
  • ...
  • ​引脚15(如PA15/PB15)→ 绑定到EXTI15​
2. ​​端口选择(通过AFIO寄存器配置)​
  • ​示例代码(STM32标准库)​​:
  • 以中断优先级分组2为例:
  • 	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  • //#1.初始化PA5和PA6RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;//PA5GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStruct);//PA6GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStruct);	//#2.为EXTI5和EXTI6分配引脚RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource5);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);//#3.初始化EXTI的线EXTI_InitTypeDef EXTI_InitStruct;EXTI_InitStruct.EXTI_Line = EXTI_Line5;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct);EXTI_InitStruct.EXTI_Line = EXTI_Line6;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStruct);//#4.配置NVICNVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = EXTI9_5_IRQn;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStruct);

⚠️ ​​三、重要设计约束​​​

  1. 专用中断线​​:

    • EXTI16:连接PVD(可编程电压检测)
    • EXTI17:连接RTC闹钟
    • EXTI18:连接USB唤醒事件
    • EXTI19:连接RTC入侵检测
      ​注意​​:这些线无法分配给GPIO引脚。

💎 ​​四、总结与配置流程​

  1. ​硬件连接​​:
    确定要用作外部中断的GPIO引脚(如PA0)。

  2. ​EXTI线映射​​:
    根据引脚号选择EXTI线(如PA0 → EXTI0)。

  3. ​端口绑定​​:
    AFIO_EXTICR寄存器中设置EXTI0的信号源为GPIOA(而非GPIOB等)。

  4. ​中断参数配置​​:

    • 选择触发模式(上升沿/下降沿/双边沿)
    • 使能中断(EXTI->IMR寄存器)
    • 在NVIC中启用该EXTI线的中断请求
  5. ​实现中断服务函数​​:
    编写EXTI0_IRQHandler()函数并清除中断标志。

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

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

相关文章

CentOS7下同步时间的几种方式(NTP 、Chrony和systemd-timesyncd)

文章目录前言一、NTP (Network Time Protocol) & ntpd1.原理2. 安装与配置(ntp 包)3.NTPd 优缺点对比二、Chrony1.原理2.安装与配置 (chrony 包)3. 优点4. 缺点三、systemd-timesyncd1.原理2.安装与配置 (systemd 自带)3. 优点4. 缺点四、手动同步工具1.ntpdate(已废弃&…

Web3:在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境

相关文章推荐链接Web3专栏https://blog.csdn.net/qq_42392981/category_13016259.html在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境引言1. 开发环境准备(Windows)1.1 安装 VSCode1.2 安装推荐插件1.3 安装 Foundry1.4 验证 Forge 和…

Implement recovery based on PITR using dump file and binlog

模拟生产场景中需要基于某个事务点的恢复,使用存量备份与存量binlog 生成测试数据 (rootlocalhost) [(none)]> create database NanJing; Query OK, 1 row affected (0.01 sec) (rootlocalhost) [test]> use NanJing; Database changed (rootlocalhost) [NanJ…

HTML-取消div,a等标签点击效果

一、背景当标签被设置onclick事件之后,在有些手机浏览器中,点击这些标签,会有点击变色效果。想要取消点击变色效果。通过为div和标签元素添加-webkit-tap-highlight-color样式属性,可以有效地解决这一问题二、解决方案已a标签示例…

VR 三维重建:开启沉浸式体验新时代

在科技飞速发展的今天,VR(虚拟现实)技术已经逐渐渗透到我们生活的各个领域,为我们带来了前所未有的沉浸式体验。而 VR 三维重建作为 VR 技术的重要应用之一,更是让人们能够身临其境地感受各种场景,无论是旅…

iTwinjs 几何 - Curve

CurvePrimitive 常用的见下 LineSegment3d直线段两点直线边、杆件、骨架LineString3d折线多点连续直线轮廓线、路径Arc3d圆弧 / 椭圆弧圆心 半径 起止角圆孔、圆角、弧段BezierCurve3d贝塞尔曲线端点 控制点平滑过渡、动画轨迹BSplineCurve3dB 样条 / NURBS控制点 节点矢…

iPhone 恢复出厂设置是否会删除所有内容?

当你的 iPhone 经常崩溃、出现黑屏死机、卡在加载屏幕上等问题时,你可能会考虑进行恢复出厂设置来修复它。或者在其他情况下,如果你要将使用多年的设备交给新主人,出于安全考虑,也需要进行恢复出厂设置。那么,恢复出厂…

机器学习②【字典特征提取、文本特征处理(TF-IDF)、数据标准化与归一化、特征降维】

文章目录先言一、特征工程概述二、特征提取1.字典特征提取(特征离散化)2.文本特征提取2.1英文文本提取2.2中文文本提取(jieba分词器)3.TfidfVectorizer TF-IDF文本特征词的重要程度特征提取三、数据归一化与标准化1.MinMaxScaler …

3、CC3200串口DMA

先说下CC3200存在2个16*8的fifos, 分别用于发送和接收 当fifos被disable时,将会作为一个1字节深度的保持寄存器, 所以无论fifos是开是关,发送和接收都绕不开fifos DMA 由于发送和接收都绕不过fifos,所以DMA也绕不开FIFOS. MAP_UARTFIFOLevelS…

从游戏NPC到手术助手:Agent AI重构多模态交互,具身智能打开AGI新大门

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

Lesson 29 Taxi!

Lesson 29 Taxi! taxi n.出租车 同义词:cab n.出租车 相关:taxi meter计价器 taxi stand taxi rank 出租车站 call ataxi 叫车,打车 例句:对不起,请问出租车站在哪里? Excuse me, do you know where the taxi rank is please? land v.着陆,登陆n.陆地…

怎样将allegro的brd文件转化为AD的PCB文件

由于工作需要将allegro的PCB转成ad给同事,在使用AD软件导入Allegro的brd格式文件时出现各种的异常报错弹窗问题,现分享两种将Allegro PCB文件导入到AD中的方法。一、第1种方法使用高版本的AD软件(AD22,同时操作电脑需安装了Allegr…

[免费]【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)【论文+源码+SQL脚本】

大家好,我是python222_小锋老师,看到一个不错的【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts),分享下哈。 项目视频演示 【免费】【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts爬虫) Pytho…

什么是CI/CD?

CI/CD是持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写:持续集成(Continuous Integration, CI):CI是一种开发实践&#x…

【Linux】重生之从零开始学习运维之Mysql

一主一从主12主机准备工作mkdir -p /data/mysql/logbin chown -R mysql:mysql /data/mysql主节点mysql配置vim /etc/my.cnf.d/mysql-server.cnf server-id177 log_bin/data/mysql/logbin/mysql-bin default_authentication_pluginmysql_native_password查看效果systemctl resta…

Trust Management System (TMS)

Trust Management System (TMS)信托管理系统学习信托管理系统(TMS)是一种用于高效管理信托业务的综合平台,涵盖客户信息、资产配置、风险监控等功能。通过学习TMS,可以掌握信托产品设计、业务流程优化及合规…

Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)

Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)一、环境准备二、核心实现三、前后端交互流程四、关键问题解决方案五、常见问题排查六、最佳实践建议在现代Web应用中,数据安全传输至关重要。SM2作为我国自主设计的非对称加…

机器学习sklearn:随机森林的决策树

bg:对比决策树来说,搞多几棵树就是随机森林了rlf_1 [] rlf_2 [] for i in range(10):rfc RandomForestClassifier(n_estimators25)rfc_s cross_val_score(rfc, wine.data, wine.target, cv10).mean()rlf_1.append(rfc_s)clf DecisionTreeClassifier…

上海月赛kk

1.十六进制#include<bits/stdc.h> using namespace std;int n;int main(){cin>>n;stack<int>re;if(n<16)cout<<0;while(n){re.push(n%16);n/16;}while(!re.empty()){int xre.top();re.pop();if(x<10)cout<<x;else cout<<char(Ax-10)…

暑期算法训练.12

目录 52. 力扣1 两数之和 52.1 题目解析&#xff1a; 52.2 算法思路&#xff1a; 52.3 代码演示&#xff1a; ​编辑 52.4 总结反思&#xff1a; 53 面试题&#xff1a;判定是否互为字符重排 53.1 题目解析&#xff1a; 53.2 算法思路&#xff1a; 53.3 代码演示&…