在STM32中,可以用內部時鐘,也可以用外部時鐘,在要求進度高的應用場合最好用外部晶體震蕩器,內部時鐘存在一定的精度誤差。
內部時鐘有2個時鐘源可以選分別是HSI、LSI、(內部高速,內部低速,),高速時鐘主要用于系統內核和總線上的外設時鐘。低速時鐘主要用于獨立看門狗IWDG、實時時鐘RTC。
1、HSI是高速內部時鐘,RC振蕩器,頻率為8MHz,上電后默認的系統時時鐘 SYSCLK = 8MHz,Flash編程時鐘。
2、LSI是低速內部時鐘,RC振蕩器,頻率為40kHz,可用于獨立看門狗IWDG、實時時鐘RTC。
使用時需要注意 注釋掉這個SystemInit(); 時鐘配置函數
//配置內置振蕩器 36MHz
RCC_DeInit(); /*將外設RCC寄存器重設為缺省值 */
RCC_HSICmd(ENABLE); //使能內部時鐘 HSI
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就緒
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_9);/*設置PLL時鐘源及倍頻系數,頻率為8/2*9=36Mhz*/
RCC_PLLCmd(ENABLE); /*使能PLL *///這里使用的內部時鐘所以不能被 失能
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*檢查指定的RCC標志位(PLL準備好標志)設置與否 等待是否配置成功*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*設置系統時鐘(SYSCLK) */
//選擇哪一個做為時鐘
0x00:HSI 作為系統時鐘 RCC_SYSCLKSource_HSI
// 0x04:HSE作為系統時鐘 RCC_SYSCLKSource_HSE
// 0x08:PLL作為系統時鐘 RCC_SYSCLKSource_PLLCLK
while(RCC_GetSYSCLKSource() != 0x08);//需與被選擇的系統時鐘對應起來,RCC_SYSCLKSource_PLL
整合自:CSDN、博客園
編輯:jq
-
STM32
+關注
關注
2270文章
10900瀏覽量
356045
發布評論請先 登錄
相關推薦
評論