STM32标准库学习笔记-3.外部中断

news2024/9/23 5:35:29

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】

中断

中断含义:在计算机执行主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行。

STM32的中断

68个可屏蔽中断通道,包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多个外设。

使用NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级。

NVIC(嵌套向量中断控制器):STM32内核外设,管理着包括内核和片上所有外设的中断相关的功能。STM32标准库程序设计中使用中断需要设置NVIC。

NVIC(嵌套向量中断控制器)基本结构:

NVIC优先级分组

        NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分,分为高n位的抢占优先级和低4-n位的响应优先级

        抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队。

        设置NVIC需要先设置优先级分组,且NVIC优先级分组类型只能有一种状态。

EXTI

EXTI(Extern Interrupt)外部中断:

EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序

  •         支持的触发方式:上升沿/下降沿/双边沿/软件触发
    •         支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断
      •         通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒
        •         触发响应方式:中断响应/事件响应
  • EXIT基本结构:

  • AFIO(复用功能输入输出):主要用于引脚复用功能的选择和重定义;在STM32中,AFIO主要完成两个任务:复用功能引脚重映射、中断引脚选择;

  • 外部中断/事件控制:

  • 标准库代码基本流程:

  • 使能GPIOB和AFIO的系统时钟

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  • GPIOB Pin12的引脚初始化(使用PB12作为外部中断信号源)

        GPIO_InitTypeDef GPIOB_InitStruct;

        GPIOB_InitStruct.GPIO_Mode = GPIO_Mode_IPU;

        GPIOB_InitStruct.GPIO_Pin = GPIO_Pin_12;

        GPIOB_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOB,&GPIOB_InitStruct);

  • AFIO选择外部中断源为引脚GPIOB的Pin12

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource12);

  • 初始化EXIT中断模式

        EXTI_InitTypeDef EXTI_InitStruct;

        EXTI_InitStruct.EXTI_Line = EXTI_Line12; //PX12共用中断线12

        EXTI_InitStruct.EXTI_LineCmd = ENABLE;

        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;

        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;

        EXTI_Init(&EXTI_InitStruct);

  • 初始化NVIC,设置优先级分组模式

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//分组模式参数可见库文件

  • 初始化NVIC,选择中断请求通道和优先级

        NVIC_InitTypeDef NVIC_InitStruct;

        NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;

        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;

        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;

        NVIC_Init(&NVIC_InitStruct);

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

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

相关文章

使用docker compose一键部署 Portainer

使用docker compose一键部署 Portainer Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 1、创建安装目录 mkdir /data/partainer/ -p && cd /data/partainer2、创建docker…

【C语言篇】数组和函数的实践:扫雷游戏(附源码)

文章目录 前言扫雷游戏的分析和设计扫雷游戏的功能说明游戏的分析和设计文件结构设计 扫雷游戏的代码实现初始化棋盘打印棋盘布置雷排查雷 扫雷游戏的拓展 前言 源码在最后 扫雷游戏的分析和设计 经典扫雷游戏 扫雷游戏的功能说明 使⽤控制台实现经典的扫雷游戏 游戏可以通…

8月14日微语报,星期三,农历七月十一

8月14日微语报,星期三,农历七月十一,工作愉快,生活喜乐! 一份微语报,众览天下事! 1、巴黎奥运会:32项次世界纪录被刷新,125项次奥运纪录被改写。 2、国家邮政局&#…

鸿蒙应用程序框架基础

鸿蒙应用程序框架基础 应用程序包基础知识应用的多Module设计机制Module类型 Stage模型应用程序包结构开发态包结构编译包形态发布台包结构选择合适的包类型 应用程序包基础知识 应用的多Module设计机制 **支持模块化开发:**一个应用通常会包含多种功能&#xff0…

【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)

多功能智能家居室内灯光控制系统设计与实现 目录: 目录: 前言: 一、项目背景与目标 二、国内外研究现状: 2.1 国内研究现状: 2.2 国外研究现状: 2.3 发展趋势 三、硬件电路设计 3.1 总体概述 3.2 硬件连接总…

[NSSCTF 2022 Spring Recruit]babyphp

if嵌套,先过第一个if,需要a不含数字而且intval取整数 intval:通过使用指定的进制 base 转换(默认是十进制),返回变量 value 的 int 数值。 intval() 不能用于 object,否则会产生 E_WARNING 错误并返回 1。…

微服务实战系列之玩转Docker(十)

