在使用STM32F030F4P6芯片內部晶振時,需要在啟動代碼中配置芯片的時鐘。以下是使用STM32CubeIDE生成的默認啟動代碼中配置內部晶振的示例代碼,你可以參考:
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();
}
在這段代碼中,首先通過 __HAL_PWR_VOLTAGESCALING_CONFIG() 函數配置芯片電壓,并初始化 RCC_OscInitTypeDef 和 RCC_ClkInitTypeDef 結構體。然后,通過 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI 將內部高速時鐘(HSI)作為時鐘源,通過 RCC_OscInitStruct.HSIState = RCC_HSI_ON 打開內部高速時鐘。最后,通過 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI 將內部高速時鐘作為系統時鐘源,并將其他時鐘分頻設置為1。
注意,在使用內部晶振時,需要使能內部高速時鐘(HSI),并將其作為系統時鐘源。如果需要使用其他時鐘源,可以根據需要進行修改。同時,根據實際情況,需要配置FLASH的讀取等待狀態(latency)。 |