STM32F103时钟系统学习及C语言实现


1 时钟系统结构图


2 STM32时钟系统(一)

2.1 各个时钟源

① STM32有5个时钟源:HSI、HSE、 LSI、 LSE、 PLL

  • HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高
  • HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz ~ 16MHz
  • LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟
  • LSE是低速外部时钟,接频率为32.768kHz的石英晶体
  • PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2,倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz

② 系统时钟SYSCLK可来源于三个时钟源:

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

④ 举例: Keil编写程序是默认的时钟为72Mhz:

  • 外部晶振(HSE)提供的8MHz,通过PLLXTPRE分频器
  • 进入PLLSRC选择开关,通过PLLMUL锁相环进行倍频(x9),为系统提供72MHz的系统时钟(SYSCLK)
  • AHB预分频器对时钟信号进行分频,为低速外设提供时钟

③ 注意:

  • 独立时钟源为4个,因为PLL本身不能提供时钟
  • LSI一般作为IWDGCLK(独立看门狗)时钟源和RTC时钟源
  • 系统时钟最大频率为72MHz

2.2 时钟信号输出到外部

  STM32可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。可以把时钟信号输出供外部使用

2.3 AHB分频器

  系统时钟通过AHB分频器给外设提供时钟,系统时钟 -> AHB分频器 -> 各个外设分频倍频器 -> 外设时钟的设置

  AHB分频器可选择1、2、4、8、16、64、128、256、512分频,输出的时钟输送给5大模块使用:

  • 内核总线:输送给AHB总线、内核、内存和DMA使用的HCLK时钟
  • Tick定时器:通过8分频后送给Cortex的系统定时器时钟
  • I2S总线:直接送给Cortex的空闲运行时钟FCLK
  • APB1外设:送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给通用定时器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2-7使用
  • APB2外设:送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给高级定时器。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用

2.4 APB1和APB2的对应外设

  APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、USART2、USART3、UART4、UART5、SPI2、SP3等

  而APB2上面连接的是高速外设,包括UART1、SPI1、Timer1、ADC1、ADC2、ADC3、所有的普通I/O口(PA-PE)、第二功能I/O(AFIO)口等


3 STM32时钟系统(二)

3.1 时钟安全系统(CSS)

  如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到Cortex™-M3的NMI中断(不可屏蔽中断)

  一旦CSS被激活,并且HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。NMI将被不断执行,直到CSS 中断挂起位被清除。因此,在NMI的处 理程序中必须通过设置时钟中断寄存器(RCC_ CIR) 里的CSSC位来清除CSS中断

  如果HSE振荡器被直接或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟或通过PLL2,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(直接的或通过PLL2)是作为PLL的输入时钟,PLL也将被关闭

3.2 RTC时钟

  通过设置 备份域控制寄存器(RCC_BDCR)里的RTCSEL[1:0]位,RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供

3.3 看门狗时钟

  如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关闭。在LSI振荡器稳定后,时钟供应给IWDG

3.4 USB时钟

  STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取(唯一的),可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz


4 RCC寄存器

4.1 时钟控制寄存器(RCC_CR)

4.2 时钟配置寄存器(RCC_CFGR)

4.3 时

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值