前言 我们知道Docker的“使命”是为了快速完成应用的迁移和部署。为提升它的战斗能力,Docker官方携手发布了Docker Swarm—— 一个快速完成Docker集群构建的利器。那么请先回忆一下本系列第八篇(重点compose)和第九篇(重点networ…

歌曲爬虫下载

本次编写一个程序要爬取歌曲音乐榜https://www.onenzb.com/ 里面歌曲。有帮到铁子的可以收藏和关注起来!!!废话不多说直接上代码。 1 必要的包 import requests from lxml import html,etree from bs4 import BeautifulSoup import re impo…

Kaggle竞赛——心脏病患者预测与可视化

目录 准备工作1. 特征解释2. 生成探索性数据分析报告2.1 数据集导入2.2 生成数据分析报告 3. 可视化分析3.1 特征相关性分析3.2 患病人数统计3.3 特征与是否患病之间的关系 4. 数据处理4.1 定类数据处理4.2 独热编码 5. 模型搭建5.1 随机森林模型5.2 可视化决策树5.3 特征重要性…

SourceTree基础使用教程

SourceTree基础使用 在B站上搜了不少关于SourceTree的教学视频,多家比较后下面的视频干活比较多 sourcetree使用教程 大概就二十几分钟,跟着学了一个小时,边看边操作,印象更深刻一些 主要涉及以下操作: 1、新建分支…

vue-echarts---折线图 (直接cv就行,全注释)

1、效果展示 2、完整代码&#xff0c;直接cv即可跑起来 <template><div id"mainend"></div> </template><script> import * as echarts from echarts; export default {name: LineChart,mounted() {this.initChart();this.registerUs…

NXP i.MX8系列平台开发讲解 - 4.1.1 GNSS篇(一) - 定位基础知识

专栏文章目录传送门&#xff1a;返回专栏目录 Hi, 我是你们的老朋友&#xff0c;主要专注于嵌入式软件开发&#xff0c;有兴趣不要忘记点击关注【码思途远】 文章目录 目录 专用名词&#xff1a; 1. GNSS 概述 1.2 四大GNSS 概述 1.2.1 GPS 1.2.2 BeiDou 1.2.3 GLONASS…

vue3 antdv3 将vxe-grid的头二行改为一行,解决最后一列不能自动根据屏幕的宽度自动缩放的问题。

1、先上个图&#xff1a; 官方地址&#xff1a; Vxe Table v4.6 header搞了二层&#xff0c;然后反馈过来&#xff0c;让调整&#xff1a; {title: 通讯地址,width: 200,showOverflow: tooltip,align: center,sortable: true,filters: companyOptions,filterRender: { name:…

国内首个支持国产化信创的开源云原生平台

国产化信创是指中国本土信息技术和创新产业的发展和推广。随着各种形势的复杂变化&#xff0c;推动国产化和信创已成为信息产业发展的重要方向。在这一背景下&#xff0c;国内的技术企业和开发者们纷纷投入到开源国产化和自主创新的浪潮中&#xff0c;力图摆脱对国外技术和服务…

谷歌开源Gemma-2 百亿参数大模型,性能超越Llama-3模型,免费使用

Gemma 模型 Gemma模型是谷歌发布的一个开源模型&#xff0c;任何人都可以免费下载预训练模型&#xff0c;进行使用。而谷歌最近也发布了Gemma 2 模型&#xff0c;模型参数超过了 200 亿大官&#xff0c;果真大模型最后都是拼参数的时候吗。 Gemma 2 模型发布 Gemma 2 模型可以…

【Linux系统编程】进程间的通信——管道通信

目录 前言&#xff1a; 一&#xff0c;管道的认识 二&#xff0c;管道的深入了解 2-1&#xff0c;管道的特点 2-2&#xff0c;深入学习管道 2-3&#xff0c;管道的特殊情况 三&#xff0c;匿名管道 四&#xff0c;Ubuntu系统和VSCode的使用 4-1&#xff0c;Ubuntu和VSC…

【ARM+Codesys 客户案例 】 基于RK3568/A40i/STM32+CODESYS在智能制造中的应用案例:全自动切片机器人

蔬菜是人们日常生活必不可缺的食品&#xff0c;并且食用方法多种多样。自步入小康社会以来&#xff0c;人们的生活节奏越来越快&#xff0c;很多传统服务已不能满足人们的物质需求和生活节奏。日常生活中通过手工快速切菜严重地威胁着人身安全&#xff0c;切菜时间过长或切菜不…

异常信息转储笔记-获取源码行号

前情 上一篇笔记《异常信息转储预研笔记-堆栈地址转换》留下了两个待解决问题&#xff08;如下图&#xff09;&#xff0c;问题1已在《异常信息转储笔记-demangle函数名字符》中解决&#xff0c;剩下问题2输出源码行号的问题还未能解决。 之前使用dladdr并未能将堆栈地址转换…

CourseGPT彻底改变本科学习

文章介绍了CourseGPT这一生成式AI工具&#xff0c;它基于Mistral AI的大型语言模型&#xff0c;旨在通过提供持续的教师支持和定期更新的课程材料来提升本科生的学习体验。CourseGPT能够利用课程特定的内容为学生提供精确和动态生成的回答&#xff0c;并且教师可以控制这些回答…

收藏:U盘加密软件哪个好用,防止U盘防复制软件

“物以稀为贵&#xff0c;藏之深则安。” 在信息时代的洪流中&#xff0c;数据之珍贵&#xff0c;无异于古时之金玉珠宝&#xff0c;而保护这些数据的安全&#xff0c;则成为了现代人心中的一道重要防线。 U盘&#xff0c;这小巧便携的数据存储工具&#xff0c;虽不及古时铜匣…