STM32使用內部RC振盪器作為系統時鐘開發專案--內晶振啟動模板工程
阿新 • • 發佈:2019-02-07
//=== 晶振腳重對映到PD0,PD1 並配置為推輓輸出 輸出‘0’==== void HSI_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_DeInit(); /*將外設RCC暫存器重設為預設值 */ RCC_HSICmd(ENABLE); 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*/ FLASH_SetLatency(FLASH_Latency_2); //FLASH_Latency_2 2延時週期 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//預取指快取使能 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);/*設定PLL時鐘源及倍頻係數,頻率為8/2*16=64Mhz*/ RCC_PLLCmd(ENABLE); /*使能PLL */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*檢查指定的RCC標誌位(PLL準備好標誌)設定與否*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*設定系統時鐘(SYSCLK) */ while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作為系統時鐘 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);//開啟重對映時鐘,並開啟重對映後的IO口 GPIO_PinRemapConfig(GPIO_Remap_PD01,ENABLE); //IO口重對映開啟 /*選擇要控制的引腳*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; /*設定引腳為通用推輓輸出*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*設定引腳速率為50MHz*/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*呼叫庫函式,初始化GPIOC*/ GPIO_Init(GPIOD, &GPIO_InitStructure); /*固定IO口下拉到地*/ GPIO_ResetBits(GPIOD, GPIO_Pin_0 | GPIO_Pin_1); }