日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > stm32變更外部晶振時如何配置時鐘、以及HSI的使用

          stm32變更外部晶振時如何配置時鐘、以及HSI的使用

          作者: 時間:2016-11-17 來源:網絡 收藏
          由于stm32的庫默認是外部晶振8M的情況下實現的,所以配置串口波特率的時候也是按8M,包括主頻。
          如果采用外部晶振12M,配置時鐘為72MHZ。

          1)PLL倍頻這樣改:
          8M:
          RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72
          12M:
          RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);//12*6=72
          庫函數:voidRCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
          例:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);

          2)stm32f10x.h中修改:
          8M:
          #define HSE_Value ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
          12M:
          #define HSE_Value ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
          接下來說一下內部時鐘,內部時鐘是由RC振蕩產生的,精度不高。用內部時鐘產生的功耗更小,還可以節(jié)約印制板的空間,程序配置如下:
          void RCC_Configuration(void)
          {
          /* RCC system reset(for debug purpose) */
          RCC_DeInit();
          RCC_HSICmd(ENABLE); //打開內部高速時鐘
          //等待HSI準備好
          while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
          FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //開啟FLASH預取指功能
          //FLASH時序控制
          //推薦值:SYSCLK = 0~24MHz Latency=0
          // SYSCLK = 24~48MHz Latency=1
          // SYSCLK = 48~72MHz Latency=2
          FLASH_SetLatency(FLASH_Latency_2);
          RCC_HCLKConfig(RCC_SYSCLK_Div1); //設置HCLK(AHB時鐘)=SYSCLK
          RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2(APB2) = HCLK
          RCC_PCLK1Config(RCC_HCLK_Div1); //PCLK1(APB1) = HCLK
          //PLL設置 SYSCLK/2 * 12 = 4*12 = 48MHz
          RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
          //啟動PLL
          RCC_PLLCmd(ENABLE);//如果PLL被用于系統(tǒng)時鐘,不能被DISABLE
          //等待PLL穩(wěn)定
          while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){;}
          //設置系統(tǒng)時鐘SYSCLK = PLL輸出
          RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
          //等待PLL成功用作于系統(tǒng)時鐘的時鐘源,并等待穩(wěn)定
          // 0x00:HSI作為系統(tǒng)時鐘
          // 0x04:HSE作為系統(tǒng)時鐘
          // 0x08:PLL作為系統(tǒng)時鐘
          while(RCC_GetSYSCLKSource() != 0x08);
          }



          評論


          技術專區(qū)

          關閉