MCU学习笔记_STM32时钟

MCU学习笔记

STM32时钟

1. STM32时钟类型
2. 从程序的角度配置时钟

1. STM32时钟类型

5个时钟源:HSI, HSE, LSI, LSE, PLL

  • HSI,高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统时钟或者作PLL时钟输入。
  • HSE,高速外部时钟,可接石英/陶瓷晶振(OSC),或者接外部时钟源,频率范围4MHz~26MHz。可以分频后作为RTC的一个时钟源;也可作为系统时钟源。
  • LSI,低速内部时钟,RC振荡器,频率为32KHz,提供低功耗时钟。主要提供独立看门狗和自动唤醒单元使用。可以选择作为RTC的时钟源。
  • LSE,低速外部时钟,接频率为32.768KHz的石英晶体,外部产生的时钟时非常稳定的。RTC大部分情况下,都会选择LSE作为自身的时钟来源。
  • 主PLL,锁相环倍频输出,时钟来源可以使HSI, HSE,通过MUX,选择输入。可用作系统时钟源。
    PLLCLK = HSE*(N/(M*P))

系统时钟SYSCLK

来源:

  • HSI振荡器时钟
  • HSE振荡器时钟
  • PLL时钟

作用:

  • 可以直接用作以太网PTP时钟
  • 经过AHB的预分频,HCLK,1. 可以作为AHB总线,外设,内核,存储器的时钟; 2. 可以作为Cortex系统定时器,SYSTICLK; 3. FCLK Cortex*运行时钟
  • AHBx预分频的之中,经过APBx预分频,给APBx总线上的外设提供时钟

专用PLL

  • PLLI2S:生成精确时钟,在I2S和SA1上实现高品质音频

    PLLI2SQ: 可用作SA1_A/SA1_B的clock; Q:2~15
    PLLI2SR: 可用作I2S的clock; R: 2~7
    PLLI2SN: 可用作PLLI2S VCO的倍频clock; N: 192~432

  • PLLSAI: 生成精确时钟,用于SA1输入时钟,同事还未LCD_TFT接口提供精确时钟;

    PLLSAIQ: 可用作SA1_A/SA1_B的clock; Q:2~15
    PLLSAIR: 可用作LCD_TFT clock;R:2~7
    PLLI2SN: 可用作PLLI2S VCO的倍频clock; N: 192~432

以太网时钟

  • 外部PHY芯片,提供50MHz的时钟,经过分频用于MACTXCLK, MACRXCLK, MACRMIICLK
  • 外部USB2.0PHY提供60MHz时钟,用于USBHSULPL时钟

注意:任何外设在是在用之前,必须使能其相应的时钟;即enable 相应的时钟控制位。


2. 从程序的角度配置时钟

  • 系统函数初始化

    SystemInit函数
    SystemInit();

    使用HAL库函数的时候,在系统启用之后,会自动调用:

 //引导代码,芯片启动之后,引导执行SystemInit,然后执行main函数
Reset handler
Reset_Handler PROC
		EXPORT Rest_Handler	[WEAK]
	IMPORT SystemInit //1. FPU浮点运算的设置;2. 复位相关寄存器配置;3. 设置向量表的地址,包括基地址,偏移地址;标准库中,会配置系统时钟初始化.HAL库中,没有配置,需要用户自己配置。
	IMPORT _main
		LDR R0,  =SystemInit
		BLX	R0
		LDR	R0,=_main
		BX R0
		ENDP

使用HAL库的时钟系统配置步骤:

  • 使能PWR时钟:调用函数_HAL_RCC_PWR_CLK_ENABLE()。
  • 设置调压器输出电压级别:调用函数_HAL_PWR_VOLTAGESCALING_CONFIG()。
  • 选择是否开启Over-Drive功能:调用函数_HAL_PWREx_EnableOverDrive()。
  • 配置时钟源相关参数:调用函数HAL_RCC_OscConfig();。
  • 配置系统时钟源以及AHB, APB1和APB2的分频系数:调用函数HAL_RCC_ClockConfig()。


参考资料:《STM32F4xx中文参考手册-第六章复位和时钟控制》 Thanks^^

【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


上一篇:c# – LINQ to DataGridViewRowCollection


下一篇:痞子衡嵌入式:盘点国内MCU级RISC-V内核IP厂商