SystemInit时钟系统初始化函数剖析
生活随笔
收集整理的這篇文章主要介紹了
SystemInit时钟系统初始化函数剖析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SystemInit()函數(shù):
void SystemInit (void) {/* Set HSION bit */RCC->CR |= (uint32_t)0x00000001;//把內(nèi)部的HSI RC(高速時鐘)打開#ifndef STM32F10X_CLRCC->CFGR &= (uint32_t)0xF8FF0000;//這一句不會執(zhí)行,由于定義的是STM32F10X_HD,他會執(zhí)行else后的語句。 #elseRCC->CFGR &= (uint32_t)0xF0FF0000;//系統(tǒng)初始化狀態(tài) #endif /* STM32F10X_CL */ /* Reset HSEON, CSSON and PLLON bits */RCC->CR &= (uint32_t)0xFEF6FFFF;//默認狀態(tài)/* Reset HSEBYP bit */RCC->CR &= (uint32_t)0xFFFBFFFF;//默認狀態(tài)/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */RCC->CFGR &= (uint32_t)0xFF80FFFF;//默認狀態(tài)#ifdef STM32F10X_CL/* Reset PLL2ON and PLL3ON bits */RCC->CR &= (uint32_t)0xEBFFFFFF;/* Disable all interrupts and clear pending bits */RCC->CIR = 0x00FF0000;/* Reset CFGR2 register */RCC->CFGR2 = 0x00000000; #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* Disable all interrupts and clear pending bits */RCC->CIR = 0x009F0000;/* Reset CFGR2 register */RCC->CFGR2 = 0x00000000; //由于是STM32F10X_CL,所以ifdef后的語句不會執(zhí)行 #else/* Disable all interrupts and clear pending bits */RCC->CIR = 0x009F0000;//把所有中斷都關(guān)掉,位全部都清掉 #endif /* STM32F10X_CL */#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)#ifdef DATA_IN_ExtSRAMSystemInit_ExtMemCtl(); //這里沒有執(zhí)行,因為不是STM32F10X_HD#endif /* DATA_IN_ExtSRAM */ #endif /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers *//* Configure the Flash Latency cycles and enable prefetch buffer */SetSysClock();#ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ #elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ #endif }SystemInit()中的SetSysClock()函數(shù)部分:
static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSESetSysClockToHSE(); #elif defined SYSCLK_FREQ_24MHzSetSysClockTo24(); #elif defined SYSCLK_FREQ_36MHzSetSysClockTo36(); #elif defined SYSCLK_FREQ_48MHzSetSysClockTo48(); #elif defined SYSCLK_FREQ_56MHzSetSysClockTo56(); #elif defined SYSCLK_FREQ_72MHz//這里的意思是判斷標(biāo)識符有沒有被定義,定義了哪種就調(diào)用哪種設(shè)置系統(tǒng)時鐘的函數(shù)。SetSysClockTo72(); #endif/* If none of the define above is enabled, the HSI is used as System clocksource (default after reset) */ }這里是舉例SetSysClockTo72()這個系統(tǒng)時鐘函數(shù):
FLASH_ACR是閃存訪問控制寄存器
總結(jié)一下:
SystemInit()函數(shù)中設(shè)置的系統(tǒng)時鐘大小:
總結(jié)
以上是生活随笔為你收集整理的SystemInit时钟系统初始化函数剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java学习(100):集合类简介
- 下一篇: 天猫系统的流控降级