新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8學(xué)習(xí)-內(nèi)部時(shí)鐘切換

STM8學(xué)習(xí)-內(nèi)部時(shí)鐘切換

作者: 時(shí)間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
STM8內(nèi)部有時(shí)鐘切換功能,可以在需要時(shí)變換時(shí)鐘的頻率。板子為STM8_Discovery,LED為PD0。

程序如下:

本文引用地址:http://butianyuan.cn/article/201611/321588.htm

//軟件環(huán)境:IAR FOR STM8 V1.0
//作者:Nicole

//功能:STM8的內(nèi)部時(shí)鐘分頻切換
//日期:2010.11.04
#include "iostm8s105c6.h"

// 函數(shù)功能:延時(shí)函數(shù)
// 輸入?yún)?shù):ms -- 要延時(shí)的毫秒數(shù),這里假設(shè)CPU的主頻為2MHZ
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms--;
}
}

//GPIO口初始化
void GPIO_init(void)
{
PD_DDR = 0x01;// 配置PD端口的方向寄存器PD0輸出
PD_CR1 = 0x01;// 設(shè)置PD0為推挽輸出
PD_CR2 = 0x00;
}

//時(shí)鐘初始化
void CLK_init(void)
{
CLK_SWR = 0xE1;// 選擇芯片內(nèi)部的16MHZ的RC振蕩器為主時(shí)鐘
}
main()
{
int i;
GPIO_init();
CLK_init();
while(1)// 進(jìn)入無限循環(huán)
{

// 下面設(shè)置CPU時(shí)鐘分頻器,使得CPU時(shí)鐘=主時(shí)鐘/4
// 通過發(fā)光二極管,可以看出,程序運(yùn)行的速度確實(shí)明顯下降了
CLK_CKDIVR = 0x1A;// 主時(shí)鐘 = 16MHZ/8= 2MHz
// CPU時(shí)鐘 = 主時(shí)鐘 / 4= 500KHZ
for(i=0;i<10;i++)
{
PD_ODR = 0x01;
DelayMS(100);
PD_ODR = 0x00;
DelayMS(100);
}
// 下面設(shè)置CPU時(shí)鐘分頻器,使得CPU時(shí)鐘=主時(shí)鐘
CLK_CKDIVR = 0x0A;// 主時(shí)鐘 = 16MHZ/2 =8MHz
// CPU時(shí)鐘 = 主時(shí)鐘/4 = 2MHZ
for(i=0;i<10;i++)
{
PD_ODR = 0x01;
DelayMS(100);
PD_ODR = 0x00;
DelayMS(100);
}
}

}



關(guān)鍵詞: STM8內(nèi)部時(shí)

評(píng)論


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

關(guān)閉