STM32之中断函数介绍篇

发布者:CelestialSoul最新更新时间:2021-10-12 来源: eefocus关键字:STM32  中断函数  中断请求 手机看文章 扫描二维码
随时随地手机看文章

NVIC驱动有很多的用途,如使能或者失能IRQ(中断请求),或者是使能或失能单独的IRQ通道,或者是改变其优先级。以下介绍相关函数的功能和基本用法。


1.NVIC_DeInit函数的功能是将外设NVIC寄存器重设为默认值。


2.NVIC)PriorityGroupConfig函数的功能是设置优先级分组:先占优先级和从优先级,且有一个输入参数是优先级分组的长度


例:定义先占优先级1,从优先级3.


NVIC_PriorityGroupConfig(NVICPriorityGroup_1);


3.NVIC_Init函数的功能是根据NVIC_InitStruct里面指定的参数初始化外设NVIC寄存器,其中NVIC_InitTypeDef structure定义结构体的代码如下:


typedef struct


{

u8 NVIC_IRQChannel;


u8 NVIC_IRQChannelPreemptionPriority;


u8 NVIC_IRQChannelSubPriority;


FunctionalState NVIC_IRQChannelCmd;


}NVIC_InitTypeDef;


NVIC_IRQChannel参数是用于使能或者失能指定的IRQ通道,其中IRQ通道有很多,可以自己查询相关的手册。


NVIC_IRQChannelPreemptionPriority参数设置了成员NVIC_IRQChannel中的先占优先级。


IRQChannelSubPriority参数设置了成员NVIC_IRQChannel中的从优先级。


当选定NVIC_PriorityGroup_0,参数NVIC_IRQChannelPreemptionPriority对中断通道的设置不产生影响;


当选定NVIC_PriorityGroup_4,参数IRQChannelSubPriority对中断通道的设置不产生影响。


NVIC_IRQChannelCmd参数指定了在成员NVIC_IRQChannel中定义的IRQ通道被使能或者失能,参数可取ENABLE 和 DISABLE。


例:定义优先级


NVIC_InittypeDef NVIC_InitStructure;


NVIC_PriorityGroupConfig(NVICPriorityGroup_1);//先占优先级用1 ,从优先级用3


//定义TIM3中断的优先级,先占优先级为0,从优先级为2


NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;


NVIC_InitStructure.NVIC_IRQSubPriority = 2;


NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


NVIC_InitStructure(&NVIC_InitStructure);


//定义USART1串口中断的优先级,先占优先级1,从优先级5.



NVIC_InitStructure.NVIC_IRQChannel = SUART1_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;


NVIC_InitStructure.NVIC_IRQSubPriority = 5;


NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


NVIC_InitStructure(&NVIC_InitStructure);


//定义RTC中断优先级为1,从优先级为7;

NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;


NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;


NVIC_InitStructure.NVIC_IRQSubPriority = 7;


// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


NVIC_InitStructure(&NVIC_InitStructure); 


4.NVIC_SetVectorTable函数的功能是设置向量表的位置和偏移。其中输入参数中,对于32位的OFFSET向量表基地址的偏移量对于FLASH,参数值必须高于0x08000100,对于RAM必须高于0X100.


例:对FLASH指定向量表基地址偏移量。


NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x00);

关键字:STM32  中断函数  中断请求 引用地址:STM32之中断函数介绍篇

上一篇:ST 扩大STM32生态系统加快基于STM32U5 极低功耗微控制器的开发
下一篇:STM32中断函数名

推荐阅读最新更新时间:2024-11-06 13:54

