历史上的今天
今天是:2024年12月26日(星期四)
2019年12月26日 | stm8s开发(四) CLOCK的使用:时钟控制
2019-12-26 来源:eefocus
STM8S具有一个强大的时钟系统,内部提供一个高速16M的RC振荡器,和一个低速128K的RC振荡器。
时钟控制器功能强大而且灵活易用。其目的在于使用户在获得最好性能的同时,亦能保证消耗的功率最低。用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。
一般来说,时钟树是配置时钟、控制时钟的依据,所以需要掌握,以下是STM8S时钟树图:

从图中看出,一共有3个时钟源,分别是HSE(高速外部时钟)、HSI(高速内部时钟)、LSI(低速内部时钟)。
HSE(高速外部时钟)可通过外部晶振提供,HSI(高速内部时钟)为16M的RC振荡器,LSI(低速内部时钟)为128K的RC振荡器。
高速时钟(HSE和HSI)可以通过分频器进行降频。降频过后的时钟和原本的时钟都可以通过Master Clock Switch进行选择,
以下是初始化系统时钟的函数(默认使用16M内部RC):
void Set_HSISpeed(void)
{
//启用内部高速晶振且无分频16MHz
CLK_ICKR|=0x01; //开启内部HSI
while(!(CLK_ICKR&0x02));//HSI准备就绪
CLK_SWR=0xe1; //HSI为主时钟源
CLK_CKDIVR=0x00; //HSI不分频
}
如果需要切换时钟,需要先等待时钟稳定:
void Switch_LSISpeed(void)
{
CLK_SWCR|=0x02; //开启切换
CLK_ICKR|=0x08; //开启LSI
while(!(CLK_ICKR&0x10));//HSI准备就绪
CLK_SWR=0xd2; //LSR为主时钟源
while((CLK_SWCR & 0x01)==0x01);//等待切换完成
CLK_CKDIVR=0x00; //LSI不分频
CLK_SWCR&=(~0x02); //关闭切换
}
void Switch_HSISpeed(void)
{
CLK_SWCR|=0x02; //开启切换
CLK_ICKR|=0x01; //开启内部HSI
while(!(CLK_ICKR&0x02));//HSI准备就绪
CLK_SWR=0xe1; //HSI为主时钟源
while((CLK_SWCR & 0x01)==0x01);//等待切换完成
CLK_CKDIVR=0x00; //HSI不分频
CLK_SWCR&=(~0x02); //关闭切换
}
如果想直接降频,只需要设置始终分频:
void Set_CPU_Full_Speed(void)
{
CLK_CKDIVR=0x00; //HSI不分频
}
void Set_CPU_Low_Speed(void)
{
CLK_CKDIVR=0x07; //HSI 128分频
}
以上就是初始化时钟的代码,一般用于mian函数的第一句话,方便以后计算其他外设的时钟频率。
史海拾趣
|
74HC4051我供电的电源电压时9v 我想用高电平是3.3v的单片机c8051f350控制,高电平不够 怎么提高高电平电压那?数据手册显示9v供电时高电平最小是6.2v低电平最大2.7v … 查看全部问答> |
|
一、项目背景 在城市污水治理中,城市污水处理设施建设已提到了城市基础设施建设的突出位置,使城市污水处理设施建设进入了一个新的发展阶段。但目前全国各地对污染源和排污河渠的水质监测仍停留在手工监测阶段,难以反映企业及城市污水排放连 ...… 查看全部问答> |
|
今天是假期的最后一天,调试了7天的反激电源,头都大了,今天终于回来的早,写点当年的那些关于51的糗事儿也让大家在工作和学习之余乐呵乐呵。 不知道51是不是具有中国特色电子类课程中的亮点,不管你信不 ...… 查看全部问答> |
|
同事给我传过来一个nios工程,我在这里面加逻辑文件. 但是在singaltap加完信号后,编译完就显示program the device to continue 重新编译也不行,有遇到类似情况的前辈们请帮我分析分析啊,不胜感激!… 查看全部问答> |




