×
嵌入式 > 嵌入式开发 > 详情

stm8s开发(四) CLOCK的使用:时钟控制!

发布时间:2020-06-15 发布时间:
|

STM8S具有一个强大的时钟系统,内部提供一个高速16M的RC振荡器,和一个低速128K的RC振荡器。

 

时钟控制器功能强大而且灵活易用。其目的在于使用户在获得最好性能的同时,亦能保证消耗的功率最低。用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。

一般来说,时钟树是配置时钟、控制时钟的依据,所以需要掌握,以下是STM8S时钟树图:

从图中看出,一共有3个时钟源,分别是HSE(高速外部时钟)、HSI(高速内部时钟)、LSI(低速内部时钟)。

HSE(高速外部时钟)可通过外部晶振提供,HSI(高速内部时钟)为16M的RC振荡器,LSI(低速内部时钟)为128K的RC振荡器。

高速时钟(HSE和HSI)可以通过分频器进行降频。降频过后的时钟和原本的时钟都可以通过Masterxa0Clockxa0Switch进行选择,

以下是初始化系统时钟的函数(默认使用16M内部RC):

voidxa0Set_HSISpeed(void)

{

//启用内部高速晶振且无分频16MHz

CLK_ICKR|=0x01;xa0//开启内部HSI

while(!(CLK_ICKR&0x02));//HSI准备就绪

CLK_SWR=0xe1;xa0//HSI为主时钟源

CLK_CKDIVR=0x00;xa0//HSI不分频

}

如果需要切换时钟,需要先等待时钟稳定:

voidxa0Switch_LSISpeed(void)

{

CLK_SWCR|=0x02;xa0//开启切换

CLK_ICKR|=0x08;xa0//开启LSI

while(!(CLK_ICKR&0x10));//HSI准备就绪

CLK_SWR=0xd2;xa0//LSR为主时钟源

while((CLK_SWCRxa0&xa00x01)==0x01);//等待切换完成

CLK_CKDIVR=0x00;xa0//LSI不分频

CLK_SWCR&=(~0x02);xa0//关闭切换

}

voidxa0Switch_HSISpeed(void)

{

CLK_SWCR|=0x02;xa0//开启切换

CLK_ICKR|=0x01;xa0//开启内部HSI

while(!(CLK_ICKR&0x02));//HSI准备就绪

CLK_SWR=0xe1;xa0//HSI为主时钟源

while((CLK_SWCRxa0&xa00x01)==0x01);//等待切换完成

CLK_CKDIVR=0x00;xa0//HSI不分频

CLK_SWCR&=(~0x02);xa0//关闭切换

}

如果想直接降频,只需要设置始终分频:

voidxa0Set_CPU_Full_Speed(void)

{

CLK_CKDIVR=0x00;xa0//HSI不分频

}

voidxa0Set_CPU_Low_Speed(void)

{

CLK_CKDIVR=0x07;xa0//HSIxa0128分频

}

以上就是初始化时钟的代码,一般用于mian函数的第一句话,方便以后计算其他外设的时钟频率。

附上stm8s在IAR环境下的项目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。

/zixunimg/eepwimg/download.csdn.net/detail/devintt/9454188



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

热门文章 更多
发明专利在疫情影响下的逆势增长