1.图13可见,STM8S单片机主要有四种时钟源可供选择:
1).1-24MHz外部晶体振荡器(HSE).
2).最大24MHz外部时钟(HSE ext).
3).16MHz高速内部RC振荡器(HSI).
4).128KHz低速内部RC振荡器(LSI).
2.主时钟可以从这四种时钟源中任意切换,切换过程可通过自动切换和手动切换。
自动切换过程:使能相应的时钟源,使能切换,等待切换完成。
例如:从HSI切换到外部HSE,子程序如下:
void CLKToHSE(void)
{
while(!(CLK_ECKR&0x02)); //等待HSE就绪
CLK_ECKR |= 0x01; //使能HSE
CLK_SWCR |= 0x20; //使能切换
CLK_SWR = 0xB4; // (0xE1----HSI )
// (0xD2 ----LSI)
//(0xB4----HSE)
while(!(CLK_SWCR&0x01)); //等待时钟切换完成
CLK_ICKR &= ~0x01; //关闭HSI
}
手动切换:
手动切换和自动切换差不多,只是要等待时钟稳定后进行切换。
例如,HSI切换至内部LSI,子程序如下:
void CLKToLSI(void)
{
while(!(CLK_ICKR&0x10)); //等待LSI就绪
CLK_ICKR |= 0x08; //使能LSI
CLK_SWR = 0xD2; // (0xE1----HSI)
// (0xD2 ----LSI)
// (0xB4----HSE)
while(!(CLK_SWCR&0x08));
CLK_SWCR |= 0x20; //使能切换
CLK_ICKR &= ~0x01; //关闭HSI
}
3.时钟分频
HSI可通过CLK_CKDIVR的HSIDIV[1:0]分频。可选择分频因子1,2,4,8。
CPU时钟又可以通过CLK_CKDIVR的CPUDIV[2:0]分频。可选择分频比1,2,4,8,16,32,64,128。
外设时钟可通过CLK_PCKENR1,CLK_PCKENR2选择使能或关闭,复位情况下默认外设时钟全部打开,不熟悉
的情况下,可以选择默认,以防没有配置时钟而无法使用外设。关闭不必要的外设可以降低系统功耗。
另外还有时钟安全系统CSS,时钟输出,时钟中断,SWIM时钟控制,HSI时钟校准等,下次再讨论吧。