ststem_stm32f4xx全中文注释

一直想精简这家伙了, 啰嗦一大堆!

把预处理中没用的, 都去掉了, 新代码可直接替换原文件!!

/*******************************************************************************
  * @file    system_stm32f4xx.c   
  * @version V1.3.2
  * @date    13-November-2015 
  * @brief   CMSIS Cortex-M4 Device Peripheral Access Layer System Source File.
  *
  *          * 此处删掉 啰嗦一堆 *     
  *****************************************************************************/   
  
#include "stm32f4xx.h"

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)8000000)    // 设置外部晶振值    <-- 重要 !!!
#endif 

#if !defined  (HSI_VALUE)
  #define HSI_VALUE    ((uint32_t)16000000)   // 设置内部晶振值
#endif 


// 原句定位
/************************* Miscellaneous Configuration ************************/
/*  此处删掉一堆无用SDRAM声明, 用于初始化外挂内存用的, 一般另开文件设置, 删!! */

/*  向量表基偏移字段, 此值必须是0x200的倍数. 非高人不会用, 也不一定用, 用0值吧*/
#define VECT_TAB_OFFSET  0x00 

uint32_t SystemCoreClock = 25000000;             // 这句自己加的, 和FreeRTOS有关
__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};

  

void SystemInit(void)
{
  // FPU 功能设置 /
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  // 设置 CP10 and CP11 完全访问
  #endif
  
  // 复位RCC时钟配置 到 复位状态  
  RCC->CR  |= (uint32_t)0x00000001;          // 设置 HSION 置位    
  RCC->CFGR = 0x00000000;                    // 复位 CFGR 寄存器    
  RCC->CR  &= (uint32_t)0xFEF6FFFF;          // 复位 HSEON, CSSON 和PLLON 位     
  RCC->PLLCFGR = 0x24003010;                 // 复位 PLLCFGR 寄存器    
  RCC->CR &= (uint32_t)0xFFFBFFFF;           // 复位 HSEBYP 位    
  RCC->CIR = 0x00000000;                     // 失能 中断   

  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;  // 配置矢量表位置添加偏移地址, 内部闪存中的向量表重定位  
}



/*  30行注释,浓缩: 使用 HSE 必须修改 HSE_VALUE 的值, 等于外部晶振值  */
void SystemCoreClockUpdate(void)
{
  uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;    
  
  tmp = RCC->CFGR & RCC_CFGR_SWS;            // 获取系统时钟来源   
  switch (tmp)
  {
    case 0x00:                               // HSI 作系统时钟源
      SystemCoreClock = HSI_VALUE;
      break;
    case 0x04:                               // HSE 作系统时钟源
      SystemCoreClock = HSE_VALUE;
      break;
    case 0x08:                               // PLL 作系统时钟源
      // SYSCLK = PLL_VCO/PLL_P = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N / PLL_P
      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
      pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;       
      if (pllsource != 0)      
        // HSE 作 PLL 时钟源
        pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);        
      else
        // HSI 作 PLL 时钟源
        pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
      
      pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
      SystemCoreClock = pllvco/pllp;
      break;
    default:
      SystemCoreClock = HSI_VALUE;
      break;
  }           
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];    // 计算HCLK频率, 获取HCLK预分频器
  SystemCoreClock >>= tmp;                                    // HCLK频率
}


//  原句定位
/*  #if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) */
/*  几百行灰色代码, 用于初始化外挂内存, 一般另行初始化, 删!     */



发布了44 篇原创文章 · 获赞 20 · 访问量 9552

猜你喜欢

转载自blog.csdn.net/zhouml_msn/article/details/97264262