CKS32F107xx系列時(shí)鐘系統(tǒng)(二)
上一章節(jié)對(duì)CKS32F107xx系列時(shí)鐘做了整體介紹,本章節(jié)以使用HSI內(nèi)部高速時(shí)鐘為例對(duì)時(shí)鐘具體配置方法進(jìn)行講解。
圖1 SYSCLK生成流程
圖2 APB頻率生成流程
根據(jù)圖1,產(chǎn)生SYSCLK時(shí),內(nèi)部HSI時(shí)鐘經(jīng)過二分頻,輸入PLLSCR模塊,再通過PLLM倍頻系數(shù)產(chǎn)生PLLCLK,即SYSCLK。
由圖2可知,SYSCLK通過AHB預(yù)分頻產(chǎn)生APB即HCLK等時(shí)鐘系統(tǒng)。
配置寄存器
CKS32F107xx系列時(shí)鐘配置寄存器
在使用HSI對(duì)系統(tǒng)時(shí)鐘進(jìn)行配置時(shí),有兩個(gè)較為重要的RCC寄存器,分別為RCC_CR、RCC_CFGR:
圖3 RCC_CR寄存器
在RCC_CR寄存器中,我們需要關(guān)注如下幾位:
圖4 HSI啟動(dòng)及狀態(tài)寄存器
圖5 PLL啟動(dòng)及狀態(tài)寄存器
圖6 RCC_CFGR寄存器
在RCC_CFGR寄存器中,我們需要關(guān)注如下幾位:
圖7PLL倍頻系數(shù)位
圖8PLL時(shí)鐘源位
圖9 APB2預(yù)分頻位
圖10 其他RCC_CFGR控制位
在對(duì)系統(tǒng)時(shí)鐘進(jìn)行初始化過程中,一般也會(huì)對(duì)閃存訪問時(shí)間進(jìn)行配置,如下為CKS32F107xx系列閃存訪問時(shí)間與系統(tǒng)時(shí)鐘的對(duì)應(yīng)關(guān)系:
圖11 閃存訪問時(shí)間
CKS32F107xx系列時(shí)鐘配置代碼
依據(jù)上一章節(jié)中對(duì)寄存器的基本介紹,即可在函數(shù)SetSysClock()中對(duì)程序時(shí)鐘進(jìn)行相關(guān)配置,本文以HSI為時(shí)鐘源,進(jìn)行36MHz SYSCLK/HCLK/APB1/APB2配置。
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
/* Enable HSI */
RCC->CR |= ((uint32_t)RCC_CR_HSION);
/* Wait till HSI is ready and if Time out is reached exit */
while((RCC->CR & RCC_CR_HSIRDY) == 0){}
/* Enable Prefetch Buffer */
FLASH->ACR |= FLASH_ACR_PRFTBE;
/* Flash 1 wait state */
FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1;
/*AHB Prescaler set*/
RCC->CFGR |= (uint32_t)RCC_SYSCLK_Div1;
/* HCLK = SYSCLK */
RCC->CFGR |=(uint32_t)RCC_CFGR_HPRE_DIV1;
/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
/* PLL configuration: PLLCLK = HSI / 2 * 9 = 36 MHz */
RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLMULL9);
/* Enable PLL */
RCC->CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC->CR & RCC_CR_PLLRDY) == 0){}
/* Select PLL as system clock source */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
/* Wait till PLL is used as system clock source */
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){}
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120229 -
pll
+關(guān)注
關(guān)注
6文章
776瀏覽量
135130 -
RCC
+關(guān)注
關(guān)注
0文章
93瀏覽量
26931 -
時(shí)鐘系統(tǒng)
+關(guān)注
關(guān)注
1文章
101瀏覽量
11715
原文標(biāo)題:MCU微課堂|CKS32F107xx系列時(shí)鐘系統(tǒng)(二)
文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論