STM32F103 五个时钟源

简介: STM32F103 五个时钟源

STM32F103微控制器确实有五个时钟源,分别是HSI、LSI、HSE、LSE和PLL。这些时钟源的主要区别在于他们的频率、稳定性和功耗。以下是这五个时钟源的简要说明:

  1. HSI (High Speed Internal):这是一个高速内部振荡器,频率通常为8 MHz。这个时钟源在微控制器启动时默认启用,因此不需要额外的硬件。
  2. LSI (Low Speed Internal):这是一个低速内部振荡器,频率通常为40 kHz。这个时钟源主要用于驱动独立看门狗和实时时钟。
  3. HSE (High Speed External):这是一个高速外部振荡器,频率范围通常在4 MHz到32 MHz。这个时钟源需要连接到外部的晶振或者振荡器。
  4. LSE (Low Speed External):这是一个低速外部振荡器,频率通常为32.768 kHz。这个时钟源主要用于驱动实时时钟,需要连接到外部的32.768 kHz晶振。
  5. PLL (Phase-Locked Loop):这是一个相位锁定环,它可以将HSI或者HSE的频率乘以一个因子,生成更高的频率。这个时钟源主要用于生成高性能的系统时钟。

这些时钟源之间的关系主要在于它们的使用场景和配置方式。例如,你可以配置微控制器使用HSI作为系统时钟,或者使用PLL将HSE的频率提高,然后使用PLL作为系统时钟。同时,你也可以使用LSI或者LSE来驱动实时时钟,这取决于你对频率稳定性和功耗的需求。

总的来说,选择哪个时钟源取决于你的应用需求,包括频率、稳定性、功耗和成本等因素。

使用STM32F103的PLL(Phase-Locked Loop)将HSE(High-Speed External)的频率提高,并进一步使用PLL作为系统时钟的步骤如下:

  1. 启动和稳定HSE:
  • 首先,确保已连接外部晶振或振荡器,并启用HSE。
  • 等待HSE启动并稳定。
  1. 配置PLL:
  • 选择HSE作为PLL的输入源。
  • 设置PLL的乘法因子。STM32F103的PLL允许从2到16.5的乘法因子。例如,如果HSE是8MHz,并且你想得到72MHz的系统时钟,你可以设置PLL的乘法因子为9。
  1. 启动PLL:
  • 启动PLL。
  • 等待PLL稳定。这可以通过检查PLL的锁定状态来确认。
  1. 配置系统时钟:
  • 在切换到PLL作为系统时钟之前,最好先降低系统时钟的速度,以确保系统在高频下可以稳定运行。
  • 选择PLL作为系统时钟。
  • 配置闪存延迟。当系统时钟的频率超过一定的值时,你可能需要增加闪存的访问延迟。
  1. 调整总线和外设时钟:
  • 根据需要,你可以配置AHB、APB1和APB2总线的时钟分频。例如,APB1的时钟不能超过36MHz,因此如果系统时钟为72MHz,APB1的分频因子应该设置为2。
  1. 确认设置:
  • 你可以检查并确认PLL输出的频率以确保一切正常。

以下是使用STM32的标准外设库进行配置的一个简化示例(请注意,你可能需要根据你的具体需求和外部晶振的频率进行调整):

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
// 启动HSE
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 乘法因子为9
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// 设置系统时钟为PLL输出
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | 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;   // APB1分频因子为2
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

上述代码是基于STM32 HAL库的,具体实现可能会根据所使用的库和STM32F103的具体型号而有所不同。

目录
相关文章
|
7月前
|
监控 前端开发
STM32F103标准外设库——RCC时钟(六)
STM32F103标准外设库——RCC时钟(六)
398 0
STM32F103标准外设库——RCC时钟(六)
|
7月前
|
存储
MCS-51单片机的中断源
MCS-51单片机的中断源
310 1
|
7月前
STM32CubeMX配置时钟无法使用高速外部时钟HSE
STM32CubeMX配置时钟无法使用高速外部时钟HSE
309 0
如何在上电时获取MCU的复位源
如何在上电时获取MCU的复位源
|
7月前
|
Linux API 开发者
设备树知识小全(九):GPIO、时钟、pinmux连接
设备树知识小全(九):GPIO、时钟、pinmux连接
345 0
STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)
STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)
397 0
STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)
|
7月前
|
存储 芯片
STM32 cubemx配置USART DMA传输
STM32 cubemx配置USART DMA传输
179 0
|
数据处理
STM32实现DMA接收串口数据
STM32实现DMA接收串口数据
310 0
|
传感器
STM32通过IIC协议控制MPU6050
根据B站UP主“江科大自动化协”的教程总结
129 0