| 俺发现如果加这个low_level_init.c文件,它会执行这个文件里的__low_level_init()函数,当然要把编译选项里的RUN TO MAIN 里的勾去掉才看得到。 __interwork int __low_level_init(void)
 {
 // 关闭中断
 asm("CPSID  I");
 
 //=====================================================================================================
 // 复位目标系统的NVIC,恢复为上电默认值
 //=====================================================================================================
 NVIC_DeInit();
 NVIC_SCBDeInit();
 // 如果在RAM中调试, 修改中断向量表首地址 NVIC_VectTab_RAM = 0x20000000
 // NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
 // 否则修改中断向量表在Flash中, NVIC_VectTab_FLASH = 0x08000000
 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
 //=====================================================================================================
 // 系统时钟初始化
 //=====================================================================================================
 // RCC system reset(for debug purpose)
 // 将RCC寄存器恢复为上电默认值
 RCC_DeInit();
 // Enable HSE
 // 打开high-speed external clock signal
 RCC_HSEConfig(RCC_HSE_ON);
 // 等待外部外部晶振ready
 RCC_WaitForHSEStartUp();
 // Enable Prefetch Buffer
 // 启用预取缓冲区
 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
 // FLASH_Latency_0 = 000: 0等待状态, 当 0 < SYSCLK≤24MHz
 // FLASH_Latency_1 = 001: 1等待状态, 当 24MHz < SYSCLK≤ 48MHz
 // FLASH_Latency_2 = 010: 2等待状态, 当 48MHz < SYSCLK≤ 72MHz
 // SYSCLK = 72MHz
 // Flash 2 wait state
 FLASH_SetLatency(FLASH_Latency_2);
 // HCLK   = SYSCLK
 // HCLK   = 处理器时钟
 // SYSCLK = PLL_CLK or HSE or HSI
 RCC_HCLKConfig(RCC_SYSCLK_Div1);
 
 // PCLK2 = HCLK
 // PCLK2 = 72MHz
 RCC_PCLK2Config(RCC_HCLK_Div1);
 // PCLK1 最大不可超过36MHz
 // PCLK1 = 72MHz / 2 = 36MHz
 RCC_PCLK1Config(RCC_HCLK_Div2);
 // ADCCLK = PCLK2/2
 // ADCCLK = 12MHz
 RCC_ADCCLKConfig(RCC_PCLK2_Div2);
 // PLLCLK = 8MHz * 9 = 72 MHz
 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
 // Enable PLL
 RCC_PLLCmd(ENABLE);
 // 等待PLL Ready
 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
 {
 }
 // 连接SYSCLK到PLL_CLK, SYSCLK = PLL_CLK
 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
 // 等待 SYSCLK 稳定
 while(RCC_GetSYSCLKSource() != 0x08)
 {
 }
 return 1;
 }
 |