stm32c8t6怎么分频
时间: 2025-01-02 12:43:29 浏览: 5
### STM32C8T6 分频配置
对于STM32C8T6微控制器而言,时钟系统的配置至关重要。该芯片内部集成了多种振荡器和PLL(锁相环),允许灵活调整系统频率以满足不同应用场景的需求。
#### 配置外部高速时钟 (HSE)
当使用外部晶振作为主时钟源时,通常会通过调用`HAL_RCC_OscConfig()`函数来进行初始化设置。如果选用的是8MHz晶体,则需确保其被正确连接到MCU对应的引脚上[^2]。
```c
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 启动 HSE
if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
```
#### 设置预分频器(Prescaler)
为了获得所需的CPU工作频率,在完成OSC配置之后还需要设定AHB/APB总线以及SYSCLK的预分频系数。这一步骤同样借助于`HAL_RCC_ClockConfig()`接口实现:
- **HPRE**: AHB 总线相对于 SYSCLK 的分频比例;
- **PPRE1/PPRE2**: APB1 和 APB2 外设总线相对应的分频因子;
下面是一个具体的例子,假设目标是使能72 MHz的工作频率:
```c
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 计算 PLL 倍频参数, 使得最终输出为 72Mhz
__HAL_RCC_PLL_CONFIG(RCC_PLLSOURCE_HSE, RCC_PLL_MUL9);
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AhbClkDiv = RCC_SYSCLK_DIV1; /* Set AHB prescaler to 1 */
RCC_ClkInitStruct.APB1ClkDiv = RCC_HCLK_DIV2; /* Set APB1 prescaler to 2 */
RCC_ClkInitStruct.APB2ClkDiv = RCC_HCLK_DIV1; /* Set APB2 prescaler to 1 */
if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2)!= HAL_OK){ // Flash Latency 调整至适合72MHz运行的状态
Error_Handler();
}
while(!HAL_IS_BIT_SET(RCC->CR,RCC_CR_PLLRDY)); // Wait until PLL is ready
```
此代码片段展示了如何利用标准外设库中的APIs来改变STM32C8T6的核心与时钟树结构,从而达到期望的操作速度。值得注意的是,在修改这些重要寄存器之前应当仔细阅读官方文档并理解当前硬件平台的具体特性。
阅读全文