完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
系统时钟和配置时钟必须要学会并且了然于胸。
而STM32f03时钟这部分。是难点。 时钟树单纯讲理论的话会比较枯燥,如果选取一条主线,并辅以代码,先主后次讲解的话 会很容易 ,而且记忆还 更深刻。 我们这里选取库函数时钟系统时钟函数: SetSysClockTo72(); 以这个函数的编写流程来讲解时钟树 下面是STM32时钟树。 1.CRC相关寄存器 要了解并配置时钟树,首先需要认识有关寄存器 1.1 时钟控制寄存器(RCC_CR) 偏移地址: 0x00 复位值: 0x000 XX83, X代表未定义 访问: 无等待状态, 字, 半字 和字节访问 1.1 时钟配置寄存器(RCC_CFGR) 偏移地址: 0x04 复位值: 0x0000 0000 访问: 0到2个等待周期,字,半字和字节访问 只有当访问发生在时钟切换时,才会插入1或2个等待周期。 2.系统时钟讲解 对应于图中黄色部分 2.1 HSE:高速外部时钟 无源晶振(4-16M),通常使用8M,对应于RCC_CR寄存器中位16(控制)和位17(就绪标志) PLLXTPRE,确定 PLL 时钟来源的时候, HSE 可以不分频或者 2 分频,这个由时钟配置寄存器 CFGR 的位 17来控制 2.2 PLL 时钟源 PLLSRC,PLL 时钟来源可以有两个,一个来自 HSE,另外一个是 HSI/2,具体用哪个由时钟配置寄存器 CFGR 的位 16: PLLSRC 设置。 HSI 是内部高速的时钟信号,频率为 8M,根据 温度和环境的情况频率会有漂移,一般不作为 PLL 的时钟来源。这里我们选 HSE 作为PLL 的时钟来源。 2.3 PLL 时钟 PLLCLK PLLMUC为PLL倍频系数,设置成多少, 由时钟配置寄存器 CFGR 的位21-18: PLLMUL[3:0]设置。我们这里设置为 9 倍频。 注意:PLL时钟源头使用HIS/2的时候,PLLMUL最大只能为16,这个时候PLLCLK最大只能是64M,小于ST官方推荐的最大时钟72M。 2.4 系统时钟 SYSCLK 系统时钟来源可以是: HSI、 PLLCLK、 HSE,具体的时钟配置寄存器CFGR 的位 1-0:SW[1:0]设置。我们这里设置系统时钟: SYSCLK = PLLCLK = 72M。 2.5 AHB 总线时钟 HCLK 由时钟配置寄存器CFGR的位 7-4: HPRE[3:0]设置。 我们这里设置为 1 分频,即 HCLK=SYSCLK=72M。 2.6 APB2 总线时钟 HCLK2 由时钟配置寄存器 CFGR 的位 13-11: PPRE2[2:0]决定。 们这里设置为 1 分频,即 PCLK2= HCLK = 72M。 2.7 APB1 总线时钟 HCLK1 由时钟配置寄存器 CFGR 的位 10-8:PRRE1[2:0]决定。 最高为36M。 3.时钟树其他部分讲解 通过对系统时钟设置的讲解,整个时钟树我们已经把握的有六七成,剩下的时钟部分我们讲解几个重要的。 对应图中字母部分 3.1 A、 USB 时钟 USB 时钟是由 PLLCLK 经过 USB 预分频器得到,分频因子可以是: [1,1.5], 具体的由时钟配置寄存器CFGR 的位 22: USBPRE 配置。 USB 的时钟最高是 48M,根据分频因子 反推过来算 , PLLCLK 只能是 48M 或者是 72M。一般我们设置 PLLCLK=72M,USBCLK=48M。 USB 对时钟要求比较高,所以 PLLCLK 只能是由 HSE 倍频得到,不能使用 HSI 倍频 3.2 B、 Cortex 系统时钟 Cortex 系统时钟由 HCLK 8 分频得到,等于 9M, Cortex 系统时钟用来驱动内核的系统定时器 SysTick, SysTick 一般用于操作系统的时钟节拍,也可以用做普通的定时。 3.3 C、 ADC 时钟 ADC 时钟由 PCLK2 经过 ADC 预分频器得到,分频因子可以是[2,4,6,8],具体的由时钟配置寄存器 CFGR 的位 15-14: ADCPRE[1:0]决定。 很奇怪的是怎么没有 1 分频。 ADC 时钟最高只能是 14M,如果采样周期设置成最短的 1.5 个周期的话, ADC 的转换时间可以达到最短的 1us。如果真要达到最短的转换时间 1us 的话,那 ADC 的时钟就得是 14M,反推 PCLK2 的时钟只能是: 28M、 56M、 84M、 112M,鉴于 PCLK2 最高是 72M,所以只能取 28M 和 56M。 3.4 D、 RTC 时钟、独立看门狗时钟 RTC 时钟可由 HSE/128 分频得到,也可由低速外部时钟信号 LSE 提供,频率为32.768KHZ,也可由低速内部时钟信号 HSI 提供,具体选用哪个时钟由备份域控制寄存器BDCR 的位 9-8: RTCSEL[1:0]配置。 独立看门狗的时钟由 LSI 提供,且只能是由 LSI 提供,LSI 是低速的内部时钟信号,频率为 30~60KHZ 直接不等,一般取 40KHZ。 3.5 E、 MCO 时钟输出 MCO 是 microcontroller clock output 的缩写,是微控制器时钟输出引脚,在 STM32 F1系列中 由 PA8 复用所得,主要作用是可以对外提供时钟,相当于一个有源晶振。 MCO 的时钟来源可以是: PLLCLK/2、 HSI、 HSE、 SYSCLK,具体选哪个由时钟配置寄存器CFGR 的位 26-24: MCO[2:0]决定。 除了对外提供时钟这个作用之外, 我们还可以通过示波器监控 MCO 引脚的时钟输出来验证我们的系统时钟配置是否正确。 3.6 F、 HSI高速的内部时钟。 来源:芯片内部,大小为8M,当HSE故障时,系统时钟会自动切换到HSI,直到HSE启动成功。 控制: RCC_CR 时钟控制寄存器的位0:HSION控制 4.设置系统时钟库函数 设置系统时钟库函数如下,该函数是直接操作寄存器的,有关寄存器部分请参考数据手册的 RCC 的寄存器描述部分。 后记 时钟树这块配置还是很重要的,一定要掌握。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 09:21 , Processed in 1.164285 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号