扫描关注一起学嵌入式,一起学习,一起成长
【一分钟聊嵌入式】,力求精简,争取用一分钟左右的时间读完。每篇文章讨论一个嵌入式相关的话题,技术、职场、学习方法,或者一段程序等。有小伙伴想发表自己的观点,或想了解哪些内容,公众号后台留言即可。感谢关注!
本期话题
我们都知道,在开发基于STM32单片机项目的时候,首先要配置系统系统时钟。即系统上电启动后,配置好MCU工作所需要的时钟,保证其各个模块能够正常工作。那,有没有想过?在时钟系统配置之前,STM32 单片机的系统时钟是谁提供的呢?今天借助这个话题,简单聊一聊 STM32 的时钟系统。聊一聊
HSI 时钟信号由内部 16 MHz RC 振荡器生成,可直接用作系统时钟,或者用作 PLL 输入 。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。如果HSE晶体振荡器失效, HSI 时钟会被作为备用时钟源。- HSE外部晶体/陶瓷谐振器。3~25Mz外部振荡器可为系统提供非常精确的主时钟。
- HSE用户外部时钟。在这个模式里,必须提供外部时钟。它的频率最高可达50MHz。用户可通过设置在时钟控制寄存器中的 HSEBYP 和 HSEON 位来选择这一模式 。
必须在使能每个 PLL 之前完成 PLL的配置(选择时钟源、预分频系数和倍频系数等),同时应该在它们的输入时钟稳定(就绪位)后才能使能。一旦使能了PLL,这些参数将不能再被改变。当改变主PLL的输入时钟源时,必须在选中了新的时钟源(通过时钟配置寄存器(RCC_CFGR)的PLLSRC位)之后才能关闭原来的时钟源。系统复位后, HSI 振荡器被选为系统时钟。当时钟源被直接或通过 PLL 间接作为系统时钟完成之前,不能停止 HSI。只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择的时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟 。总之,STM32单片机上电启动后,HSI 振荡器时钟为系统时钟源,使得系统可以正常运行。在时钟配置完成之后,会切换到选择的时钟源。如果目标时钟源配置失败,则会继续使用HSI为系统提供时钟。下图为STM32 HAL库时钟配置的一个示例,供参考。
觉得文章不错,点击“分享”、“赞”、“在看” 呗!