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函数的第一句话,方便以后计算其他外设的时钟频率。
共射放大电路参数确定方案解析
魅族Flyme6:就一个字“美”
NVIDIA重磅发布专门的矿卡—CMP HX系列
Amazon 跨足智能电视机,与中国厂商携手推出 4K 电视
集合四种功能,我的“双核独显”电源制作过程
STM8S时钟系统的时钟初始化函数实现
机器视觉在制造业的应用
外夹式超声波流量计的设计选型、实际应用及注意事项
人工智能时代怎样避免成为“透明人”
小米Max评测 卖点十分粗暴
“碳”秘博世等离子涂层技术
电动汽车推动动力电池飞速发展 中日韩竞争日趋激烈!
无人机市场进入“白热化”状态,大疆稳扎稳打占据主动
阿里的物联网核心yunos为什么选择HP入局笔记本
4G-Zigbee智能网关产品方案介绍
承德科胜组合秤包装机|水饺自动包装机|河北包装机
基于混合云计算服务的一站式解决方案
无锡建成自动驾驶专用封闭高速公路测试环境
四月份芯片市场涨价厂商一览
关于投资收益的技术策略的介绍和应用