23 函数RCC_APB1PeriphClockCmd
功能描述:使能或者失能APB1外设时钟 例:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR, ENABLE);
RCC_APB1Periph
该参数被门控的APB1外设时钟,可以取下表的一个或者多个取值的组合作为该参数的值。 RCC_APB1Periph_TIM2:TIM2时钟 RCC_APB1Periph_TIM3:TIM3时钟 RCC_APB1Periph_TIM4:TIM4时钟
RCC_APB1Periph_WWDG:WWDG时钟 RCC_APB1Periph_SPI2:SPI2时钟
RCC_APB1Periph_USART2:USART2时钟 RCC_APB1Periph_USART3:USART3时钟 RCC_APB1Periph_I2C1:I2C1时钟 RCC_APB1Periph_I2C2:I2C2时钟 RCC_APB1Periph_USB:USB时钟 RCC_APB1Periph_CAN:CAN时钟
24 函数RCC_APB2PeriphResetCmd
功能描述:强制或者释放高速APB(APB2)外设复位 例:
/* Enter the SPI1 peripheral to reset */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); /* Exit the SPI1 peripheral from reset */
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE);
25 函数RCC_APB1PeriphResetCmd
功能描述:强制或者释放低速APB(APB1)外设复位 例:
/* Enter the SPI2 peripheral to reset */
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); /* Exit the SPI2 peripheral from reset */
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE);
26 函数RCC_BackupResetCmd
功能描述:强制或者释放后备域复位 例:
/* Reset the entire Backup domain */ RCC_BackupResetCmd(ENABLE);
27 函数RCC_ClockSecuritySystemCmd
功能描述:使能或者失能时钟安全系统 例:
/* Enable the Clock Security System */ RCC_ClockSecuritySystemCmd(ENABLE);
46
28 函数RCC_MCOConfig
功能描述:选择在MCO管脚上输出的时钟源 例:
RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);
警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
RCC_MCO
该参数设置了指定输出的时钟源
RCC_MCO_NoClock:无时钟被选中 RCC_MCO_SYSCLK:选中系统时钟 RCC_MCO_HSI:选中HSI RCC_MCO_HSE:选中HSE
RCC_MCO_PLLCLK_Div2:选中PLL时钟除以2
29 函数RCC_GetFlagStatus
功能描述:检查指定的RCC标志位设置与否 例:
/* Test if the PLL clock is ready or not */ FlagStatus Status;
Status = RCC_GetFlagStatus(RCC_FLAG_PLLRDY); if(Status == RESET) { ... } else
RCC_FLAG
给出了所有可以被函数RCC_ GetFlagStatus检查的标志位列表 RCC_FLAG_HSIRDY:HSI晶振就绪 RCC_FLAG_HSERDY:HSE晶振就绪 RCC_FLAG_PLLRDY:PLL就绪 RCC_FLAG_LSERDY:LSI晶振就绪 RCC_FLAG_LSIRDY:LSE晶振就绪 RCC_FLAG_PINRST:管脚复位
RCC_FLAG_PORRST:POR/PDR复位 RCC_FLAG_SFTRST:软件复位 RCC_FLAG_IWDGRST I:WDG复位 RCC_FLAG_WWDGRST:WWDG复位 RCC_FLAG_LPWRRST:低功耗复位
30 函数RCC_ClearFlag
功能描述:清除RCC的复位标志位
例:
RCC_ClearFlag();
31 函数RCC_GetITStatus
功能描述:检查指定的RCC中断发生与否 例:
47
/* Test if the PLL Ready interrupt has occurred or not */ ITStatus Status;
Status = RCC_GetITStatus(RCC_IT_PLLRDY); if(Status == RESET) { ... } else { ... }
RCC_IT
给出了所有可以被函数RCC_ GetITStatus检查的中断标志位列表 RCC_IT_LSIRDY:LSI晶振就绪中断 RCC_IT_LSERDY:LSE晶振就绪中断 RCC_IT_HSIRDY: HSI晶振就绪中断 RCC_IT_HSERDY:HSE晶振就绪中断 RCC_IT_PLLRDY:PLL就绪中断 RCC_IT_CSS:时钟安全系统中断
32 函数RCC_ClearITPendingBit
功能描述:清除RCC的中断待处理位 例:
/* Clear the PLL Ready interrupt pending bit */ RCC_ClearITPendingBit(RCC_IT_PLLRDY);
RCC_IT
给出了所有可以被函数RCC_ ClearITPendingBit清除的中断待处理位列表 RCC_IT_LSIRDY:LSI晶振就绪中断 RCC_IT_LSERDY:LSE晶振就绪中断 RCC_IT_HSIRDY:HSI晶振就绪中断 RCC_IT_HSERDY:HSE晶振就绪中断 RCC_IT_PLLRDY:PLL就绪中断 RCC_IT_CSS:时钟安全系统中断
八、嵌套向量中断控制器(NVIC)
NVIC寄存器结构
NVIC寄存器结构,NVIC_TypeDeff,在文件“stm32f10x_map.h”中定义如下:
typedef struct {
vu32 Enable[2]; u32 RESERVED0[30]; vu32 Disable[2]; u32 RSERVED1[30]; vu32 Set[2];
48
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 */
NVIC库函数
1 函数NVIC_DeInit
功能描述:将外设NVIC寄存器重设为缺省值 例:
NVIC_DeInit();
2 函数NVIC_SCBDeInit
功能描述:将外设SCB寄存器重设为缺省值 例:
NVIC_SCBDeInit();
3 函数NVIC_PriorityGroupConfig
功能描述:设置优先级分组:先占优先级和从优先级 例:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_PriorityGroup
该参数设置优先级分组位长度
NVIC_PriorityGroup_0:先占优先级0位从优先级4位 NVIC_PriorityGroup_1:先占优先级1位从优先级3位 NVIC_PriorityGroup_2:先占优先级2位从优先级2位
49
NVIC_PriorityGroup_3:先占优先级3位从优先级1位 NVIC_PriorityGroup_4:先占优先级4位从优先级0位
4 函数NVIC_Init
功能描述:根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
NVIC_InitStruct:指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置信息
NVIC_InitTypeDef structure
NVIC_InitTypeDef定义于文件“stm32f10x_nvic.h”:
typedef struct {
u8 NVIC_IRQChannel;
u8 NVIC_IRQChannelPreemptionPriority; u8 NVIC_IRQChannelSubPriority;
FunctionalState NVIC_IRQChannelCmd; }
NVIC_InitTypeDef;
例:
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7; NVIC_InitStructure(&NVIC_InitStructure);
NVIC_IRQChannel
该参数用以使能或者失能指定的IRQ通道。 WWDG_IRQChannel:窗口看门狗中断 PVD_IRQChannel:PVD通过EXTI探测中断 TAMPER_IRQChannel:篡改中断 RTC_IRQChannel:RTC全局中断
FlashItf_IRQChannel:FLASH全局中断 RCC_IRQChannel:RCC全局中断
EXTI0_IRQChannel:外部中断线0中断 EXTI1_IRQChannel:外部中断线1中断 EXTI2_IRQChannel:外部中断线2中断 EXTI3_IRQChannel:外部中断线3中断 EXTI4_IRQChannel:外部中断线4中断
DMAChannel1_IRQChannel:DMA通道1中断 DMAChannel2_IRQChannel:DMA通道2中断
50