<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32的RCC配置流程

          作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏

          STM32中有5個(gè)時(shí)鐘源:
          ①、HSI是高速內(nèi)部時(shí)鐘,RC震蕩器,頻率為 8MHz。
          ②、HSE是高速外部時(shí)鐘,可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4MHz~16MHz。
          ③、LSI是低速內(nèi)部時(shí)鐘,RC振蕩器,頻率為40kHz。
          ④、LSE是低速外部時(shí)鐘,接頻率為32.768kHz的石英晶體。
          ⑤、PLL為鎖相環(huán)倍頻輸出,其時(shí)鐘輸入源可選擇為HIS/2、HSE或HSE/2。倍頻可選擇為2~16倍,但其輸出頻率最大不得超過(guò)72MHz。
          系統(tǒng)時(shí)鐘SYSCLK,它是供STM32中絕大部分器件工作的時(shí)鐘源,系統(tǒng)時(shí)鐘可選擇為PLL輸出、HSI或者HSE。系統(tǒng)時(shí)鐘的做大頻率為72MHz,它通過(guò)AHB分頻器分頻后送給個(gè)模塊使用,AHB分頻器可選擇1、2、4、8、16、32、64、128、256、512分頻。AHB分頻器輸出的時(shí)鐘送給5大模塊使用:
          1.送給AHB總線、內(nèi)核、內(nèi)存和DMA使用的HCLK時(shí)鐘。
          2.通過(guò)8分頻后送給Cortex的系統(tǒng)定時(shí)器時(shí)鐘。
          3.直接送給Cortex的空閑運(yùn)行時(shí)鐘PCLK。
          4.送給APB1分頻器。APB1分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB1外設(shè)使用(PCLK1,最大頻率36MHz),另一路送給定時(shí)器(Timer)2、3、4倍頻器使用。該倍頻器可選擇1或者2倍頻,時(shí)鐘輸出供定時(shí)器2、3、4使用。
          5.送給APB2分頻器。APB2分頻器可選擇1、2、4、8、16分頻,其輸出一路供APB2外設(shè)使用(PCLK2,最大頻率72MHz),另一路送給定時(shí)器(Timer)1倍頻器使用。該倍頻器可選擇1或者2倍頻,時(shí)鐘輸出供定時(shí)器1使用。另外,APB2分頻器還有一路輸出供ADC分頻器使用,分頻后送給ADC模塊使用。ADC分頻器可選擇為2、4、6、8分頻。
          連接在APB1(低速外設(shè))上的設(shè)備有:電源接口、備份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看門(mén)狗、Timer2、Timer3、Timer4。
          連接在APB2(高速外設(shè))上的設(shè)備有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口、第二功能IO口。

          本次學(xué)習(xí)使用標(biāo)準(zhǔn)固件庫(kù)3.3.0

          void RCC_Configuration(void)
          {
          ErrorStatus HSEStartUpStatus;
          //SystemInit(); //完全可以使用此函數(shù)配置,但是為了學(xué)習(xí)先不用
          RCC_DeInit(); //復(fù)位RCC模塊的寄存器,復(fù)位成缺省值
          RCC_HSEConfig(RCC_HSE_ON); //開(kāi)啟HSE時(shí)鐘,用HSE的時(shí)鐘作為PLL的時(shí)鐘源
          HSEStartUpStatus = RCC_WaitForHSEStartUp(); //獲取HSE啟動(dòng)狀態(tài)
          if(HSEStartUpStatus == SUCCESS) //如果HSE啟動(dòng)成功
          {
          FLASH_PrefetchBufferCmd(ENABLE); //開(kāi)啟FLASH的預(yù)取功能
          FLASH_SetLatency(FLASH_Latency_2); //FLASH延遲2個(gè)周期
          RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置HCLK,PCLK2,PCLK1,PLL
          RCC_PCLK2Config(RCC_HCLK_Div1);
          RCC_PCLK1Config(RCC_HCLK_Div2);
          RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
          RCC_PLLCmd(ENABLE); //啟動(dòng)PLL
          while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
          {
          }//等待PLL啟動(dòng)完成
          RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //配置系統(tǒng)時(shí)鐘
          while(RCC_GetSYSCLKSource() !=0x80)
          {
          }//檢查是否將HSE 9倍頻后作為系統(tǒng)時(shí)鐘
          }
          }

          設(shè)置時(shí)鐘流程: 1.將RCC寄存器重新設(shè)置為默認(rèn)值     RCC_DeInit 2.打開(kāi)外部高速時(shí)鐘晶振HSE       RCC_HSEConfig(RCC_HSE_ON); 3.等待外部高速時(shí)鐘晶振工作       HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4.設(shè)置AHB時(shí)鐘             RCC_HCLKConfig; 5.設(shè)置高速APB2時(shí)鐘           RCC_PCLK2Config; 6.設(shè)置低速速APB1時(shí)鐘          RCC_PCLK1Config 7.設(shè)置PLL               RCC_PLLConfig 8.打開(kāi)PLL               RCC_PLLCmd(ENABLE); 9.等待PLL工作  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)  10.設(shè)置系統(tǒng)時(shí)鐘            RCC_SYSCLKConfig 11.判斷是否PLL是系統(tǒng)時(shí)鐘        while(RCC_GetSYSCLKSource() != 0x08) 12.打開(kāi)要使用的外設(shè)時(shí)鐘        RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()
          至此我們就將STM32的系統(tǒng)時(shí)鐘配置好了,系統(tǒng)時(shí)鐘72MHz,APH 72MHz,APB2 72MHz,APB1 32MHz,USB 48MHz其他至于ADC什么的先用不管,用到時(shí)再設(shè)置,本次只是大體先熟悉下STM32的時(shí)鐘配置流程,便于以后程序的編寫(xiě)


          關(guān)鍵詞: STM32RCC配置流

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();