首页 > 其他分享 >STM32学习笔记——中断

STM32学习笔记——中断

时间:2024-09-11 20:13:07浏览次数:11  
标签:NVIC 触发 中断 笔记 STM32 InitStructure GPIO EXTI

中断:在主程序运行过程中,出现了特定事件(例如发生已经预知的一些情况),从而转入中断程序中,处理完成后再回到主程序中继续执行。(频繁的中断函数会影响主程序的运行,所以中断函数一边不处理特别复杂的逻辑)

EXTI(Extern Interrupt)外部中断

支持的触发方式:上升沿/下降沿/双边沿/软件触发

支持的GPIO口:所有GPIO口,但相同的Pin不能同时触发中断

通道数:16个GPIO_Pin,外加PVD输出、RTC闹钟、USB唤醒、以太网唤醒(0-15:对应GPIO_PIN 0-15中断;16:PVD输出;17:RTC闹钟事件;18:USB唤醒事件;19:连接到以太网唤醒事件(只适用于互联型产品))

触发响应方式:中断响应/事件响应

注意EXTI9_5和EXTI15_10这几个中断在两个通道里,需要通过标志位判断。

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

 

NVIC(Nested vectoredinterrupt controller)嵌套向量中断控制器

NVIC提供了灵活、高效、可扩展的中断处理机制,支持多级优先级、多向中断、嵌套向量中断等特性。

NVIC支持多级优先级,可以配置不同的优先级和互斥优先级组。中断控制器负责中断的挂起、解挂和优先级管理。

 

通过检测GPIO的PB14的电平变化触发中断的实例:

初始化:

void EXTI_NVIC_Init(void){
    /* GPIO --> AFIO */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);    //开启GPIOB口时钟,因为检测的是PB14口的电平信号
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);        //开启AFIO时钟
    GPIO_InitTypeDef GPIO_InitStructure;                    //初始化PB14引脚
    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);
    /* AFIO -->  EXTI */
    EXTI_InitTypeDef EXTI_InitStructure;                    //初始化EXTI
    EXTI_InitStructure.EXTI_Line =EXTI_Line14;                //选择14号线
    EXTI_InitStructure.EXTI_LineCmd =ENABLE;                //14号线使能
    EXTI_InitStructure.EXTI_Mode =EXTI_Mode_Interrupt;        //选择模式,这里是中断模式触发中断,如果是EXTI_Mode_Event,就是触发一个事件
    EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling; //触发方式:EXTI_Trigger_Falling ,EXTI_Trigger_Rising_Falling ,EXTI_Trigger_Rising,这里选的是下降沿触发
    EXTI_Init(&EXTI_InitStructure);
    /* EXTI -->  NVIC */                                    //开启NVIC
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);            //设置优先分组为2,这里是随便设置的
    NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_InitStruct.NVIC_IRQChannel = 40;                    //EXTI15_10_IRQn=40, /*!< External Line[15:10] Interrupts */ 选择配置EXTI15_10线这里PB14在EXTI15_10中
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;            //线路使能
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;    //抢占优先级
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;            //响应优先级
    NVIC_Init(&NVIC_InitStruct);                            //初始化
}

中断函数:

void EXTI15_10_IRQHandler(void){                    //函数名为预留的指定名称,可以从启动文件复制
    //中断标志位判断
    if(EXTI_GetITStatus(EXTI_Line14) == SET){        //判断是否是14号线触发的中断
        /*可添加一些操作
        *count++;
        */
        EXTI_ClearITPendingBit(EXTI_Line14);//清除中断标志
    }
}

 

标签:NVIC,触发,中断,笔记,STM32,InitStructure,GPIO,EXTI
From: https://www.cnblogs.com/husai/p/18408398

