微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32的嵌套中断系统NVIC和RCC详细整理

STM32的嵌套中断系统NVIC和RCC详细整理

时间:11-26 来源:互联网 点击:

//输入:RCC_AHBPeriph_DMA,DMA时钟->

//输入:RCC_APB2Periph_AFIO,功能复用IO时钟->

//输入:RCC_APB1Periph_TIM2,TIM2时钟->

;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时钟

//RCC_APB1Periph_BKP,BKP时钟;RCC_APB1Periph_PWR,PWR时钟

//RCC_APB1Periph_ALL,全部APB1外设时钟

#ifdef STM32F10X_CL

voidRCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//

#endif

voidRCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);// 强制或者释放高速APB(APB2)外设复位

//输入:同voidRCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);函数的值

voidRCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);// 强制或者释放低速APB(APB1)外设复位

//输入:同void RCC_APB1PeriphClockCmd(uint32_tRCC_APB1Periph, FunctionalState NewState);函数的值

//例:

//RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);

//RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);

voidRCC_BackupResetCmd(FunctionalState NewState);// 强制或者释放后备域复位

voidRCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统

//输入:ENABLE或者DISABLE

voidRCC_MCOConfig(uint8_t RCC_MCO);// 选择在MCO管脚上输出的时钟源

//输入:RCC_MCO_NoClock 无时钟被选中 ;RCC_MCO_SYSCLK 选中系统时钟;

//RCC_MCO_HSI选中HSI ;RCC_MCO_HSE 选中HSE ;

//RCC_MCO_PLLCLK_Div2选中PLL时钟除以2

//警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。

FlagStatusRCC_GetFlagStatus(uint8_t RCC_FLAG);// 检查指定的RCC标志位设置与否

//输入:待检查的RCC标志位

//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 ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;

//RCC_FLAG_LPWRRST,低功耗复位

//返回值:RCC_FLAG的新状态(SET或者RESET)

//例:

//FlagStatus Status;

//Status = RCC_GetFlagStatus(RCC_FLAG_PLLRDY);

//if(Status == RESET)

//{

//...

//}

//else

voidRCC_ClearFlag(void);// 清除RCC的复位标志位

//(可以清除的复位标志位有:RCC_FLAG_PINRST,RCC_FLAG_PORRST, //RCC_FLAG_SFTRST, RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST,RCC_FLAG_LPWRRST)

ITStatusRCC_GetITStatus(uint8_t RCC_IT);// 检查指定的RCC中断发生与否

//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断

//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断

//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断

//返回值:RCC_IT的新状态

//例:

//ITStatus Status;

//Status =RCC_GetITStatus(RCC_IT_PLLRDY);

//if(Status == RESET)

//{

//...

//}

//else

//{

//...

//}

voidRCC_ClearITPendingBit(uint8_t RCC_IT);// 清除RCC的中断待处理位

//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断

//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断

//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断

五、实例详解

#if defined (STM32F10X_LD_VL)|| (defined STM32F10X_MD_VL)|| (defined STM32F10X_HD_VL)//如果定义了这些系统时钟将设为24M,如果没有定义则为72M

#define SYSCLK_FREQ_24MHz24000000
#else



#define SYSCLK_FREQ_72MHz 72000000//系统时钟默认值的定义 ,如果没有定义外部高速时钟则用内部高速时钟,为8000000

#endif


#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (definedSTM32F10X_HD_VL)//内外部SRAM选择

#endif



#define VECT_TAB_OFFSET0x0

#ifdef SYSCLK_FREQ_HSE
uint32_t SystemCoreClock= SYSCLK_FREQ_HSE;
#elif defined SYSCLK_FREQ_24MHz
uint32_t SystemCoreClock= SYSCLK_FREQ_24MHz;
#elif defined SYSCLK_FREQ_36MHz
uint32_t SystemCoreClock= SYSCLK_FREQ_36MHz;
#elif defined SYSCLK_FREQ_48MHz
uint32_t SystemCoreClock= SYSCLK_FREQ_48MHz;
#elif defined SYSCLK_FREQ_56MHz
uint32_t SystemCoreClock= SYSCLK_FREQ_56MHz;
#elif defined SYSCLK_FREQ_72MHz
uint32_t SystemCoreClock= SYSCLK_FREQ_72MHz;
#else
uint32_t SystemCoreClock= HSI_VALUE;
#endif

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top