STM32HAL库设置外部高速晶振从无缘晶振改为有源晶振,代码如何修改
时间: 2024-12-11 11:32:24 浏览: 18
在STM32 HAL库中,如果要从无源外部晶振(一般指RC震荡器)切换到有源外部晶振(例如陶瓷晶体),你需要改变配置时钟源的方式,并更新相应的初始化参数。
首先,确定你当前的无源外部晶振配置是否已存在于`RCC_OscInitTypeDef`结构中。如果你正在使用的是默认配置,可以跳过此步。
假设你已经有一个`RCC_OscInitTypeDef RCC_OscInitStruct`实例并且之前是针对无源晶振进行配置的:
```c
// 假设原先的配置为无源晶振
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
// ...其他配置
// 更改至有源晶振(例如XTAL)
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_XTAL;
RCCR &= ~RCC_RCC_XTALFSEL; // 清除之前的分频选择位
RCCR |= RCC_RCC_XTALFSEL_2; // 设置2倍频率分频
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 确保开启有源晶振
// 调整时钟频率配置
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // 使用HSE作为PLL输入
RCC_OscInitStruct.PLL.PLLM = /* 分频系数,取决于芯片型号 */;
RCC_OscInitStruct.PLL.PLLN = /* PLL倍频系数 */;
RCC_OscInitStruct.PLL.PLLP = /* 输出时钟预分频 */;
// 初始化时钟配置
HAL_RCC_OscConfig(&RCC_OscInitStruct);
```
完成上述修改后,记得检查`HAL_RCC_ClockConfig()`来设置系统时钟和GPIO时钟,以便于整个设备运行在新的时钟源上。
阅读全文