#include "Rcc_Nvic_Systick.h"
|
|
void Rcc_Init(void)
|
{
|
//----------ʹÓÃÄÚ²¿RC¾§ÕñHSI 64MHz-----------
|
RCC_DeInit(); //½«ÍâÉèRCC¼Ä´æÆ÷ÖØÉèΪȱʡֵ
|
RCC_HSICmd(ENABLE); //ÄÚ²¿Ê±ÖÓʹÄÜ
|
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET); //µÈ´ýHSI¾ÍÐ÷
|
|
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Ñ¡ÔñFLASHԤȡָ»º´æµÄÄ£,Ԥȡָ»º´æÊ¹ÄÜ
|
FLASH_SetLatency(FLASH_Latency_2); //ÉèÖÃFLASH´æ´¢Æ÷ÑÓʱʱÖÓÖÜÆÚÊýFLASH_Latency_2 2ÑÓʱÖÜÆÚ
|
|
|
RCC_HCLKConfig(RCC_SYSCLK_Div1); //ÉèÖÃAHBʱÖÓ£¨HCLK£© RCC_SYSCLK_Div1¡ª¡ªAHBʱÖÓ = ϵͳʱÖÓ
|
RCC_PCLK2Config(RCC_HCLK_Div1); //ÉèÖøßËÙAHBʱÖÓ£¨PCLK2£©RCC_HCLK_Div1¡ª¡ªAPB2ʱÖÓ = HCLK
|
RCC_PCLK1Config(RCC_HCLK_Div2); //ÉèÖõÍËÙAHBʱÖÓ£¨PCLK1£©RCC_HCLK_Div2¡ª¡ªAPB1ʱÖÓ = HCLK/2
|
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); //ÉèÖÃPLLʱÖÓÔ´¼°±¶ÆµÏµÊý£¬ÆµÂÊΪ8/2*16=64Mhz
|
RCC_PLLCmd(ENABLE); //ʹÄÜPLL
|
|
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //¼ì²éÖ¸¶¨µÄRCC±ê־λ(PLL×¼±¸ºÃ±êÖ¾)ÉèÖÃÓë·ñ
|
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //ÉèÖÃϵͳʱÖÓ£¨SYSCLK£©
|
while(RCC_GetSYSCLKSource() != 0x08); //0x08£ºPLL×÷ΪϵͳʱÖÓ
|
|
// //----------ʹÓÃÍⲿRC¾§Õñ 72MHz-----------
|
// RCC_DeInit(); //³õʼ»¯ÎªÈ±Ê¡Öµ
|
// RCC_HSEConfig(RCC_HSE_ON); //ʹÄÜÍⲿµÄ¸ßËÙʱÖÓ
|
// while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //µÈ´ýÍⲿ¸ßËÙʱÖÓʹÄܾÍÐ÷
|
//
|
// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer
|
// FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state
|
//
|
// RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
|
// RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
|
// RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
|
// RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ
|
// RCC_PLLCmd(ENABLE); //Enable PLLCLK
|
//
|
// while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready
|
// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock
|
// while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source
|
|
}
|
|
void Nvic_Init(void)
|
{
|
NVIC_InitTypeDef NVIC_InitStructure;
|
EXTI_InitTypeDef EXTI_InitStructure;
|
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
|
|
/* Enable and set EXTI Interrupt to the lowest priority */
|
NVIC_InitStructure.NVIC_IRQChannel = DECAIRQ_EXTI_IRQn;
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15;
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|
EXTI_InitStructure.EXTI_Line = EXTI_Line17;
|
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
EXTI_Init(&EXTI_InitStructure);
|
|
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
|
|
NVIC_Init(&NVIC_InitStructure);
|
}
|
|
int Systick_Init(void)
|
{
|
int time_retry = 500;
|
if (SysTick_Config(64000))
|
{
|
/* Capture error */
|
while (time_retry--);
|
return 1;
|
}
|
NVIC_SetPriority(SysTick_IRQn, 5);
|
|
return 0;
|
|
}
|
|
void delay_us(uint32_t nTimer)
|
{
|
uint32_t i=0;
|
for(i=0;i<nTimer;i++){
|
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
|
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
|
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
|
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
|
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
|
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
|
__NOP();__NOP();__NOP();__NOP();
|
}
|
}
|
|
void delay_ms(uint32_t nTimer)
|
{
|
uint32_t i=1000*nTimer;
|
delay_us(i);
|
}
|