1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#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;
    
    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;
 
    NVIC_Init(&NVIC_InitStructure);
}
 
int Systick_Init(void)
{
    int time_retry = 500;
    if (SysTick_Config(72000))
    {
        /* 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);  
}