以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!
对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);
}
}
}
|
|
STM8 时钟修改
——