11 内部集成电路(I2C)
11.1 I2C寄存器结构 11.2 I2C库函数
12 独立看门狗(IWDG)
12.1 IWDG寄存器结构 12.2 IWDG库函数
译文英文原版为UM0427 Oct. 2007 Rev 2, 译文仅供参考,与英文版冲突的,以英文版为准
NVIC
13 嵌套向量中断控制器(NVIC)
NVIC驱动有多种用途:例如使能或者失能IRQ中断,使能或者失能单独的IRQ通道,改变IRQ通道的优先级等等。
Section 13.1 NVIC寄存器结构描述了固件函数库所使用的数据结构,Section 13.2 固件库函数介绍了函数库里的所有函数。
13.1 NVIC寄存器结构
NVIC寄存器结构,NVIC_TypeDeff,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 Enable[2]; u32 RESERVED0[30]; vu32 Disable[2]; u32 RSERVED1[30]; vu32 Set[2];
u32 RESERVED2[30]; vu32 Clear[2]; u32 RESERVED3[30]; vu32 Active[2]; u32 RESERVED4[62]; vu32 Priority[11];
} NVIC_TypeDef;/* NVIC Structure */ typedef struct {
vu32 CPUID; vu32 IRQControlState; vu32 ExceptionTableOffset; vu32 AIRC; vu32 SysCtrl; vu32 ConfigCtrl; vu32 SystemPriority[3]; vu32 SysHandlerCtrl; vu32 ConfigFaultStatus; vu32 HardFaultStatus; vu32 DebugFaultStatus; vu32 MemoryManageFaultAddr; vu32 BusFaultAddr;
} SCB_TypeDef; /* System Control Block Structure */
译文英文原版为UM0427 Oct. 2007 Rev 2, 译文仅供参考,与英文版冲突的,以英文版为准
NVIC
Table 265.例举了NVIC所有寄存器
Table 265. NVIC寄存器 寄存器 Enable Disable Set Clear Active Priority CPUID
IRQControlStatus ExceptionTableOffset AIRC SysCtrl ConfigCtrl SystemPriority SysHandlerCtrl ConfigFaultStatus HardFaultStatus DebugFaultStatus
MemorymanageFaultAddr BusFaultAddr
...
#define SCS_BASE ((u32)0xE000E000) #define NVIC_BASE (SCS_BASE + 0x0100) #define SCB_BASE (SCS_BASE + 0x0D00) ...
#ifndef DEBUG ...
#ifdef _NVIC
#define NVIC ((NVIC_TypeDef *) NVIC_BASE) #define SCB ((SCB_TypeDef *) SCB_BASE) #endif /*_NVIC */ ...
#else /* DEBUG */ ...
#ifdef _NVIC
EXT NVIC_TypeDef *NVIC; EXT SCB_TypeDef *SCB; #endif /*_NVIC */ ...
译文英文原版为UM0427 Oct. 2007 Rev 2, 译文仅供参考,与英文版冲突的,以英文版为准
描述
中断设置使能寄存器 中断清除使能寄存器 中断设置待处理寄存器 中断清除待处理寄存器 中断活动位寄存器 中断优先级寄存器 CPU ID 基寄存器
中断控制状态寄存器 向量表移位寄存器 应用控制/重置寄存器 系统控制寄存器 设置控制寄存器
系统处理优先级寄存器
系统处理控制和状态寄存器 设置错误状态寄存器 硬件错误状态寄存器 除错错误寄存器
存储器管理错误地址寄存器 总线错误地址寄存器
NVIC外设声明于文件“stm32f10x_map.h”:
NVIC
#endif
使用Debug模式时,初始化指针NVIC, SCB于文件“stm32f10x_lib.c”:
#ifdef _NVIC
NVIC = (NVIC_TypeDef *) NVIC_BASE; SCB = (SCB_TypeDef *) SCB_BASE; #endif /*_NVIC */
为了访问NVIC寄存器,, _NVIC必须在文件“stm32f10x_conf.h”中定义如下:
#define _NVIC
13.2 NVIC库函数
Table 266. 例举了NVIC的库函数 Table 266. NVIC库函数 函数名 NVIC_DeInit NVIC_SCBDeInit
NVIC_PriorityGroupConfig NVIC_Init NVIC_StructInit NVIC_SETPRIMASK NVIC_RESETPRIMASK NVIC_SETFAULTMASK NVIC_RESETFAULTMASK NVIC_BASEPRICONFIG NVIC_GetBASEPRI
NVIC_GetCurrentPendingIRQChannel NVIC_GetIRQChannelPendingBitStatus NVIC_SetIRQChannelPendingBit NVIC_ClearIRQChannelPendingBit NVIC_GetCurrentActiveHandler NVIC_GetIRQChannelActiveBitStatus NVIC_GetCPUID NVIC_SetVectorTable NVIC_GenerateSystemReset NVIC_GenerateCoreReset NVIC_SystemLPConfig NVIC_SystemHandlerConfig NVIC_SystemHandlerPriorityConfig
描述
将外设NVIC寄存器重设为缺省值 将外设SCB寄存器重设为缺省值 设置优先级分组:先占优先级和从优先级
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 把NVIC_InitStruct中的每一个参数按缺省值填入 使能PRIMASK优先级:提升执行优先级至0 失能PRIMASK优先级
使能FAULTMASK优先级:提升执行优先级至-1 失能FAULTMASK优先级
改变执行优先级从N(最低可设置优先级)提升至1 返回BASEPRI屏蔽值 返回当前待处理IRQ标识符
检查指定的IRQ通道待处理位设置与否 设置指定的IRQ通道待处理位 清除指定的IRQ通道待处理位
返回当前活动的Handler(IRQ通道和系统Handler)的标识符 检查指定的IRQ通道活动位设置与否
返回ID号码,Cortex-M3内核的版本号和实现细节 设置向量表的位置和偏移 产生一个系统复位
产生一个内核(内核+NVIC)复位 选择系统进入低功耗模式的条件 使能或者失能指定的系统Handler 设置指定的系统Handler优先级
NVIC_GetSystemHandlerPendingBitStatus 检查指定的系统Handler待处理位设置与否
译文英文原版为UM0427 Oct. 2007 Rev 2, 译文仅供参考,与英文版冲突的,以英文版为准