历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2021年10月09日 | STM8L时钟切换详解

发布者:Jikai 来源: eefocus关键字:STM8L  时钟切换  时钟源 手机看文章 扫描二维码
随时随地手机看文章

SMT8L的四大时钟源LSE,LSI,HSE,HSI,都可以作为系统时钟。


系统上电后,HSI/8作为默认系统时钟,启动完成后,用户可以切换系统时钟源。


切换分为自动切换和手动切换,没有太大的区别。


下面是自动切换的流程图,按照此流程图,编写程序,即可实现时钟切换。


只需要三步即可实现系统时钟切换:
①置位CLK_SWCR寄存器中的SWEN位,允许时钟切换
②向CLK_SWR中写数据,选择目标时钟源
③等待SWBSY清零,即等待时钟切换完成


时钟切换完成后,在主循环中翻转IO电平,通过测量IO口的输出频率,可以直观的看到切换时钟,系统时钟频率发生了变化。


本程序选择LSE(32.768KHz)作为系统时钟,时钟切换完成后,PC7翻转电平,使用逻辑分析可以测量到此时PC7的输出频率。如下图:

可以看到PC7输出频率为2.73KHz,并不是32.768KHz。这是因为,STM8L一个指令周期为二个时钟周期,同时翻转电平的程序,高电平时间需要3个指令周期,低电平时间同样为3个指令周期。所以最终测量到的IO输出频率为32.768KHz/2/6=2.730667KHz。如果选择的时钟源为16M(HSI),则最终测得的IO输出频率为16M/2/6=1.33M。要注意,系统时钟的分频器默认8分频,需要清零分频器,才满足此计算方式。


#include"iostm8l152c6.h"
/****************************************************************************************
*开发环境:IAR for stm8v6.5
*硬件平台:STM8L-DISCOVERY
*功能说明:本程序选择LSE(32.768KHz)作为系统时钟,时钟切换完成后,PC7翻转电平,使用逻辑分析可以测量到此时PC7的输出频率,最终测量到的IO输出频率为32.768KHz/2/6=2.730667KHz。
*作    者:茗风
****************************************************************************************/
/******************************************************************************************************
*  名    称:voidGPIO_Init(void)
*  功    能:初始化PC7为高速推挽输出
*  入口参数:无
*  出口参数:无
*  说    明:测量系统时钟频率的IO,测量到的频率是:目标时钟源/2/6
*  范    例:无
******************************************************************************************************/
void GPIO_Init(void)
{
  PC_CR1_C17  =1;//推挽输出
  PC_CR2_C27  =1;//高速输出
  PC_DDR_DDR7 =1;//PC4输出
//  PC_ODR_ODR7 =0;//输出低电平
}
/******************************************************************************************************
*  名    称:voidCLOCK_Init(void)
*  功    能:系统时钟切换为LSE,32.768KHz
*  入口参数:无
*  出口参数:无
*  说    明:
*  范    例:无
******************************************************************************************************/
void CLOCK_Init(void)
{
  CLK_CKDIVR =0x00;//CLK_CKDI,VR寄存器默认0x03分频值为8
//自动切换
  CLK_SWCR_SWEN =1;//允许切换时钟
  CLK_SWR =0x08;//写入一个八位的值,用于选择目标时钟源
  while(CLK_SWCR_SWBSY);//等待时钟切换完成
//手动切换
//  CLK_SWR =0x08;//写入一个八位的值,用于选择目标时钟源
//  while(!CLK_ECKR_LSERDY);//等待目标时钟源稳定
//  CLK_SWCR_SWEN =1;//允许切换时钟
  /*
*0x01:HSI selected as system clock source
*0x02:LSI selected as system clock source
*0x04:HSE selected as system clock source
*0x08:LSE selected as system clock source
  */
}
/******************************************************************************************************
*  名    称:int main(void)
*  功    能:通过PC4输出选择的时钟
*  入口参数:无
*  出口参数:无
*  说    明:因为STM8l discovery没有接外部高速晶振,所以没办法输出HSE,不要
*  范    例:无
******************************************************************************************************/
void main( void )
{
GPIO_Init();
CLOCK_Init();
while(1)
  {
    PC_ODR_ODR7 ^=1;
  }
}

关键字:STM8L  时钟切换  时钟源 引用地址:STM8L时钟切换详解

上一篇:STM8S学习笔记-关于时钟安全系统
下一篇:STM8S学习笔记-时钟控制1

推荐阅读

