×
嵌入式 > 技术百科 > 详情

STM8学习-内部时钟切换

发布时间:2020-06-03 发布时间:
|
在STM8内部有时钟切换功能,可以在需要时变换时钟的频率。板子为STM8_Discovery,LED为PD0。

程序如下:

//软件环境:IAR FOR STM8 V1.0
//作者:Nicole

//功能:STM8的内部时钟分频切换
//日期:2010.11.04
#include "iostm8s105c6.h"

// 函数功能:延时函数
// 输入参数:ms -- 要延时的毫秒数,这里假设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;  // 设置PD0为推挽输出
  PD_CR2 = 0x00;
}

//时钟初始化
void CLK_init(void)
{
  CLK_SWR = 0xE1;   // 选择芯片内部的16MHZ的RC振荡器为主时钟
}
main()
{
  int i;
  GPIO_init();
  CLK_init();
  while(1)                     // 进入无限循环                             
  {
 
    // 下面设置CPU时钟分频器,使得CPU时钟=主时钟/4
    // 通过发光二极管,可以看出,程序运行的速度确实明显下降了
    CLK_CKDIVR = 0x1A;         // 主时钟 = 16MHZ/8= 2MHz
                               // CPU时钟 = 主时钟 / 4  = 500KHZ
    for(i=0;i<10;i++)
    {
      PD_ODR = 0x01;
      DelayMS(100);
      PD_ODR = 0x00;
      DelayMS(100);
    }
       // 下面设置CPU时钟分频器,使得CPU时钟=主时钟
      CLK_CKDIVR = 0x0A;         // 主时钟 = 16MHZ/2 =8MHz
                              // CPU时钟 = 主时钟/4 = 2MHZ
    for(i=0;i<10;i++)
    {
     PD_ODR = 0x01;
     DelayMS(100);
     PD_ODR = 0x00;
     DelayMS(100);
    }
  }

}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展