stm32f103c8t6晶振
时间: 2025-01-08 13:51:22 浏览: 4
### STM32F103C8T6 晶振配置教程
#### 设置外部时钟源
对于STM32F103C8T6单片机,当采用高速外部时钟(HSE)作为系统时钟源时,通常连接的是一个石英或陶瓷谐振器,其频率范围为4 MHz至16 MHz[^2]。如果硬件上已经安装了一个8 MHz的晶振,则可以通过修改PLL(锁相环)设定来调整最终输出给CPU使用的时钟频率。
为了实现这一点,在初始化阶段需先启用HSE并等待稳定;接着通过改变预分频系数(PREDIV)与乘法因子(MUL),使得经过PLL处理后的信号达到期望值——比如常见的72 MHz工作频率:
```c
// 启动 HSE 并切换到 PLL 输出 (假设目标频率为 72MHz, 基于 8MHz 的 HSE)
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* 配置 HSE */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
/* 使用 HSE 作为 PLL 输入,并设置倍频参数 */
__HAL_RCC_PLL_CONFIG(RCC_PLLSOURCE_HSE,RCC_PLL_MUL9); // 对应 8 * 9 = 72MHz
/* 开启 PLL */
__HAL_RCC_PLL_ENABLE();
while(!(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY))){} /* Wait till PLL is ready */
/* 切换 SYSCLK 至 PLL */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | \
RCC_CLOCKTYPE_PCLK1 | \
RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){
Error_Handler();
}
```
这段代码展示了如何基于现有的8 MHz外接晶体震荡器,利用PLL将其放大九倍得到72 MHz的工作频率。需要注意的是,这里还设置了不同的总线分频比例以满足不同外设的需求。
另外值得注意的一点是在某些情况下可能需要更换原有的8 MHz晶振为其他规格的产品,例如改为12 MHz。此时只需相应调整PLL的倍率即可保持相同的系统运行速度。具体来说就是将原来的`RCC_PLL_MUL9`更改为`RCC_PLL_MUL6`,因为\(12 \times 6=72\) MHz同样能够获得理想的主频效果[^3]。
#### 内部RC振荡器配置
除了上述提到的外部晶振方案之外,STM32也支持使用内置的HSI(High Speed Internal)RC振荡器作为系统时钟源。这种方式不需要额外焊接任何组件,但精度相对较低一些,默认提供大约8 MHz左右的频率输出[^1]。要激活此功能之前应该适当调节Flash访问延迟(`FLASH_ACR`)以及校正误差(`HSICAL`),确保最佳性能表现后再执行启动命令。
```c
// 初始化 Flash 接口
FLASH->ACR |= FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_1;
// 调整 HSI 校正值 (此处仅为示意,请根据实际情况调整)
*((volatile uint8_t *)0x400238A2U) = 16u;
// 启用 HSI 及等待就绪状态
RCC->CR |= RCC_CR_HSION;
while (!(RCC->CR & RCC_CR_HSIRDY)){ }
// 关闭 HSE 和 PLL ,选择 HSI 作为系统时钟源...
```
以上操作完成后就可以成功切换成由内部资源驱动整个MCU正常运转了。不过考虑到实际应用中的稳定性需求,建议优先考虑稳定的外部晶振解决方案除非有特殊原因才选用内建选项。
阅读全文