STM8 时钟修改

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

系统功能

  对STM8的时钟修改,并用LED进行显示,观察LED的闪烁速度是否有变化。   

硬件设计


LED控制电路原理图

软件设计

/*********************************************************************
微 雪 电 子 WaveShare http://www.waveShare.net
目标系统: 基于STM8单片机
应用软件: Cosmic CxSTM8
说 明: 若用于商业用途,请保留此段文字或注明代码来源
深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权
*********************************************************************/

#include <STM8S207S8.h>
#define LED_PORT PB_ODR

void Init_GPIO(void)
{
       PB_DDR = 0x0d;
       PB_CR1 = 0x0d;
       PB_CR2 = 0x00;
}

void delay_ms(unsigned int ms)
{
       unsigned char i;
       while(ms!=0)
       {
              for(i=0;i<250;i++)
              {}
              for(i=0;i<75;i++)
              {}
              ms--;
       }
}
void main(void)
{
       unsigned char i;
       Init_GPIO();

       while (1)
       {
       //启用内部高速晶振且无分频16MHz
       CLK_SWCR|=0x02; //开启切换
       CLK_SWR=0xe1;
       while((CLK_SWCR & 0x01)==0x01);
       CLK_CKDIVR=0x00;
       CLK_SWCR&=(~0x02); //关闭切换
       for(i=0;i<10;i++)
       {
               LED_PORT=0xff;
              delay_ms(500);
              LED_PORT=(~0xff);
              delay_ms(500);
       }
       //启用内部高速晶振且8分频(内部始终分频)2MHz
       CLK_CKDIVR=0x18;
       for(i=0;i<5;i++)
       {
                LED_PORT=0xff;
              delay_ms(500);
              LED_PORT=(~0xff);
              delay_ms(500);
       }
       //启用外部高速晶振且16分频500KHz
       CLK_SWCR|=0x02; //开启切换
       CLK_SWR=0xb4;
       while((CLK_SWCR & 0x01)==0x01);
       CLK_CKDIVR=0x04;
       CLK_SWCR&=(~0x02); //关闭切换
       for(i=0;i<5;i++)
       {
              LED_PORT=0xff;
              delay_ms(500);
              LED_PORT=(~0xff);
              delay_ms(500);
       }
       //启用内部低速晶振且无分频
       CLK_SWCR|=0x02; //开启切换
       CLK_ICKR|=0x08; //使能内部低速晶振
       CLK_SWR=0xd2;
       while((CLK_SWCR & 0x01)==0x01);
       CLK_CKDIVR=0x00;
       CLK_SWCR&=(~0x02); //关闭切换
       for(i=0;i<5;i++)
       {
              LED_PORT=0xff;
              delay_ms(500);
              LED_PORT=(~0xff);
              delay_ms(500);
       }
       }
}


系统调试

观察观察LED的闪烁速度是否有明显的变化。

STM8 时钟修改

——