<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > stm8s時(shí)鐘源切換

stm8s時(shí)鐘源切換

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

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

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

主時(shí)鐘切換寄存器的復位值為0xe1,表示切換到內部的高速RC振蕩器上。當往該寄存器寫(xiě)入0xb4時(shí),表示切換到外部的高速晶體振蕩器上。

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

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

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

// 程序描述:通過(guò)切換CPU的主時(shí)鐘源,來(lái)改變CPU的運行速度

#include "STM8S207C_S.h"

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

// 輸入參數:ms -- 要延時(shí)的毫秒數,這里假設CPU的主頻為2MHZ

// 輸出參數:無(wú)

// 返 回 值:無(wú)

// 備 注:無(wú)

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設置成推挽輸出,以便推動(dòng)LED

PD_DDR = 0x08;

PD_CR1 = 0x08;

PD_CR2 = 0x00;

// 啟動(dòng)外部高速晶體振蕩器

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

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

// 注意,復位后CPU的時(shí)鐘源來(lái)自?xún)炔康腞C振蕩器

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

{

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

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

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

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

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

CLK_SWCR = CLK_SWCR & 0xFD; // 清除切換標志

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

{

PD_ODR = 0x08;

DelayMS(100);

PD_ODR = 0x00;

DelayMS(100);

}

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

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

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

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

CLK_SWR = 0xE1; // 選擇HSI為主時(shí)鐘源

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

CLK_SWCR = CLK_SWCR & 0xFD; // 清除切換標志

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

{

PD_ODR = 0x08;

DelayMS(100);

PD_ODR = 0x00;

DelayMS(100);

}

}

}



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

評論


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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>