据科技日报报道,俄罗斯未来研究基金会项目组组长维克多·利特维年科表示,俄罗斯海上无人机“勇士号”计划2019年秋季开始亲临现场,研究太平洋底的马里亚纳海沟,并将从11000米深的地方进行直播。利特维年科说:“我们努力把图片变成在线传输。预计‘勇士号’将由两个仪器组成,信息通过基站输出,位于直径150公里处的仪器将收到信息。我们希望从马里亚纳...
相关研究显示,目前我国新能源汽车产业总体上对安全性认识不足,全链条中安全交互机制没有形成,导致了电动汽车安全事故频发,对消费者感观和产业发展都造成了负面影响。对此,汽车传感器供应商森萨塔科技日前推出了高可靠、长寿命的动力电池热失控智能监测方案,可对电池实现7×24小时监测并进行异常诊断。2019年1月10日,工信部正式将《电动汽车用动力蓄...
e星球·跨越20年线上跑步挑战赛”系列活动已于10月1日正式开启! 自跑团预报名通道开启以来,小慕已经收到了多达数十份“战队申请”,更有众多的小伙伴纷纷前来询问个人参与规则,想为即将到来的挑战赛热热身,小慕也是摩拳擦掌,就等着大赛开启。值此开赛前夕,“e星球官方跑团”正式宣布成团出道,诚邀诸位个人参赛者入团。 Step1:下载【悦跑圈】APPSte...
vivo近日举办了“芯之所像”主题影像技术分享会,正式公布了其自主研发的首款专业影像芯片——vivo V1。vivo表示,该影像芯片与手机SoC厂商进行深度合作,历时24个月、投入超300人研发。专业相机通过调节光圈大小来实现不同的景深效果,在拍摄微距、人像时,可以将拍摄对象从背景中凸显出来,以此形成良好的视觉效果。但作为便携设备的移动终端,显然没有...

史海拾趣

问答坊 | AI 解惑

等离子遭遇逼宫 大屏幕液晶失守一万元关口

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 每周一轮的京城彩电价格战打到上周末打出一个拐点:40英寸液晶跌破1万元大关,首次低于42英寸等离子价格线。失去价格优势的等离子阵营正面对液晶阵营的步步逼宫,“生存还是毁灭?”这已是等离 ...…

查看全部问答∨

motorola 锁相环PLL教材

很不错的资料,拿出来分享一下,回帖我再发新的内容…

查看全部问答∨

Windows CEnet的串口通讯类设计.pdf

Windows CEnet的串口通讯类设计.pdf…

查看全部问答∨

智能家居十大精选案例

为广大读者奉献了众多内容翔实,且各具特色的智能家居案例及解决方案,在此我们为大家精挑细选出其中最具代表性的十篇案例。      一;视得安罗格朗Axolute智能家居案例 二;Axolute智能家居DIY方案 Axolute智能家居 ...…

查看全部问答∨

关于wince5 串口中断服务函数SerialDispatchThread的疑问

在SerialDispatchThread函数中有下面语句,请问: /* Wait for the event that any serial port action creates.      */     while ( !pSerialHead->KillRxThread ) {         DEB ...…

查看全部问答∨

对ldr指令的疑惑

(1) adr         r0, _start                   /* 把_start的相对地址移到r0       */ ldr       & ...…

查看全部问答∨

串口驱动只能接收16字节,16字节后的数据丢失问题?

用wince下的串口驱动移植的。 写完测试的时候都是在16字节以内进行的,收发正常。现在PC端每次发送超过16字节的数据,我的WINCE设备这边只能收到16字节,每次发送超过16字节的就丢失了。 芯片用得是16554. 这个可能是什么原因啊? 很奇怪我把FIFO ...…

查看全部问答∨

C指针学习,求指点!

本人菜鸟一个,指针不是很好,是应该去好好研究《C与指针》呢,还是去边读代码边学习呢???望高手指点一二!在此谢过…

查看全部问答∨

MSP430f149技术讨论贴

本帖最后由 paulhyde 于 2014-9-15 04:05 编辑 欢迎各位在本贴讨论msp430f149使用的相关经验,需要149的相关资料,可以留言。LCD1602,1CD12864,ADC12,DAC7512,TTF2.4,PID,资料很多,  …

查看全部问答∨

UART1串口只能接收16个字节的数据,超过16个字节的数据全部丢失

void uart1IsrInit(void) {     INT16U usFdiv;         U1LCR  = 0x87;                           & ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved