STM32时钟控制RCC探究_第1页
STM32时钟控制RCC探究_第2页
STM32时钟控制RCC探究_第3页
STM32时钟控制RCC探究_第4页
STM32时钟控制RCC探究_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、stm32时钟控制rcc探究分类:嵌入式2010-05-12 10:00 1996人阅读评论(0)收藏举报rtc是stm32单片机的脉搏,是单片机的驱动源。使用任何一个外设都必须打开 相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉, 从而可以降低系统的功耗,达到节能,实现低功耗的效果。stm32单片机的时钟可以由以下3个时钟源提供:1、hsi:高速内部吋钊|信号stm32单片机内带的吋钟(8m频率)精度较差2、hse:高速外部时钟信号精度高來源(l)hse外部品体/陶瓷谐振器(晶 振)(2)hse用户外部时钟3、lse:低速外部晶体32.768khz主要提供一个精确的时

2、钟源一般作为rtc 吋钟使用stm32单片机的将时钟信号(例如hse)经过分频或倍频(pll)后,得到系统时 钟,系统时钟经过分频,产生外设所使用的时钟。木文有个图,可以直观的浏览单片机整个吋钟架构。了解stm32单片机的时钟,卜面就是如何使用,我举个使用hse时钟的例了。设置时钟流程:1、将rcc寄存器重新设置为默认值rcc_deinit2、打开外部高速时钟晶振 hsercc_hseconfig(rcc_hse_on);3、等待外部高速时钟晶振工作hsesunlups皿us =rcc_waitforhsestartup();设置 ahb 吋钟 rcc_hclkconfig; 设置高速ahb时

3、钟4、5、rcc_pclk2config;6、设置低速速ahb时钟rcc_pclk1 config7、设置pllrcc_pllconfig打开pll等待pll工作rcc_pllcmd(ena ble);while(rcc_getflagstatus(rcc_flag_pllrdy)=reset)10、设置系统时钟rcc-sysclkconfig11、 判断是否 pll 是系统时钟while(rcc_getsysclksource() != 0x08)12、打开要使用的外设时钟rcc_apb2periphclockcmd()/rcc_apb 1 periphclockcmd ()在stm32中,

4、冇五个时钟源,为hs1、hse、lsi、lse、pllorc振荡器,频率为8mhzo可接石英/陶瓷谐振器,或者接外部时钟源,频%1 、hst是高速内部时钟,%1 、hse是高速外部时钟,率范围为4mhz"16mhzo%1 、lsi是低速内部时钟,%1 、lse是低速外部时钟,rc振荡器,频率为40khzo接频率为32. 768khz的石英晶体。%1 、pll为锁相环倍频输岀,其时钟输入源可选择为hsi/2、hse或者hse/2。 倍频可选择为216倍,但是其输出频率最大不得超过72mhzo其中40kiiz的lsi供独立看门狗iwdg使用,另外它还可以被选择为实时时 钟rtc的吋钟源。

5、另外,实时时钟rtc的吋钊源还可以选择lse,或者是hse的 128分频。rtc的吋钟源通过rtcsel1:o来选择。stm32中有一个全速功能的usb模块,其串行接口引擎需要一个频率为48mhz 的时钟源。该时钟源只能从pll输出端获取,可以选择为1. 5分频或者1分频, 也就是,当需要使用usb模块时,pll必须使能,并且吋钟频率配置为48mhz或72mhzo另外,stm32还可以选择一个时钟信号输出到mc0脚(pa8)上,可以选择为 pll输出的2分频、hsi、hse、或者系统时钟。系统吋钟sysclk,它是供stm32中绝大部分部件工作的吋钟源。系统吋钟 可选择为pll输出、hsi或者

6、hseo系统时钟最大频率为72mhz,它通过ahb分 频器分频后送给各模块使用,ahb分频器可选择1、2、4、8、16、64、128、256、 512分频。其中aiib分频器输出的时钟送给5大模块使用:%1 、送给ahb总线、内核、内存和dma使用的hclk吋钟。%1 、通过8分频后送给cortex的系统定时器时钟。%1 、直接送给cortex的空闲运行时钟fclko%1 、送给apb1分频器。apb1分频器可选择1、2、4、8、16分频,其输出 一路供apb1外设使用(pclk1,最大频率36mhz),另一路送给定时器(timer)2.3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输岀供

7、定时器2、3、4 使用。%1 、送给apb2分频器。apb2分频器町选择1、2、4、8、16分频,其输出 一路供apb2外设使用(pclk2,最大频率72mhz),另一路送给定时器(timer) 1 倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外, apb2分频器述冇一路输出供adc分频器使用,分频后送给adc模块使用。adc 分频器町选择为2、4、6、8分频。在以上的时钟输岀屮,有很多是带使能控制的,例如ahb总线时钟、内核时 钟、各种apb1外设、apb2外设等等。当需耍使用某模块吋,记得一定耍先使能 对应的时钟。需要注意的是定吋器的倍频器,当apb的分频为1时,它的

