STM32时钟设置浅析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32时钟设置浅析

STM32时钟浅析 时钟设置是所有单片机编程首先要解决的问题,只有时钟理解正确了,以后的编程才会让程序达到事半功倍的效果,尤其是对于定时,通信 的设置是极为重要的。我在这里以个人之见,来理解void SystemInit (void) 函数的时钟设置问题,它的原函数是这样写的: void SystemInit (void) { /*以下语句都是对RCC_RC、RCC_CFGR和RCC_CIR寄存器给予赋值,配置相应位*/ /*! RCC system reset(for debug purpose) */ /*! Set HSION bit 复位值是83H 内部8M*/ RCC-CR |= (uint32_t)0//RCC_RC=0时钟中断寄存器使能 /*! Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], ADCPRE[1:0] and MCO[2:0] bits */ RCC-CFGR = (uint32_t)0xF8FF0000;//时钟配置寄存器RCC_CFGR=0x****0000; /*! Reset HSEON, CSSON and PLLON bits */ RCC-CR = (uint32_t)0xFEF6FFFF; /*! Reset HSEBYP bit */ RCC-CR = (uint32_t)0xFFFBFFFF; /*! Reset PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE bits */ RCC-CFGR = (uint32_t)0xFF80FFFF; /*! Disable all interrupts */ RCC-CIR = 0 //时钟中断寄存器RCC_CIR=0; /*! Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ /*! Configure the Flash Latency cycles and enable prefetch buffer */ SetSysClock(); } RCC-CR |= (uint32_t)0 就是时钟控制寄存器RCC_RC=0 查询STM32F10XX手册 可以得到如图所示: 可以看出该语句就是使RSION=1,也就是 1:内部8MHz时钟开启。 第二条语句:RCC-CFGR = (uint32_t)0xF8FF0000; //时钟配置寄存器RCC_CFGR=0x****0000; 查询手册可知: 也就是使后16位清零,即 SW:系统时钟切换为: 00:HSI作为系统时钟; SWS:系统时钟切换状态 00:HSI作为系统时钟; HPRE: AHB预分频 0xxx:SYSCLK不分频 PPRE1:低速APB预分频(APB1) 0xx:HCLK不分频 PPRE2:高速APB预分频(APB2) 0xx:HCLK不分频 ADCPRE:ADC预分频 00:PCLK2 2分频后作为ADC时钟 第三条语句:RCC-CR = (uint32_t)0xFEF6FFFF; //时钟控制寄存器RCC_RC=0x*E*6****; 就是说寄存器的第25位和第20位,第17位为0,其余保持不变。 也就是 PLLON=0:PLL使能 0:PLL关闭; CSSON=0:时钟安全系统使能 0:时钟监测器关闭; HSEON:外部高速时钟使能 0:HSE振荡器关闭; 第四条语句:RCC-CR = (uint32_t)0xFFFBFFFF; 就是使HSEBYP=0; 0:外部4-25MHz振荡器没有旁路; 这样,第五条语句:RCC-CFGR = (uint32_t)0xFF80FFFF;就很好理解了,RCC_CFGR的第23、22、21、 20、 19、 18、 17位都为0。查询手册即可以知道具体的设置。 最后一句 RCC-CIR = 0 //时钟中断寄存器RCC_CIR=0;就是使中断关闭的 。 当然配置还没有完,还需调用SetSysClock(); 进行具体设置。 static void SetSysClock(void) { #ifdef SYSCLK_FREQ_HSE SetSysClockToHSE(); #elif defined SYSCLK_FREQ_20MHz SetSysClockTo20(); #elif defined SY

文档评论(0)

sd7f8dgh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档