HAL_RCC_GetClockConfig 使用范例
时间: 2024-12-18 19:30:38 浏览: 12
`HAL_RCC_GetClockConfig()` 是 HAL 库 (Hardware Abstraction Layer) 中用于获取系统时钟配置信息的一个函数,在STM32微控制器上广泛使用,特别是处理与 RCC (RCC 构造器) 配置相关的任务。这个函数通常用于调试或确认硬件时钟设置是否如预期。
例如,下面是一个简单的范例,展示了如何在STM32F4项目中使用 `HAL_RCC_GetClockConfig()` 获取 APB1总线时钟频率:
```c
#include "stm32f4xx_hal.h"
// 初始化并启动时钟系统
void SystemClock_Config(void)
{
// 其他初始化步骤...
// 获取APB1时钟配置
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
// 填充时钟配置结构体
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_MCO; // 使用HSE、LSI作为主时钟源
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 开启HSI振荡器
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; // 启动PLL
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // 设置PLL源为HSE
RCC_OscInitStruct.PLL.PLLM = 8; // PLL倍频系数
RCC_OscInitStruct.PLL.PLLN = 336; // 输出频率(48MHz)
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // 输出分频
RCC_OscInitStruct.PLL.PLLQ = 7; // 分频系数
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
// 处理错误...
}
// 根据配置应用时钟
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; // 这里假设APB1时钟需要除以4
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
// 处理错误...
}
// 现在可以获取APB1时钟频率
uint32_t hclk_Frequency = HAL_RCC_GetSysClockFreq(); // 获取系统时钟频率,即APB1频率(因为已配置为sysclk)
uint32_t pclk1_Frequency = hclk_Frequency / RCC_APB1CLK_DIV4; // 计算APB1的实际频率
// 打印或记录APB1时钟频率
printf("APB1 Clock Frequency: %u MHz\n", pclk1_Frequency / 1000000);
// ...其他后续操作
}
阅读全文