1. 程式人生 > >STM32使用內部RC振盪器作為系統時鐘開發專案--內晶振啟動模板工程

STM32使用內部RC振盪器作為系統時鐘開發專案--內晶振啟動模板工程

//=== 晶振腳重對映到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);
}