8、倍频值为1,否 则它的倍频值就为2o连接在apb1 (低速外设)上的设备有:电源接口、备份接口、can、usb、i2c1、 i2c2、uart2、uart3、spi2、窗口看门狗、timer2> timcr3. timcr4o 注意 usb 模块虽然需要一个单-独的48mhz吋钟信号,但它应该不是供usb模块工作的吋钟, 而只是提供给出行接口引擎(sie)使用的时钟。usb模块工作的时钟应该是由 apb1提供的。连接在apb2(高速外设)上的设备有:uartk spi1、timcrk adck adc2、 所有普通10 口(pape)、第二功能10 口。对于单片机系统來说,cpu和总线以

9、及外设的时钟设置是非常重要的,因为 没有时钟就没有时序,组合电路能干什么想必各位心里都清楚。其实时钟的学习 这部分应该提前一些,但由于一开始时间比较短,有些急于求成,所以直接使用 了万利给的例程,姑且跳过了这一步。介于下而我计划要学习的任务都涉及到兆 级的高速传输,例如全速usb, dma等等,所以不能再忽略时钟啦,必须要仔细 研究一下。我学习rcc的参考资料:技术文档0427及其中文翻译版stm32f10xxx_library_manual_chinesev2的第十 五章和rm0008_cii参考手册。准备知识: 片上总线标准种类繁多,而rfl arm公司推出的amba片上总线受到了广人tp

10、开发 商和soc系统集成者的青睐,已成为一种流行的工业标准片上结构。amba规范 主要包括了 ahb (advanced high performance bus)系统总线和 apb (advanced peripheral bus)外围总线。二者分别适用于高速与相对低速设备的连接。曲于时钟是一个曲内而外的东西,具体设置要从寄存器开始。rcc寄存器结构,rcc_typedeff,在文件"stm32fl0x_map. hn中定义如下:typcdcf structvu32 cr;vu32 cfgr;vu32 cir;vu32 apb2rstr;vu32 apb1rstr;vu32 ahb

11、enr;vu32 apb2enr;vu32 apb1enr;vu32 bdcr;vu32 csr; rcc_typedef;这些寄存器的具体定义和使用方式参见芯片手册,在此不赘述,因为c语言的开 发可以不和他们直接打交道,当然如果能够加以理解和记忆,无疑是百利而无一 害。相信细心的朋友早就发现板子上只有8mhz的晶振,而增强型最高工作频率为 72mhz,显然需要用pll倍频9倍,这些设置都需要在初始化阶段完成。为了方 便说明,我借用一卜例程的rcc设置函数,并用中文注释的形式加以说明:、!"、!"、!"、!"、!"、!"、!"

12、;、!“、!“、!“、!“function name:set systemdescription:confinures main system clocks & powerinput:none.return:none.js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js js/在此指出上面的注释头应该是复制过来的,写错了不过没关系,反止没参 数需耍说明,重耍的是函数体。static void rcc_config(voi

13、d)/*这里是重置了 rcc的设置,类似寄存器复位*/rcc_deinit();/*使能外部高速晶振*/rcc_hseconfig (rcc_hse_0n);/*等待咼速晶振稳定*/hsestartupstatus 二 rcc_waitforhsestartup();if (hsestartupstatus 二二 success)/*使能flash预读取缓冲区*/flash_pref etchbuffercmd(flash_prefetchbuffer_enab1e);/*令flash处于等待状态,2是针对高频时钟的,这两句跟rcc没直接关系, 可以暂且略过*/flash sctlatcncy

14、 (flash latency 2);/* hclk二sysclk设置高速总线时钟二系统时钟*/rcc j iclkconf i g(rcc_sysclk_d i v1);/* pclk2二hclk设置低速总线2时钊匸高速总线时钟*/rcc pclk2config(rcc hclk divl);/* pclk1二hclk/2设置低速总线1的时钟二高速时钟的二分频*/rcc_pclklconfig(rccjiclk_div2);/* adcclk二pclk2/6设置adc外设时钟二低速总线2时钟的六分频*/rcc adcclkconfig(rcc pclk2 div6);/* set pel c

15、lock output to 72mhz using hse (8mhz) as entry clock */ 上而这句例程屮缺失了,但却很关键/*利用锁相环讲外部8mhz晶振9倍频到72mhz */rcc_pllconfig(rcc_pllsource_hse_divl, rcc_pllmul_9);/* enable pel使能锁相环*/rcc_pllcmd(enable);/* wait till pll is ready等待锁相环输出稳定*/wh订e (rcc_getflagstatus(rcc_flag_pllrdy) = reset)/* select pll as system

16、clock source将锁相环输出设置为系统时钟*/ rcc sysclkconfig(rcc sysclksourcc pllclk);/* wait till pll is used as system clock source 等待校验成功*/ while (rcc_getsysclksource() != 0x08)/* enable fsmc, gpiod, gpioe, gpiof, gpiog and afio clocks */ 使能外围接口总线吋钟,注意各外设的隶属情况,不同芯片的分配不同, 到时候查手册就可以rcc_ahbper i phc1ockcmd(rcc_ahbper i ph_fsmc, enable);rcc_apb2pcriphc1ockcmd(rcc_apb2pcriph_gpi0d | rcc_apb2pcriph_gpi0e rcc_apb2periph_gpi0f | rcc_apb2periph_gpi0g | rcc apb2pcriph afio, enable);由上述程序可以看出系统吋钟的设定是比较复杂的,外设越多,需要考虑的因素 就越多。同时这种设定也是有规律可循的,设定参数也是有顺序规范的,这是应 用中应当注意的,例如pll的设定需要在使能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论