STM32NVIC嵌套向量中断控制器函数分析Word下载.docx

上传人:b****5 文档编号:19674910 上传时间:2023-01-08 格式:DOCX 页数:6 大小:755.37KB
下载 相关 举报
STM32NVIC嵌套向量中断控制器函数分析Word下载.docx_第1页
第1页 / 共6页
STM32NVIC嵌套向量中断控制器函数分析Word下载.docx_第2页
第2页 / 共6页
STM32NVIC嵌套向量中断控制器函数分析Word下载.docx_第3页
第3页 / 共6页
STM32NVIC嵌套向量中断控制器函数分析Word下载.docx_第4页
第4页 / 共6页
STM32NVIC嵌套向量中断控制器函数分析Word下载.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

STM32NVIC嵌套向量中断控制器函数分析Word下载.docx

《STM32NVIC嵌套向量中断控制器函数分析Word下载.docx》由会员分享,可在线阅读,更多相关《STM32NVIC嵌套向量中断控制器函数分析Word下载.docx(6页珍藏版)》请在冰豆网上搜索。

STM32NVIC嵌套向量中断控制器函数分析Word下载.docx

vu32ICPR[2];

u32RESERVED3[30];

vu32IABR[2];

u32RESERVED4[62];

vu32IPR[15];

}NVIC_TypeDef;

ISER[2]:

Interruptsetenableregisters中断使能寄存器组

ICER[2]:

interruptclearenableregisters中断除能寄存器组

ISPR[2]:

interruptsetpendingregisters中断挂起寄存器组

ICPR[2]:

interruptclearpendingregisters中断解挂寄存器组

IABR[2]:

interruptactivebitregisters中断激活标志寄存器组

主要分析

IPR[15]:

interruptpriorityregisters中断优先级控制寄存器组

使用函数实现中断分组:

可选分组0--4

MY_NVIC_PriorityGroupConfig(u8NVIC_Group)

u32temp,temp1;

//设置中转变量

temp1=(~NVIC_Group)&

0x07;

//取后3位

temp1;

AIRCR;

//读取先前设置

temp&

=0x0000F8FF;

//清空先前设置

temp|=0x05FA0000;

//插入密钥

temp|=temp1;

//分组设置赋值进

SCB->

;

AIRCB=temp;

//设置完的值赋值给中断分组寄存器

}

语句解读:

temp1=(~NVIC_Group)&

由于

所以组号取反与111即得到分组所需寄存器值

temp|=0x05FA0000;

密钥

使用函数实现中断优先级设置:

voidMY_NVIC_Init(u8NVIC_PreemptionPriority,u8NVIC_SubPriority,u8NVIC_Channel,u8NVIC_Group)

u32temp;

u8IPRADDR=NVIC_Channel/4;

//每组只能存4个得到组地址

u8IPROFFSET=NVIC_Channel%4;

//得到组内偏移地址

IPROFFSET=IPROFFSET*8+4;

//得到确切地址

MY_NVIC_PriorityGroupConfig(NVIC_Group);

//设置分组

temp=NVIC_Preemptionpriority;

>

NVIC_Group);

//设置响应优先级

=0xf;

//取低4位

if(NVIC_Channel;

ISER[0]|=1;

ISER[1]|=1;

IPR[IPRADDR]|=temp

temp=NVIC_Preemptionpriority;

//响应优先级在右边,根据响应位多少进行右移

temp&

//得到分组值

外部中断配置函数:

STM32的EXTI控制器支持19个外部中断/事件请求。

每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

STM32的19个外部中断为:

线0~15:

对应外部IO口的输入中断。

线16:

连接到PVD输出。

PVD(ProgrammableVoltageDetector),即可编程电压监测器。

应用于STM32ARM芯片中,作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。

当供电电压又恢复到给定的阀值以上时,也会产生一个中断,通知软件供电恢复。

线17:

连接到RTC闹钟事件。

RTC是多种名词的缩写,如:

实时时钟(Real-TimeClock)

线18:

连接到USB唤醒事件。

对于外部中断EXTI控制MDK定义了如下结构体:

vu32IMR;

vu32EMR;

vu32RTSR;

vu32FTSR;

vu32SWIER;

vu32PR;

}EXTI_TypeDef;

IMR:

中断屏蔽寄存器InterruptMaskRegister32位寄存器前19位有效

EMR:

事件屏蔽寄存器Eventmaskregister

32位寄存器前19位有效

RTST:

上升沿触发选择寄存器Risingedgetriggerselectregister

FTSR:

下降沿触发选择寄存器Fallingedgetriggerselectregister

SWIER:

软件中断事件寄存器Softwareinterrupteventregister

PR:

挂起寄存器PendingRegister

I/O口复用里的配置寄存器EXTICR每个I/O口可以配置成中断输入

STM32任何一个IO口都可以配置成中断输入口,但是IO口的数目远大于中断线数(16个)。

于是STM32就这样设计,GPIOA~GPIOG的[15:

0]分别对应中断线15~0。

这样每个中断线对应了最多7个IO口,以线0为例:

它对应了GPIOA.0、PIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。

而中断线每次只能连接到1个IO口上,这样就需要EXTICR来决定对应的中断线配置到哪个GPIO上了。

EXTICR在AFIO的结构体中定义如下

vu32EVCR;

vu32MAPR;

vu32EXTICR[4];

}AFIO_TypeDef;

EXTIRC寄存器总共4个,因为编译器的寄存器都是从0号开始的,所以EXTICR[0]---EXTICR[3]对应

中的EXTICR1---EXTICR4每个EXTICR用了其中低16位.

voidEx_NVIC_Config(u8GPIOx,u8BITx,u8TRIM)

u8EXTADDR;

u8EXTOFFSET;

EXTADDR=BITx/4;

//得到中断寄存器组编号

EXTOFFSET=(BITx%4)*4;

//得到偏移量具体哪个I/O口进行设置

RCC->

APB2ENR|=0x01;

//使能复用I/O口

AFIO->

EXTICR[EXTADDR]|=GPIOx;

IMR|=1;

EMR|=1;

FTSR|=1;

RTSR|=1<

<

BITx;

//上升沿触发

注:

TRIM为触发方式选择变量;

0x01下降沿触发0x02上升沿触发0x03任意电平触发.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1