STM32F10xNVIC.docx
- 文档编号:9997881
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:66
- 大小:38.10KB
STM32F10xNVIC.docx
《STM32F10xNVIC.docx》由会员分享,可在线阅读,更多相关《STM32F10xNVIC.docx(66页珍藏版)》请在冰豆网上搜索。
STM32F10xNVIC
13.1NVIC寄存器结构..................................................................161
13.2NVIC库函数..........................................................................163
函数名
描述
1
NVIC_DeInit
将外设NVIC寄存器重设为缺省值
2
NVIC_SCBDeInit
将外设SCB寄存器重设为缺省值
3
NVIC_PriorityGroupConfig
设置优先级分组(先占优先级和从优先级)
4
NVIC_Init
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
5
NVIC_StructInit
把NVIC_InitStruct中的每一个参数按缺省值填入
6
NVIC_SETPRIMASK
使能PRIMASK优先级:
提升执行优先级至0
7
NVIC_RESETPRIMASK
失能PRIMASK优先级
8
NVIC_SETFAULTMASK
使能FAULTMASK优先级:
提升执行优先级至-1
9
NVIC_RESETFAULTMASK
失能FAULTMASK优先级
10
NVIC_BASEPRICONFIG
改变执行优先级从N(最低可设置优先级)提升至1
11
NVIC_GetBASEPRI
返回BASEPRI屏蔽值
12
NVIC_GetCurrentPendingIRQChannel
返回当前待处理IRQ标识符
13
NVIC_GetIRQChannelPendingBitStatus
检查指定的IRQ通道待处理位设置与否
14
NVIC_SetIRQChannelPendingBit
设置指定的IRQ通道待处理位
15
NVIC_ClearIRQChannelPendingBit
清除指定的IRQ通道待处理位
16
NVIC_GetCurrentActiveHandler
返回当前活动的Handler(IRQ通道和系统Handler)的标识符
17
NVIC_GetIRQChannelActiveBitStatus
检查指定的IRQ通道活动位设置与否
18
NVIC_GetCPUID
返回ID号码,Cortex-M3内核的版本号和实现细节
19
NVIC_SetVectorTable
设置向量表的位置和偏移
20
NVIC_GenerateSystemReset
产生一个系统复位
21
NVIC_GenerateCoreReset
产生一个内核复位(内核+NVIC)
22
NVIC_SystemLPConfig
选择系统进入低功耗模式的条件
23
NVIC_SystemHandlerConfig
使能或失能指定的系统Handler
24
NVIC_SystemHandlerPriorityConfig
设置指定的系统Handler优先级
25
NVIC_GetSystemHandlerPendingBitStatus
检查指定的系统Handler待处理位设置与否
26
NVIC_SetSystemHandlerPendingBit
设置系统Handler待处理位
27
NVIC_ClearSystemHandlerPendingBit
清除系统Handler待处理位
28
NVIC_GetSystemHandlerActiveBitStatus
检查系统Handler活动位设置与否
29
NVIC_GetFaultHandlerSources
返回表示出错的系统Handler源
30
NVIC_GetFaultAddress
返回产生表示出错的系统Handler所在位置的地址
13嵌套向量中断控制器(NVIC)
NVIC驱动有多种用途:
例如使能或者失能IR中断,使能或者失能单独的IRQ通道,改变IRQ通道的优先级等等。
Section13.1NVIC寄存器结构描述了固件函数库所使用的数据结构,Section13.2固件库函数介绍了函数库里的所有函数。
13.1NVIC寄存器结构
NVIC寄存器结构,NVIC_TypeDeff,在文件“stm2f10x_map.h中定义如下:
typedefstruct
{
vu32Enable[2];
u32RESERVED0[30];
vu32Disable[2];
u32RSERVED1[30];
vu32Set[2];
u32RESERVED2[30];
vu32Clear[2];
u32RESERVED3[30];
vu32Active[2];
u32RESERVED4[62];
vu32Priority[11];
}NVIC_TypeDef;/*NVICStructure*/
typedefstruct
{
vu32CPUID;
vu32IRQControlState;
vu32ExceptionTableOffset;
vu32AIRC;
vu32SysCtrl;
vu32ConfigCtrl;
vu32SystemPriority[3];
vu32SysHandlerCtrl;
vu32ConfigFaultStatus;
vu32HardFaultStatus;
vu32DebugFaultStatus;
vu32MemoryManageFaultAddr;
vu32BusFaultAddr;
}SCB_TypeDef;/*SystemControlBlockStructure*/
Table265.例举了NVIC所有寄存器
寄存器
描述
Enable
中断设置使能寄存器
Disable
中断清除使能寄存器
Set
中断设置待处理寄存器
Clear
中断清除待处理寄存器
Active
中断活动位寄存器
Priority
中断优先级寄存器
CPUID
CPUID基寄存器
IRQControlStatus
中断控制状态寄存器
ExceptionTableOffset
向量表移位寄存器
AIRC
应用控制/重置寄存器
SysCtrl
系统控制寄存器
ConfigCtrl
设置控制寄存器
SystemPriority
系统处理优先级寄存器
SysHandlerCtrl
系统处理控制和状态寄存器
ConfigFaultStatus
设置错误状态寄存器
HardFaultStatus
硬件错误状态寄存器
DebugFaultStatus
除错错误寄存器
MemorymanageFaultAddr
存储器管理错误地址寄存器
BusFaultAddr
总线错误地址寄存器
NVIC外设声明于文件“sm32f10x_map.h:
...
#defineSCS_BASE((u32)0xE000E000)
#defineNVIC_BASE(SCS_BASE+0x0100)
#defineSCB_BASE(SCS_BASE+0x0D00)
...
#ifndefDEBUG
...
#ifdef_NVIC
#defineNVIC((NVIC_TypeDef*)NVIC_BASE)
#defineSCB((SCB_TypeDef*)SCB_BASE)
#endif/*_NVIC*/
...
#else/*DEBUG*/
...
#ifdef_NVIC
EXTNVIC_TypeDef*NVIC;
EXTSCB_TypeDef*SCB;
#endif/*_NVIC*/
...
#endif
使用Debug模式时,初始化指针NVIC,SCB于文件:
#ifdef_NVIC
NVIC=(NVIC_TypeDef*)NVIC_BASE;
SCB=(SCB_TypeDef*)SCB_BASE;
#endif/*_NVIC*/
为了访问NVIC寄存器,,_NVIC必须在文件中定义如下:
#define_NVIC
13.2NVIC库函数
Table266.例举了NVIC的库函数
函数名
描述
1
NVIC_DeInit
将外设NVIC寄存器重设为缺省值
2
NVIC_SCBDeInit
将外设SCB寄存器重设为缺省值
3
NVIC_PriorityGroupConfig
设置优先级分组(先占优先级和从优先级)
4
NVIC_Init
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
5
NVIC_StructInit
把NVIC_InitStruct中的每一个参数按缺省值填入
6
NVIC_SETPRIMASK
使能PRIMASK优先级:
提升执行优先级至0
7
NVIC_RESETPRIMASK
失能PRIMASK优先级
8
NVIC_SETFAULTMASK
使能FAULTMASK优先级:
提升执行优先级至-1
9
NVIC_RESETFAULTMASK
失能FAULTMASK优先级
10
NVIC_BASEPRICONFIG
改变执行优先级从N(最低可设置优先级)提升至1
11
NVIC_GetBASEPRI
返回BASEPRI屏蔽值
12
NVIC_GetCurrentPendingIRQChannel
返回当前待处理IRQ标识符
13
NVIC_GetIRQChannelPendingBitStatus
检查指定的IRQ通道待处理位设置与否
14
NVIC_SetIRQChannelPendingBit
设置指定的IRQ通道待处理位
15
NVIC_ClearIRQChannelPendingBit
清除指定的IRQ通道待处理位
16
NVIC_GetCurrentActiveHandler
返回当前活动的Handler(IRQ通道和系统Handler)的标识符
17
NVIC_GetIRQChannelActiveBitStatus
检查指定的IRQ通道活动位设置与否
18
NVIC_GetCPUID
返回ID号码,Cortex-M3内核的版本号和实现细节
19
NVIC_SetVectorTable
设置向量表的位置和偏移
20
NVIC_GenerateSystemReset
产生一个系统复位
21
NVIC_GenerateCoreReset
产生一个内核(内核+NVIC)复位
22
NVIC_SystemLPConfig
选择系统进入低功耗模式的条件
23
NVIC_SystemHandlerConfig
使能或者失能指定的系统Handler
24
NVIC_SystemHandlerPriorityConfig
设置指定的系统Handler优先级
25
NVIC_GetSystemHandlerPendingBitStatus
检查指定的系统Handler待处理位设置与否
26
NVIC_SetSystemHandlerPendingBit
设置系统Handler待处理位
27
NVIC_ClearSystemHandlerPendingBit
清除系统Handler待处理位
28
NVIC_GetSystemHandlerActiveBitStatus
检查系统Handler活动位设置与否
29
NVIC_GetFaultHandlerSources
返回表示出错的系统Handler源
30
NVIC_GetFaultAddress
返回产生表示出错的系统Handler所在位置的地址
13.2.1函数NVIC_DeInit
Table267.函数NVIC_DeInit
函数名
NVIC_DeInit
函数原形
voidNVIC_DeInit(void)
功能描述
将外设NVIC寄存器重设为缺省值
输入参数
无
输出参数
无
返回值
无
先决条件
无
被调用函数
无
例:
/*ResetstheNVICregisterstotheirdefaultresetvalue*/
voidNVIC_DeInit(void)
{
u32index=0;
NVIC->ICER[0]=0xFFFFFFFF;
NVIC->ICER[1]=0x0FFFFFFF;//只有60个可屏蔽IRQ
NVIC->ICPR[0]=0xFFFFFFFF;
NVIC->ICPR[1]=0x0FFFFFFF;
for(index=0;index<0x0F;index++)
{NVIC->IPR[index]=0x00000000;}
}
13.2.2函数NVIC_SCBDeInit
Table268.函数NVIC_SCBDeInit
函数名
NVIC_SCBDeInit
函数原形
voidNVIC_SCBDeInit(void)
功能描述
将外设SCB寄存器重设为缺省值
输入参数
无
输出参数
无
返回值
无
先决条件
无
被调用函数
无
例:
/*ResetstheSCBregisterstotheirdefaultresetvalue*/
voidNVIC_SCBDeInit(void)
{
u32index=0x00;
SCB->ICSR=0x0A000000;//中断控制和状态,Bit27(PENDSVCLR)=1;Bit25(PENDSTCLR)=1:
解除挂起。
SCB->VTOR=0x00000000;//向量表偏移,(20bit值+Bit21指向向量表位置:
0-Code?
1-SRAM?
)
SCB->AIRCR=AIRCR_VECTKEY_MASK;//应用中断和复位控制。
#defineAIRCR_VECTKEY_MASK((u32)0x05FA0000),写保护。
SCB->SCR=0x00000000;//系统控制
SCB->CCR=0x00000000;//配置控制
for(index=0;index<0x03;index++)
{SCB->SHPR[index]=0;}//系统处理器优先级
SCB->SHCSR=0x00000000;//系统处理器控制和状态
SCB->CFSR=0xFFFFFFFF;//可配置故障状态
SCB->HFSR=0xFFFFFFFF;//硬故障状态
SCB->DFSR=0xFFFFFFFF;//调试故障状态
//另有BFAR、MMFAR、CPUID三个寄存器不用初始化?
}
13.2.3函数NVIC_PriorityGroupConfig
Table269.函数NVIC_PriorityGroupConfig
函数名
NVIC_PriorityGroupConfig
函数原形
voidNVIC_PriorityGroupConfig(u32NVIC_PriorityGroup)
功能描述
设置优先级分组:
先占优先级和从优先级
输入参数
NVIC_PriorityGroup:
优先级分组位长度
参阅Section:
NVIC_PriorityGroup查阅更多该参数允许取值范围
输出参数
无
返回值
无
先决条件
优先级分组只能设置一次
被调用函数
无
NVIC_PriorityGroup该参数设置优先级分组位长度(见Table270.)
Table270.NVIC_PriorityGroup值
NVIC_PriorityGroup
描述
NVIC_PriorityGroup_0
先占优先级0位,从优先级4位
NVIC_PriorityGroup_1
先占优先级1位,从优先级3位
NVIC_PriorityGroup_2
先占优先级2位,从优先级2位
NVIC_PriorityGroup_3
先占优先级3位,从优先级1位
NVIC_PriorityGroup_4
先占优先级4位,从优先级0位
例:
/*ConfigurethePriorityGroupingwith1bit*/
voidNVIC_PriorityGroupConfig(u32NVIC_PriorityGroup)
{
/*Checktheparameters*/
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
//#defineassert_param(expr)((expr)?
(void)0:
assert_failed((u8*)__FILE__,__LINE__))
//voidassert_failed(u8*file,u32line);
//#defineNVIC_PriorityGroup_0((u32)0x700)/*0位抢占,4位响应*/
//#defineNVIC_PriorityGroup_1((u32)0x600)
//#defineNVIC_PriorityGroup_2((u32)0x500)
//#defineNVIC_PriorityGroup_3((u32)0x400)
//#defineNVIC_PriorityGroup_4((u32)0x300)/*4位抢占,0位响应*/
//#defineIS_NVIC_PRIORITY_GROUP(GROUP)(((GROUP)==NVIC_PriorityGroup_0)||\
((GROUP)==NVIC_PriorityGroup_1)||\
((GROUP)==NVIC_PriorityGroup_2)||\
((GROUP)==NVIC_PriorityGroup_3)||\
((GROUP)==NVIC_PriorityGroup_4))
/*SetthePRIGROUP[10:
8]bitsaccordingtoNVIC_PriorityGroupvalue*/
SCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;//#defineAIRCR_VECTKEY_MASK((u32)0x05FA0000)
}
13.2.4函数NVIC_Init
Table271.函数NVIC_Init
函数名
NVIC_Init
函数原形
voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)
功能描述
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器。
输入参数NVIC_InitStruct:
指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置。
信息参阅Section:
NVIC_InitTypeDef查阅更多该参数允许取值范围。
输出参数
无
返回值
无
先决条件
无
被调用函数
无
NVIC_InitTypeDefstructure
NVIC_InitTypeDef定义于文件:
typedefstruct
{
u8NVIC_IRQChannel;
u8NVIC_IRQChannelPreemptionPriority;
u8NVIC_IRQChannelSubPriority;
FunctionalStateNVIC_IRQChannelCmd;
//typedefenum{DISABLE=0,ENABLE=!
DISABLE}FunctionalState;
}NVIC_InitTypeDef;
NVIC_IRQChannel该参数用以使能或者失能指定的IRQ通道。
Table272.给出了NVIC_IRQChannel的可取值
NVIC_IRQChannel
描述
1
WWDG_IRQChannel
窗口看门狗中断
2
PVD_IRQChannel
PVD通过EXTI探测中断
3
TAMPER_IRQChannel
篡改中断
4
RTC_IRQChannel
RTC全局中断
5
Flash_IRQChannel
FLASH全局中断
6
RCC_IRQChannel
RCC全局中断
7
EXTI0_IRQChannel
外部中断线0中断
8
EXTI1_IRQChannel
外部中断线1中断
9
EXTI2_IRQChannel
外部中断线2中断
10
EXTI3_IRQChannel
外部中断线3中断
11
EXTI4_IRQChannel
外部中断线4中断
12
DMA1_Channel1_IRQChannel
DMA通道1中断
13
DMA1_Channel2_IRQChannel
DMA通道2中断
14
DMA1_Channel3_IRQChannel
DMA通道3中断
15
DMA1_Channel4_IRQChannel
DMA通道4中断
16
DMA1_Channel5_IRQChannel
DMA通道5中断
17
DMA1_Channel6_IRQChannel
DMA通道6中断
18
DMA1_Channel7_IRQChannel
DMA通道7中断
19
ADC1_2_IRQChannel
ADC全局中断
20
USB_HP_CANTX_IRQChannel
USB高优先级或者CAN发送中断
21
USB_LP_CAN_RX0_IRQChannel
USB低优先级或者CAN接收0中断
22
CAN_RX1_IRQChannel
CAN接收1中断
23
CAN_SCE_IRQChannel
CANSCE中断
24
EXTI9_5_IRQChannel
外部中断线9-5中断
25
TIM1_BRK_IRQChannel
TIM1暂停中断
26
TIM1_UP_IRQChannel
TIM1刷新中断
27
TIM1_TRG_COM_IRQChannel
TIM1触发和通讯中断
28
TIM1_CC_IRQChannel
TIM1捕获比较中断
29
TIM2_IRQChannel
TIM2全局中断
30
TIM3_IRQChann
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32F10xNVIC
![提示](https://static.bdocx.com/images/bang_tan.gif)