淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 开源电子网 公众平台:“正点原子” 官方网站:www.alientek.com 联系电话:13922348612 ddddd ALIENTEK 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 《手把手教你学STM32》 时钟系统讲解 适用平台 STM32F1xx 开发板 (正点原子) STM32F4xx 开发板 (正点原子) ddddd 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 目录 时钟系统框图讲解 1 时钟配置相关函数讲解 2 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 时钟系统讲解 参考资料: 探索者STM32F4开发板: 《STM32F4开发指南-库函数版本》-4.3小节 STM32F4时钟系统 STM32F4xx官方资料: 《STM32F4xx中文参考手册》-第6章 复位和时钟控制 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 时钟系统框图 时钟树比较复杂,我们直接看中文参考手册和开发指南中来分析。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 时钟系统知识总结 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。可以直接作为系统 时钟或者用作PLL时钟输入。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时 钟源,频率范围为4MHz~26MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独立看 门狗和自动唤醒单元使用。 ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。RTC ⑤、PLL为锁相环倍频输出。STM32F4有两个PLL: 主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。 第一个输出PLLP用于生成高速的系统时钟(最高168MHz) 第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。 专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。 2. 系统时钟SYSCLK可来源于三个时钟源: ①、HSI振荡器时钟 ②、HSE振荡器时钟 ③、PLL时钟 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 时钟系统知识总结 3.STM32F4时钟信号输出MCO1(PA8)和MCO2(PC9)。 MCO1:用户可以配置预分频器(1~5)向MCO1引脚PA8输出4个不同的时钟源: HIS LSE HSE PLL MCO2:用户可以配置预分频器(1~5)向MCO2引脚PC9输出4个不同的时钟源: SYSCLK PLLI2S MCO最大输出时钟不超过100MHz 4.任何一个外设在使用之前,必须首先使能其相应的时钟。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com RCC相关配置寄存器 typedef struct { __IO uint32_t CR; __IO uint32_t PLLCFGR; __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ uint32_t RESERVED0; /*!< Reserved, 0x1C */ __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ uint32_t RESERVED2; /*!< Reserved, 0x3C */ __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ uint32_t RESERVED4; /*!< Reserved, 0x5C */ __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ uint32_t RESERVED5[2]; __IO uint32_t BDCR; __IO uint32_t CSR; uint32_t RESERVED6[2]; __IO uint32_t SSCGR; __IO uint32_t PLLI2SCFGR; __IO uint32_t PLLSAICFGR; __IO uint32_t DCKCFGR; } RCC_TypeDef; 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com RCC相关配置寄存器 对照《STM32F4中文参考手册》6.3节 P114~170 了解这些寄存器的作用和配置方法。 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com RCC相关头文件和固件库源文件 时钟使能配置: RCC_HSICmd, RCC_LSICmd, RCC_PLLCmd, RCC_PLLI2SCmd, RCC_PLLSAICmd, RCC_RTCCLKCmd,RCC_AHBxPeriphClockCmd RCC_APBxPeriphClockCmd 时钟源和时钟相关配置: RCC_HSEConfig, RCC_LSEConfig, RCC_PLLConfig, RCC_PLLI2SConfig, RCC_PLLSAIConfig, RCC_MCO1Config, RCC_MCO2Config, RCC_SYSCLKConfig, RCC_HCLKConfig,RCC_PCLK1Config,RCC_PCLK2Config,RCC_RTCCLKConfig,RCC_I2SCLKConfig 3.外设复位函数 RCC_AHB1PeriphResetCmd,RCC_AHB2PeriphResetCmd,RCC_AHB3PeriphResetCmd,RCC_APB1PeriphResetCmd,RCC_APB2PeriphResetCmd 状态参数获取参数: RCC_GetSYSCLKSource,RCC_GetClocksFreq,RCC_GetFlagStatus,RCC_ClearFlag RCC中断相关函数 : RCC_ITConfig,RCC_ClearITPendingBit,RCC_GetITStatus 头文件: stm32f4xx_rcc.h 源文件:stm32f4xx_rcc.c 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com