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

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

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

          新聞中心

          stm8s時鐘源切換

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          STM8單片機(jī)的時鐘源非常豐富,芯片內(nèi)部既有16MHZ的高速RC振蕩器,也有128KHZ的低速RC振蕩器,外部還可以接一個高速的晶體振蕩器。在系統(tǒng)運行過程中,可以根據(jù)需要,自由地切換。單片機(jī)復(fù)位后,首先采用的是內(nèi)部的高速RC振蕩器,且分頻系數(shù)為8,因此CPU的上電運行的時鐘頻率為2MHZ。

          切換時鐘源,主要涉及到的寄存器有:主時鐘切換寄存器CLK_SWR和切換控制寄存器CLK_SWCR。

          本文引用地址:http://yuyingmama.com.cn/article/201611/315604.htm

          主時鐘切換寄存器的復(fù)位值為0xe1,表示切換到內(nèi)部的高速RC振蕩器上。當(dāng)往該寄存器寫入0xb4時,表示切換到外部的高速晶體振蕩器上。

          在實際切換過程中,應(yīng)該先將切換控制寄存器中的SWEN(第1位)設(shè)置成1,然后設(shè)置CLK_SWCR的值,最后要判斷切換控制寄存器中的SWIF標(biāo)志是否切換成功。

          下面的實驗程序首先將主時鐘源切換到外部的晶體振蕩器上,振蕩頻率為8MHZ,然后,然后快速閃爍LED指示燈。接著,將主時鐘源又切換到內(nèi)部的振蕩器上,振蕩頻率為2MHZ,然后再慢速閃爍LED指示燈。通過觀察LED指示燈的閃爍頻率,可以看到,同樣的循環(huán)代碼,由于主時鐘源的改變的改變,閃爍頻率和時間長短都發(fā)生了變化。

          同樣還是利用ST的開發(fā)工具,生成一個C語言程序的框架,然后修改其中的main.c,修改后的代碼如下。

          // 程序描述:通過切換CPU的主時鐘源,來改變CPU的運行速度

          #include "STM8S207C_S.h"

          // 函數(shù)功能:延時函數(shù)

          // 輸入?yún)?shù):ms -- 要延時的毫秒數(shù),這里假設(shè)CPU的主頻為2MHZ

          // 輸出參數(shù):無

          // 返 回 值:無

          // 備 注:無

          void DelayMS(unsigned int ms)

          {

          unsigned char i;

          while(ms != 0)

          {

          for(i=0;i<250;i++)

          {

          }

          for(i=0;i<75;i++)

          {

          }

          ms--;

          }

          }

          main()

          {

          int i;

          // 將PD3設(shè)置成推挽輸出,以便推動LED

          PD_DDR = 0x08;

          PD_CR1 = 0x08;

          PD_CR2 = 0x00;

          // 啟動外部高速晶體振蕩器

          CLK_ECKR = 0x01; // 允許外部高速振蕩器工作

          while((CLK_ECKR & 0x02) == 0x00); // 等待外部高速振蕩器準(zhǔn)備好

          // 注意,復(fù)位后CPU的時鐘源來自內(nèi)部的RC振蕩器

          for(;;) // 進(jìn)入無限循環(huán)

          {

          // 下面將CPU的時鐘源切換到外部的高速晶體振蕩器上,在開發(fā)板上的頻率為8MHZ

          // 通過發(fā)光二極管,可以看出,程序運行的速度確實明顯提高了

          CLK_SWCR = CLK_SWCR | 0x02; // SWEN <- 1

          CLK_SWR = 0xB4; // 選擇芯片外部的高速振蕩器為主時鐘

          while((CLK_SWCR & 0x08) == 0); // 等待切換成功

          CLK_SWCR = CLK_SWCR & 0xFD; // 清除切換標(biāo)志

          for(i=0;i<10;i++) // LED高速閃爍10次

          {

          PD_ODR = 0x08;

          DelayMS(100);

          PD_ODR = 0x00;

          DelayMS(100);

          }

          // 下面將CPU的時鐘源切換到內(nèi)部的RC振蕩器上,由于CLK_CKDIVR的復(fù)位值為0x18

          // 所以16MHZ的RC振蕩器要經(jīng)過8分頻后才作為主時鐘,因此頻率為2MHZ

          // 通過發(fā)光二極管,可以看出,程序運行的速度確實明顯下降了

          CLK_SWCR = CLK_SWCR | 0x02; // SWEN <- 1

          CLK_SWR = 0xE1; // 選擇HSI為主時鐘源

          while((CLK_SWCR & 0x08) == 0); // 等待切換成功

          CLK_SWCR = CLK_SWCR & 0xFD; // 清除切換標(biāo)志

          for(i=0;i<10;i++) // LED低速閃爍10次

          {

          PD_ODR = 0x08;

          DelayMS(100);

          PD_ODR = 0x00;

          DelayMS(100);

          }

          }

          }



          關(guān)鍵詞: stm8s時鐘源切

          評論


          技術(shù)專區(qū)

          關(guān)閉