|
在使用STM32F030F4P6芯片內(nèi)部晶振時(shí),需要在啟動(dòng)代碼中配置芯片的時(shí)鐘。以下是使用STM32CubeIDE生成的默認(rèn)啟動(dòng)代碼中配置內(nèi)部晶振的示例代碼,你可以參考:
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* Configure the main internal regulator output voltage */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/* Initializes the RCC Oscillators according to the specified parameters
in the RCC_OscInitTypeDef structure. */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/* Initializes the CPU, AHB and APB busses clocks */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
在這段代碼中,首先通過(guò) __HAL_PWR_VOLTAGESCALING_CONFIG() 函數(shù)配置芯片電壓,并初始化 RCC_OscInitTypeDef 和 RCC_ClkInitTypeDef 結(jié)構(gòu)體。然后,通過(guò) RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI 將內(nèi)部高速時(shí)鐘(HSI)作為時(shí)鐘源,通過(guò) RCC_OscInitStruct.HSIState = RCC_HSI_ON 打開(kāi)內(nèi)部高速時(shí)鐘。最后,通過(guò) RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI 將內(nèi)部高速時(shí)鐘作為系統(tǒng)時(shí)鐘源,并將其他時(shí)鐘分頻設(shè)置為1。
注意,在使用內(nèi)部晶振時(shí),需要使能內(nèi)部高速時(shí)鐘(HSI),并將其作為系統(tǒng)時(shí)鐘源。如果需要使用其他時(shí)鐘源,可以根據(jù)需要進(jìn)行修改。同時(shí),根據(jù)實(shí)際情況,需要配置FLASH的讀取等待狀態(tài)(latency)。 |
|