stm32g431配置频率
时间: 2025-01-02 08:31:52 浏览: 11
### 配置 STM32G431 微控制器的系统频率
对于 STM32G431 的工作频率配置,核心在于设置系统的时钟源及其倍频因子来达到所需的运行速度。真正的系统时钟是在 `SystemClock_Config()` 函数内完成初始化[^1]。
#### 使用 HAL 库进行时钟配置
通常情况下,在项目启动初期会调用 `HAL_Init()` 来执行一些基本硬件抽象层 (HAL) 初始化操作;此时默认采用内部高速时钟(HSI),它同样可以用来生成周期性的中断事件比如每毫秒一次的更新信号。然而为了获得更高的性能或者更精确的时间基准,则需进一步调整PLL和其他参数以适应具体应用场景的需求。
下面是一个典型的例子展示如何通过修改CubeMX生成的应用程序框架中的`SystemClock_Config`函数来自定义时钟树:
```c
static 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();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HseState = RCC_HSE_ON; // 启动外部高频振荡器
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 192;
RCC⚗📐⚗
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
/** Initialize SysTick
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AhbClkDiv = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.Apb1ClkDiv = RCC_HCLK_DIV4;
RCC_ClkInitStruct.Apb2ClkDiv = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK){
Error_Handler();
}
}
```
上述代码片段展示了怎样启用外部高速晶体振荡器作为PLL输入,并将其乘至适当水平后再分配给不同的总线和外设使用。注意这里选择了HSE而非HSI作为PLL的基础时钟源,这是因为前者提供了更好的稳定性与准确性。
阅读全文