STM32时钟树案例详解
时钟树
直接使用HSI作为时钟源
使用配置相应的结构体,最后调用HAL_RCC_OscConfig(), 和HAL_RCC_ClockConfig()初始化时钟。
/**
* @brief System Clock Configuration
* @retval None
* 方式一:直接配置相应的结构体
* 使用HSI作为系统时钟源(16MHz).
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {
0}; //配置选择哪个系统时钟源
RCC_ClkInitTypeDef RCC_ClkInitStruct = {
0}; //配置各条线路的分频
/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //配置调压器的输出电压级别,级别数值越小工作频率越高
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; //选择HSI(High Speed Inside)作为时钟来源
RCC_OscInitStruct.HSIState = RCC_HSI_ON; //开启HSI
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; //HSI校准调整值,选择默认(可不写)
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; //不使用PLL
/* 等待时钟源切换成功 */
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
printf("HAL_RCC_OscConfig(&RCC_OscInitStruct) is Error!\n"); //输出错误提示
Error_Handler();
}
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK