stm HAL 读取预分频系数
时间: 2023-07-18 10:10:54 浏览: 246
要读取STM32 HAL库中的预分频系数,可以使用以下代码:
```c
RCC_ClkInitTypeDef clk_init;
uint32_t sysclk_freq;
HAL_RCC_GetClockConfig(&clk_init, &sysclk_freq);
// 获取预分频系数
uint32_t pclk1_freq = HAL_RCC_GetPCLK1Freq();
uint32_t pclk2_freq = HAL_RCC_GetPCLK2Freq();
```
其中,`HAL_RCC_GetClockConfig()`函数可以获取当前系统时钟的配置信息和频率,`HAL_RCC_GetPCLK1Freq()`和`HAL_RCC_GetPCLK2Freq()`函数可以分别获取APB1和APB2总线的时钟频率,通过计算预分频系数可以得到所需的值。
相关问题
stm HAL 读取预分频系数具体代码
以下是一个完整的例子,演示如何使用STM32 HAL库读取预分频系数:
```c
#include "stm32f4xx_hal.h"
int main(void)
{
// 初始化HAL库
HAL_Init();
// 配置系统时钟为PLL时钟,主PLL时钟源为HSE时钟,PLL倍频因子为8,PLL分频因子为2
RCC_OscInitTypeDef osc_init;
osc_init.OscillatorType = RCC_OSCILLATORTYPE_HSE;
osc_init.HSEState = RCC_HSE_ON;
osc_init.PLL.PLLState = RCC_PLL_ON;
osc_init.PLL.PLLSource = RCC_PLLSOURCE_HSE;
osc_init.PLL.PLLM = 8;
osc_init.PLL.PLLN = 336;
osc_init.PLL.PLLP = RCC_PLLP_DIV2;
osc_init.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&osc_init);
// 配置APB1时钟为2分频,APB2时钟为1分频
RCC_ClkInitTypeDef clk_init;
uint32_t sysclk_freq;
HAL_RCC_GetClockConfig(&clk_init, &sysclk_freq);
clk_init.APB1CLKDivider = RCC_HCLK_DIV2;
clk_init.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&clk_init, FLASH_LATENCY_5);
// 获取预分频系数
uint32_t pclk1_freq = HAL_RCC_GetPCLK1Freq();
uint32_t pclk2_freq = HAL_RCC_GetPCLK2Freq();
// 在这里进行其他操作...
// 死循环
while (1)
{
}
}
```
在这个例子中,我们首先初始化了HAL库,并使用`HAL_RCC_OscConfig()`函数配置了系统时钟为PLL时钟,主PLL时钟源为HSE时钟,PLL倍频因子为8,PLL分频因子为2。然后,我们使用`HAL_RCC_ClockConfig()`函数配置了APB1时钟为2分频,APB2时钟为1分频。最后,我们使用`HAL_RCC_GetPCLK1Freq()`和`HAL_RCC_GetPCLK2Freq()`函数分别获取了APB1和APB2总线的时钟频率。
需要注意的是,以上代码中使用的是STM32F4系列芯片的配置,如果您使用的是其他系列芯片,具体配置方式可能会有所不同。
stm HAL 读取预分频系数用的函数
读取STM32 HAL库中的预分频系数主要用到了以下三个函数:
1. `HAL_RCC_GetClockConfig()`函数:获取当前系统时钟的配置信息和频率。
```c
void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *clk_init, uint32_t *sysclk_freq);
```
该函数的第一个参数为指向`RCC_ClkInitTypeDef`结构体的指针,用于返回当前系统时钟的配置信息,包括系统时钟源、PLL倍频因子、PLL分频因子以及APB1和APB2总线的时钟分频系数。第二个参数为指向无符号32位整数的指针,用于返回当前系统时钟的实际频率。
2. `HAL_RCC_GetPCLK1Freq()`函数:获取APB1总线的时钟频率。
```c
uint32_t HAL_RCC_GetPCLK1Freq(void);
```
该函数直接返回APB1总线的时钟频率,单位为Hz。
3. `HAL_RCC_GetPCLK2Freq()`函数:获取APB2总线的时钟频率。
```c
uint32_t HAL_RCC_GetPCLK2Freq(void);
```
该函数直接返回APB2总线的时钟频率,单位为Hz。
阅读全文