当前位置:
文档之家› 基于STM32时钟系统的开发及配置
基于STM32时钟系统的开发及配置
基于 STM32 时钟系统的开发及配置
一、背景 最近做个项目,需要使用 STM32,还是以前一样的观点,时钟就是 MCU 心脏,供血即时钟频率输出,想要弄明白一个 MCU,时钟是一个非常好的切 入点。言归正传,网上已经有太多大神详述过 STM32 的详细配置方法了,在 此就简单介绍下 STM32 时钟系统,以及如何配置做个简单记录,方便以后的 快速开发。 二、正文 废话不多说,上一张 STM32F10xx 的时钟树图:
(USBCLK)由 PLLCLK 直接提供,RTC 时钟(RTCCLK)也不是来源于系 统时钟(SYSCLK),详见图。 时钟结构大体也就如此,不再深究,网上有许多更加深入的讲解,接下来 说说如何去配置。用代码来说明问题: 先贴文件“system_stm32f10x.c”,此文件即库文件。里面有一个很重要的 函数“SystemInit()” 解析过 STM32 启动代码的朋友都应该知道,这个函数跑在进入 main 函 数之前,里面做的事情即是配置系统时钟。代码如下: voidSystemInit(void) {/*ResettheRCCclockconfigurationtothedefaultresetstate(fordebugpurpose) *//*SetHSIONbit
由图可知,STM32F10XX 有两级时钟 第一级时钟 * 高速内部时钟(HSI) * 锁相环时钟(PLLCLK) * 高速外部时钟(HSE) 第二级时钟 * 低速内部时钟(LSI) * 低速外部时钟(LSE) 又由图可知,
* HSE 由外部晶振从“OSC_OUT”,“OSC_IN”两脚输入提供。 * LSE 由外部晶振从“OSC32_OUT”,“OSC32_IN”两脚输入提供。 * HSI 由 8MHZ 高速内部 RC 震荡电路提供。 * LSI 由 40kHZ 低速内部 RC 震荡电路提供。 STM32F10XX 还可通过 MCO 脚向外提供时钟输出。时钟来源有 PLLCLK/HSI/HSE/SYSCLK,由 MCO 选择器来选择。 研究过时钟来源,再来研究时钟的去向,MCU 自身要能正常运作,即需 要一个时钟,这个时钟既是系统时钟(SYSCLK),而基本上所有外设的时钟 均来自于这个系统时钟(SYSCLk)。然后由系统时钟对外提供各种外设时钟。 详见图。 当然,也有例外,USB 时钟必须为 48MHZ,这里的 USB 时钟