首页 > 学院 > 开发设计 > 正文

STM8 时钟源切换

2019-11-08 03:12:27
字体:
来源:转载
供稿:网友

STM8时钟源:

1、1~24MHz的高速外部晶体振荡器(HSE),即外部晶振 2、1~24MHz的高速外部时钟信号(HSE), 3、16MHz的高速内部RC振荡器(HSI) 4、128KHz的低速内部RC振荡器(LSI) 时钟框图

默认时钟源:

由上述时钟框图,可以分析得知,16MHz HSI RC振荡器经过一个分频器,将时钟信号输出到主时钟选择器。单片机上电后默认该分频器的值为8分频,即单片机上电主时钟默认使用HSI 8分频后的时钟输出,即主时钟频率fmaster=16MHz/8=2MHz,然后由主时钟输出时钟信号到外设和CPU。

时钟源选择:

可以通过读取主时钟状态寄存器CLK_CMSR来获取当前主时钟是采用的哪一个时钟源。 主时钟状态寄存器 既然可以知道当前使用的是哪一个时钟源了,那么怎么切换呢?就需要操作主时钟切换寄存器CLK_SWR和切换控制寄存器CLK_SWCR了,先看CLK_SWCR寄存器: 主时钟切换控制寄存器 用到了低四位,切换忙标志位SWBSY,切换使能位SWEN,切换中断使能位SWIEN和时钟切换中断标志位SWIF。 而向主时钟切换寄存器CLK_SWR写入数据可以指定要切换的时钟源: 主时钟切换寄存器

在开始切换时钟时,需要首先置位SWEN,使能时钟切换然后等待时钟切换事件发生,然后机制时钟切换即可,具体实现代码如下(我这里切换到HSE时钟源):

if(CLK_CMSR !=0xB4){ //如果当前时钟不是使用外部HSE时钟源 CLK_SWCR |=0x02; //使能时钟切换 CLK_SWR = 0xB4; //切换时钟, while((CLK_SWCR & 0x08)==0);//等待时钟切换完成 CLK_SWCR &=~0x02;//禁止时钟切换 }

在调试时,代码执行完成之后,如果CLK_CMSR的值为0xB4则时钟源切换成功。

这里附上一个例程,实现功能为:STM8时钟源切换时钟到HSE(8MHz),然后在主函数中循环打印一串字符串到PC机,例程地址为:http://download.csdn.net/detail/yuanquanzheng/9756971 另外我的编译环境使用的是IAR for STM8


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表