相关文章

  • prometheus学习笔记之基于三方exporter实现监控
    一、redis_exporter通过redis_exporter监控redis服务状态git地址:https://github.com/oliver006/redis_exporterdocker地址:https://hub.docker.com/r/oliver006/redis_exporter实验环境:redisk8部署prometheus二进制部署1.redis_exporter使用简解二进制部署prometheus......
  • UE4(5)逆向学习笔记(三)——UEDumper源码学习
    目录0.前言1.准备2.开始阅读2.1设置版本和Offset2.2获取GName2.3使用GName2.4获取GUObjectArray2.5使用GUObjectArray2.6寻找dump主流程2.6.1ObjectsManager::copyGObjectPtrs2.6.2ObjectsManager::copyUBigObjects2.6.3EngineCore::cacheFNames2.6.4EngineCo......
  • 关于Java中的类和对象笔记
    什么是对象:在现实世界中,随处可见的一种事物就是对象。面向对象的特点:封装性、继承性、多态性1.1封装(思想):对象的属性和行为封装起来,载体即为类。保存类数据结构的完整性,提高了程序的可维护性。1.2继承:可以继承父类的行为和属性,其中还可以添加独特的属性及行为。可复用性强......
  • 【学习笔记】SSL证书密码套件之加密
    本篇将介绍密码套件中加密常用的协议并将他们进行比较,包括:CHACHA20、AES-256-GCM、AES-128-GCM、AES-256-CBC、AES-128-CBC、3DES-CBC、RC4-128、DES-CBC一、概念(选择以上合适协议)对称加密算法目的是保护批量数据传输流密码(StreamCiphers)CHACHA20、RC4-128StreamCi......
  • Ethereum学习笔记 ---- 使用 Remix 调试功能理解 bytes 在 memory 中的布局
    目录编写合约编译、部署、调用合约调试交易1.调用函数bytesInMemory(),分析bytes的MemoryLayout执行RETUR前的最后一刻,stack快照如下执行完毕时刻的MemoryLayout对MemoryLayout的分析2.调用函数bytesArrayInMemmory(4),分析bytes[]的MemoryLayout执行RETUR前......
  • 软件测试学习笔记丨Docker 安装、管理、搭建服务
    本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32192容器(Docker)技术的价值保证环境一致性,只要使用相同镜像部署就可以保证一致性。轻量级虚拟化访问,运行更快,资源更小。同时也可以荣期间的隔离性。封装部署的负载型,云原生与微服务的首选技术方案。未来测试人员必学的技术......
  • 超声波 HC-SR04 的使用 CubeMx + STM32F103C8T6 【含两个】
    HC-SR04的使用一、超声波模块介绍二、工作原理介绍三、接线方式四、驱动方式方法一方法二五、程序实现串口查看数据方法一HC_SR04.cHC_SR04.hmain.cmain.h串口数据显示方法二main.cmain.h六、数据处理一、超声波模块介绍HC-SR04是一种常用的超声波测距模块。......
  • 二项式反演学习笔记
    前言万字长文!这里有我的一些思考和领会,网络上的教程都太潦草了。并且我发现了新的反演公式!概述二项式反演用于转化两个具有特殊关系的函数\(f\)和\(g\),从而方便求解问题。一般来说,直接计算恰好满足\(n\)个限制的答案不好求,但是可以计算出“至少”/“至多”满足\(n\)......
  • php入门学习笔记一
    @TOC1.PHP简介php是HypertextPreprocessor的缩写,是开源的脚本语言,运行在服务端的语言,搭建php环境可以windows系统上可以安装wamp,发布上线的时候可以使用lamp。lamp:l:linux,a:apache,m:mysql,p:php,这四个都是开源的,所以不用担心版权问题。2.五个基本概念2.1、静态页面和动态页面的概念......
  • Min_25 筛 & Min_26 筛 & zzt 求和法 给(人能看懂的)代码的 学习笔记
    看不懂别人博客里写的代码,所以只好自己实现常数超大的版本了,,,记号:\[\begin{aligned}\mathbfP&:\text{质数集}\\p_k&:\text{第k个质数}\\\text{lpf}(n)&:\text{n的最小质因子}\\x/y&:\left\lfloor\dfracxy\right\rfloor\end{aligned}\]前置知识:\(n\)的块筛,指\(n/i\)......