STM32F101xx/STM32F103xx NVIC库函数详解

需积分: 50 27 下载量 176 浏览量 更新于2024-08-09 收藏 2.24MB PDF 举报
"STM32固件库中的NVIC库函数是用于管理Cortex-M3处理器中断控制器NVIC(Nested Vectored Interrupt Controller)的函数集合。这些函数提供了对NVIC寄存器的操作,包括初始化、优先级配置、中断处理状态查询和控制等功能。STM32F101xx和STM32F103xx系列微控制器的固件库包含了这些函数,旨在简化开发者对外设中断的管理,提高开发效率并保证代码的兼容性。" NVIC(Nested Vectored Interrupt Controller)是Cortex-M系列处理器的一个核心组件,用于管理和调度系统中的中断。NVIC库函数允许程序员进行以下操作: 1. NVIC初始化:通过`NVIC_DeInit`和`NVIC_SCBDeInit`函数,可以分别重置NVIC和SCB(System Control Block)寄存器到其默认值,确保中断系统处于已知状态。 2. 优先级配置:`NVIC_PriorityGroupConfig`函数用于设置中断优先级分组,可以调整先占优先级和从优先级的关系,从而实现不同中断之间的优先级排序。 3. NVIC寄存器初始化:`NVIC_Init`函数根据提供的结构体`NVIC_InitStruct`参数初始化NVIC的相关寄存器,允许自定义中断特性。 4. 寄存器填充:`NVIC_StructInit`函数将结构体的各个参数设置为默认值,方便快速初始化。 5. PRIMASK和FAULTMASK控制:`NVIC_SETPRIMASK`、`NVIC_RESETPRIMASK`、`NVIC_SETFAULTMASK`和`NVIC_RESETFAULTMASK`函数分别用于开启和关闭PRIMASK和FAULTMASK优先级,影响中断的处理。 6. 基础优先级设置:`NVIC_BASEPRICONFIG`函数可以改变执行优先级,提升或降低中断的处理级别。 7. 中断状态查询和控制:`NVIC_GetBASEPRI`返回当前的基础优先级值;`NVIC_GetCurrentPendingIRQChannel`获取当前待处理的中断通道;`NVIC_GetIRQChannelPendingBitStatus`、`NVIC_SetIRQChannelPendingBit`和`NVIC_ClearIRQChannelPendingBit`分别用于检查、设置和清除中断通道的挂起状态。 8. 活动中断处理:`NVIC_GetCurrentActiveHandler`返回当前活动的中断处理程序;`NVIC_GetIRQChannelActiveBitStatus`检查中断通道是否激活。 9. 系统和处理器复位:`NVIC_SetVectorTable`设置向量表的位置和偏移,控制中断处理的起点;`NVIC_GenerateSystemReset`和`NVIC_GenerateCoreReset`产生系统和内核复位。 10. 低功耗模式配置:`NVIC_SystemLPConfig`用于选择进入低功耗模式的条件,有助于节能设计。 11. 系统处理程序管理:`NVIC_SystemHandlerConfig`、`NVIC_SystemHandlerPriorityConfig`分别用于启用或禁用及配置系统处理程序的优先级;`NVIC_GetSystemHandlerPendingBitStatus`、`NVIC_SetSystemHandlerPendingBit`和`NVIC_ClearSystemHandlerPendingBit`用于系统处理程序的挂起状态控制。 12. 错误信息获取:`NVIC_GetFaultHandlerSources`返回表示错误的系统处理程序源,`NVIC_GetFaultAddress`返回导致错误的处理程序地址。 通过这些NVIC库函数,开发者可以有效地管理中断,实现高效、可靠的嵌入式系统设计。STM32固件库遵循严格的ANSI-C标准,确保代码的可移植性和符合MISRA-C2004规范,同时也支持实时错误检测,以增强软件的健壮性。然而,为了优化代码大小和执行速度,某些实时检测可以在最终应用程序中删除。对于特定的应用场景,开发者还可以根据需要调整库函数,以满足特定的需求。