第二节 最小系统时钟.ppt_第1页
第二节 最小系统时钟.ppt_第2页
第二节 最小系统时钟.ppt_第3页
第二节 最小系统时钟.ppt_第4页
第二节 最小系统时钟.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

第二节最小系统,最小系统,最小系统指arm能够运行所需要的最基本的条件包括:电源,时钟源,复位电路,调试接口,arm处理器(自带128k闪存,20ksram),stm32f103vbt6,电源,时钟源,复位电路,调试,电源,芯片要求2.03.6v的操作电压(vdd)当主电源vdd关闭时,实时时钟(rtc)和备用寄存器可以从vbat供电为提高转换精度,adc可以有一个独立的电源供应,以不受pcb噪音的干扰,电源方案,电路由稳定的电源vdd供电如果使用adc,vdd的范围必须在2.4v到3.6v之间,否则为2v到3.6vvdd引脚必须连接到带外部稳定电容的vdd电源。(5个100nf的陶瓷电容和一个钽电容(最小值4.7f,典型值10f)vbat引脚必须被连接到外部电池(1.8vcr.hserdy);等待rcc-cfgr=0 x01;选择2、设置外部晶振提供pll作为系统时钟rcc-cr|=0 x00010000;使能hsewhile(!rcc-cr.hserdy);等待rcc-cr|=0 x01000000;使能pllwhile(!rcc-cr.pllrdy);等待rcc-cfgr=0 x10;选择pll,例:设置pll的时钟为48mhz分析:外部时钟为8m,因此,需要pll倍频6倍输出rcc-cfgr|=0 x00100000,时钟中断寄存器(rcc_cir)偏移地址:08h复位值:00000000h,apb2外设复位寄存器(rcc_apb2rstr)偏移地址:0ch复位值:00000000hapb1外设复位寄存器(rcc_apb1rstr)偏移地址:10h复位值:00000000hahb外设时钟使能寄存器(rcc_ahbenr)偏移地址:14h复位值:00000014h,ahb外设时钟使能寄存器(rcc_ahbenr)偏移地址:14h复位值:00000014hapb2外设时钟使能寄存器(rcc_apb2enr)偏移地址:18h复位值:00000000h访问:字,半字和字节访问apb1外设时钟使能寄存器(rcc_apb1enr)偏移地址:1ch复位值:00000000h,apb2外设时钟使能寄存器(rcc_apb2enr),例:使能usart1的时钟rcc-apb2enr|=0 x4000;同时使能usart1,sp1,tim1和adc2的时钟rcc-apb2enr|=0 x5b00;,备份域控制寄存器(rcc_bdcr)偏移地址:20h复位值:00000000h,只能由备份域复位有效复位,控制/状态寄存器(rcc_csr)偏移地址:24h复位值:0c000000h复位标志及低速时钟就绪使能控制,时钟安全系统(css)时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在hse振荡器启动延迟后被使能,并在hse时钟关闭后关闭。作用:如果hse时钟发生故障,此振荡器自动地被关闭,时钟失效事件将被送到高级定时器tim1的断路输入端,并产生时钟安全中断cssi,允许软件完成营救操作。此cssi中断被连接到cortex-m3nmi的中断。,注意:一旦css被激活,并且hse时钟出现故障,css中断就产生,并且nmi也自动产生。nmi将被不断执行,直到css中断挂起位被清除。因此,在nmi的处理程序中必须通过设置时钟中断寄存器(rcc_cir)里的cssc位来清除css中断。如果hse振荡器被直间或间接地作为系统时钟来用的话,(间接的意思是:它被作为pll输入时钟,并且pll时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到hsi振荡器,同时外部hse振荡器被关闭。在时钟失效时,如果hse振荡器时钟(被分频或未被分频)是用作系统时钟的pll的输入时钟,pll也将被关闭。,rcc库函数,rcc寄存器结构,rcc_typedeff,在文件“stm32f10 x_map.h”中定义如下:typedefstructvu32cr;vu32cfgr;vu32cir;vu32apb2rstr;vu32apb1rstr;vu32ahbenr;vu32apb2enr;vu32apb1enr;vu32bdcr;vu32csr;rcc_typedef;,rcc外设声明于文件“stm32f10 x_map.h”:#defineperiph_base(u32)0 x40000000)#defineapb1periph_baseperiph_base#defineapb2periph_base(periph_base+0 x10000)#defineahbperiph_base(periph_base+0 x20000)#definercc_base(ahbperiph_base+0 x1000).#ifdef_rcc#definercc(rcc_typedef*)rcc_base)#endif/*_rcc*/,rcc库函数,rcc库函数,使用hse时钟,程序设置时钟参数流程:,1、将rcc寄存器重新设置为默认值rcc_deinit;2、打开外部高速时钟晶振hsercc_hseconfig(rcc_hse_on);3、等待外部高速时钟晶振工作hsestartupstatus=rcc_waitforhsestartup();4、设置ahb时钟rcc_hclkconfig;5、设置高速apb时钟rcc_pclk2config;6、设置低速apb时钟rcc_pclk1config;7、设置pllrcc_pllconfig;8、打开pllrcc_pllcmd(enable);9、等待pll工作while(rcc_getflagstatus(rcc_flag_pllrdy)=reset)10、设置系统时钟rcc_sysclkconfig;11、判断,直到pll是系统时钟while(rcc_getsysclksource()!=0 x08)12、打开要使用的外设时钟rcc_apb2periphclockcmd()/rcc_apb1periphclockcmd(),实验三rcc时钟,主程序:intmain(void)#ifdefdebugdebug();#endif/*configurethesystemclockfrequency,hclk,pclk2andpclk1prescalers*/setsysclock();,实验三rcc时钟,voidsetsysclock(void)#ifdefinedsysclk_hsesetsysclocktohse();#elifdefinedsysclk_freq_20mhzsetsysclockto20();#elifdefinedsysclk_freq_36mhzsetsysclockto36();#elifdefinedsysclk_freq_48mhzsetsysclockto48();#elifdefinedsysclk_freq_72mhzsetsysclockto72();#endif/*ifnoneofthedefineaboveisenabled,thehsiisusedassystemclocksource(defaultafterreset)*/,/#definesysclk_hse/#definesysclk_freq_20mhz/#definesysclk_freq_36mhz/#definesysclk_freq_48mhz#definesysclk_freq_72mhz,rcc-cfgr|=0 x001c0000,实验三rcc时钟,voidsetsysclockto72(void)/*sysclk,hclk,pclk2andpclk1configuration-*/*rccsystemreset(fordebugpurpose)*/rcc_deinit();/*enablehse*/rcc_hseconfig(rcc_hse_on);/*waittillhseisready*/hsestartupstatus=rcc_waitforhsestartup();if(hsestartupstatus=success)/*enableprefetchbuffer*/flash_prefetchbuffercmd(flash_prefetchbuffer_enable);/*flash2waitstate*/flash_setlatency(flash_latency_2);/*hclk=sysclk*/rcc_hclkconfig(rcc_sysclk_div1);/*pclk2=hclk*/rcc_pclk2config(rcc_hclk_div1);,voidrcc_deinit(void)/*sethsionbit*/rcc-cr|=(u32)0 x00000001;/*resetsw1:0,hpre3:0,ppre12:0,ppre22:0,adcpre1:0andmco2:0bits*/rcc-cfgr,实验三rcc时钟,voidsetsysclockto72(void)/*sysclk,hclk,pclk2andpclk1configuration-*/*rccsystemreset(fordebugpurpose)*/rcc_deinit();/*enablehse*/rcc_hseconfig(rcc_hse_on);/*waittillhseisready*/hsestartupstatus=rcc_waitforhsestartup();if(hsestartupstatus=success)/*enableprefetchbuffer*/flash_prefetchbuffercmd(flash_prefetchbuffer_enable);/*flash2waitstate*/flash_setlatency(flash_latency_2);/*hclk=s

温馨提示

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

评论

0/150

提交评论