STM32上电启动过程分析
单片机上电后执行的第一段代码 1.初始化堆栈指针 SP=_initial_sp 2.初始化 PC 指针=Reset_Handler 3.初始化中断向量表 4.配置系统时钟 5.调用 C 库函数_main 初始化用户堆栈,然后进入 main 函数。 在正式讲解之前,我们需要了解STM32的启动模式。 STM32的启动模式 手册可以在Keil中跳转查看 STM32的三种启动模式 首先要讲一下STM32的启动模式,因为启动模式决定了向量表的位置,STM32有三种启动模式: 1. 主闪存存储器(Main Flash memor
[单片机]
<font color='red'>STM32</font>上电启动过程分析
STM32学习笔记---IWDG独立看门狗实验
继做了WWDG窗口看门狗实验后,继续进行第9个实验-IWDG独立看门狗实验,本实验通过设置窗口看门狗IWDG间断时间来定期的检查是否出错,在SysTick_Handler中断函数中加入了流水灯用来测试是否运行了IDWG看门狗程序,用PD6-LED2通过闪烁验证程序可行性,编程工程大致和USART实验过程差不多,先是开启系统时钟,然后GPIO端口时钟,然后复用功能时钟AFIO,然后各个模块用的的时钟,,呵呵,之后进入各个模块初始化,设置,编写子程序,中断的话,要在中断函数中填写某模块的中断触发处理函数,重要的是在CONFG.H函数中开启模块的声明,差不多是这样的了。 以下为IWDG函数主要部分: //IWDG窗口看门狗设置初始化 v
[单片机]
<font color='red'>STM32</font>学习笔记---IWDG独立看门狗实验
STM32学习——ADC采集
注意事项 暂时只做了单通道中断方式的采集 1.选择输入引脚时就已经确定了后面ADC的转换通道ADC_Channel 编程步骤 1.初始化ADC用到的GPIO 2.初始化ADC并设置其工作参数 3.设置ADC的时钟(分频因子) 4.设置ADC通道、顺序以及采样时间 5.使能ADC中断,并设置中断方式 6.使能ADC,并校准 7.使用软件触发ADC转换 代码实现 (1)配置GPIO static void ADC_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC
[单片机]
<font color='red'>STM32</font>学习——ADC采集
STM32入门系列-STM32最小系统介绍
STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件。一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由ARMCortexM3、总线矩阵、外设组成。单片机开发板能够做哪些事情是自己的选择。我们可以制作一款STM32最小系统核心开发板,当然根据实际项目的需求,加上单片机的某些特定外设模块。 简单说,要利用到STM32芯片所有引脚来设计具有特定或者通用功能的开发板。首先要把STM32最小系统画出来,之后再添加需要用到的外设。 电源电路 VDD表示数字电源的正极,而VSS是负极。VDDA用来表示模拟电源正极(供电给ADC、DA
[单片机]
<font color='red'>STM32</font>入门系列-<font color='red'>STM32</font>最小系统介绍
STM32中断向量嵌套NVIC理解
一,中断优先级: 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源
[单片机]
STM32 IAP 升级功能
IAP In Application Programming 可通过USB,CAN,UART,I2C,SPI等接口实现 IAP流程 Bootloader程序:接收升级程序,更新到flash指定地址;跳转到指定地址执行 STM32设置 ①:为Bootloader预留0x10000空间 ②:设置APP程序的起始地址 ③:中断向量表的偏移量设置 ④:生成bin文件 详见:https://blog.csdn.net/zhangxuechao ⑤:代码更新FLASH固件,执行FLASH代码 举例 //appxaddr:应用程序的起始地址 //appbuf:应用程序CODE. //appsize:应用程序大小(字节).
[单片机]
<font color='red'>STM32</font> IAP 升级功能
stm32独立看门狗和窗口看门狗的区别
1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的。窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR 以上是我总结的 接下来我们介绍一下独立看门狗和窗口看门狗,这里我们就不讲解程序了,很简单的,配置一下寄存器就可以使用了。 独立看门狗没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新
[单片机]
STM32实现低功耗待机总结(电流低至5.7uA)
刚开始进入STOPMode后,整机功耗有 300uA的,此时外围其他硬件电路电流已经可以肯定漏电流在nA级,因此调试方向在主芯片,经过实际测试,都是GPIO配置的问题,比如某个GPIO为中断输入,闲置为低电平,而我们配置成了IPU,因此内部的40K上拉就会在这里消耗3/40k =75uA,另外将N.C的GPIO配置成Floating Input,也会有一些漏电流,实际测试漏电流不大;另外将STM32F05x直接PIINtoPIN替代STM32100,所以Pin35,36的 PF6,PF7为之前的VCC,GND,因此要相应的配置为IPU,IPD,才不会有拉电流/灌电流;外部不使用晶振,因此必须将其配置为IPU/IPD 或者输出Low,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved