历史上的今天
返回首页

历史上的今天

今天是:2025年02月20日(星期四)

正在发生

2020年02月20日 | STM8S主时钟切换(使用HSE时钟源)

2020-02-20 来源:eefocus

使用的时钟切换方式为手动切换,在中断中进行时钟切换,然后将切换后的主时钟输出到CLK_CCO口


时钟切换流程图(手动切换流程图):

在这里插入图片描述

时钟树:

在这里插入图片描述

寄存器版:


unsigned char i=255;

 PD_DDR_DDR0=1;//配置PD0为输出模式

  PD_CR1_C10=1;//配置PD0为推挽模式

  PD_CR2_C20=1;//配置PD0输出最大为10Mhz

  

  if(CLK_CMSR==0xE1)   //如果HSI为主时钟源(复位值),切换到HSE

  {


    CLK_SWCR_SWIEN=1;//时钟切换中断使能

    CLK_SWR=0xB4;//HSE为主时钟源

    asm("rim");//开启全局中断

  }


    while(CLK_SWCR_SWBSY)//等待忙标志复位

  {

    i--;

    if(i==0) {

      CLK_SWCR_SWBSY=0;//如果时钟切换没有成功,清除标志位SWBSY以复位当前的切换操作

      break;

    }

    

  }

  while(CLK_CCOR_CC0BSY);//等待CCO时钟空闲 (0:CCO时钟空闲)

  CLK_CCOR_CCOSEL=0x0c;//配置时钟输出源选择Fhse

  CLK_CCOR_CCOEN=1;//使能CCO时钟输出

  

  while(1);

}


#pragma vector=CLK_SWITCH_vector

__interrupt void CLK_IRQHandler(void)

{

  CLK_SWCR_SWIF=0;//清除中断标志

   CLK_SWCR_SWEN=1;//使能时钟切换的执行

}


库函数版:

main.c文件


void main(void)

{

  CLK_DeInit();//重置时钟相关寄存器到默认复位值

  GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);//高速(10MHz)推挽高电平输出


  enableInterrupts();//使能全局中断


  ErrorStatus es;

  es = CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_HSE, ENABLE, CLK_CURRENTCLOCKSTATE_ENABLE);

  //手动切换;新的时钟源:HSE;启动切换中断;保持原时钟源开启

  if (es == SUCCESS)  //切换是否成功,SUCCESS or ERROR

  {

      CLK_CCOConfig(CLK_OUTPUT_MASTER);//配置时钟输出脚的时钟源:f(master)

      CLK_CCOCmd(ENABLE);//启动时钟输出功能

  };



  /* Infinite loop */

  while (1)

  {

  }

  

}


stm8s_it.c文件


INTERRUPT_HANDLER(CLK_IRQHandler, 2)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  

  ITStatus flags_tatus;

  flags_tatus = CLK_GetITStatus(CLK_IT_SWIF);//检测时钟切换中断标志

  if (flags_tatus == SET)  //如果时钟切换中断标志SWIF是置位状态,SET or RESET

  {

    CLK_ClearITPendingBit(CLK_IT_SWIF);//清除时钟切换中断标志

 

    CLK_ClockSwitchCmd(ENABLE);//启动时钟切换功能 

  };

}


结果:

在这里插入图片描述

推荐阅读

史海拾趣

Eutech公司的发展小趣事

在电源适配器和服务器电源市场,EUtech公司凭借技术创新迅速崛起。他们不断优化产品设计,提高产品性能,同时注重节能环保。随着下游AI行业的快速发展,公司及时抓住机遇,推出了一系列高性能、高可靠性的电源产品,赢得了市场的广泛认可。

HANA Micron公司的发展小趣事

随着线上及线下业务的快速增长,Hama面临着交货时效性的巨大挑战。为了应对这一挑战,公司决定在蒙海姆总部建造一座集仓储、拣选与发货一体的物流中心。该物流中心采用了先进的自动化和人工子系统相结合的设计方案,大大提高了物流运作的效率。新系统的启用使得Hama每天能够处理数以万计的订单,确保了产品的及时交付,进一步提升了客户满意度和品牌影响力。

EHC(ELECTRONICHARDWARE)公司的发展小趣事

随着环保意识的不断提高,绿色环保已经成为电子行业的发展趋势。EHC公司积极响应这一趋势,致力于研发和生产绿色环保的电子产品。公司采用环保材料和工艺,减少生产过程中的污染排放。同时,EHC公司还积极推动废旧电子产品的回收和再利用工作,为环保事业做出了积极贡献。这种对环保的关注和行动让EHC公司在行业中树立了良好的形象。

AntennaHome公司的发展小趣事

为了进一步提升品牌影响力和市场知名度,AntennaHome公司积极参与国际电子行业的各大展会。在展会上,公司展示了最新的天线技术和产品,吸引了众多国内外客户的关注。通过与客户的深入交流,公司不仅收获了宝贵的市场信息和合作机会,还进一步提升了品牌在行业内的地位。

Elektron公司的发展小趣事

Elektron公司的故事始于1942年,由威利·科伯以Elektron物理技术设备工厂Kerber的名称成立。当时,该公司主要生产基于汞蒸气整流器的固定电池电源和船用电池充电器。这些产品在市场上取得了良好的反响,为公司的发展奠定了坚实的基础。在随后的几年里,Elektron不断扩大产品范围,开始涉足汽车行业的电池充电器以及焊接和切割工艺的电源等领域。

Gulf Semiconductor公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Elektron公司不断进行技术创新和产品升级。公司成功开发出适用于船上使用的单点和多点焊接整流器以及弧光灯的电影整流器等产品,进一步扩大了市场份额。同时,Elektron还注重产品质量和性能的提升,通过引进先进的生产设备和工艺,不断提高产品的可靠性和耐用性。

问答坊 | AI 解惑

epm7128s OE1和GCLRn 怎么使用

7128S 的OE和clr怎么接,一般情况 。…

查看全部问答>

多用途DF无线数据收发模块的使用

详细资料见http://www.xie-gang.com/df.htm 电路图本已经剪辑了,但不会上传,所以大家还是去网站看吧。:L 我现在是想做个无线的遥控,用单片机控制的。 发射部分,我想应该是用一个I/O口输出电平的变化,比如01010011,那么我应该能看到发射后 ...…

查看全部问答>

一个RISC核一般是怎么开始启动执行

一个RISC核一般是怎么开始启动,如何执行送入它指令存储器中的经过汇编器编译过的二进制代码的呢?也就是硬件第一次取指从哪儿取?…

查看全部问答>

单片机不同频率方波信号怎么连续产生?

是这样的,我想做一个有连贯动作的机器人,机器人完成了一个动作之后再做下一个动作,每一步动作快慢不一样,我想产生这样的方波信号来控制步进电机。需要有这样的功能,首先由外部中断触发,计时器开始产生频率为f1的方波,f1完了之后产生频率f2的 ...…

查看全部问答>

Dell I6400 BIOS 驱动无法安装问题

高手帮忙啊,我电脑全格后重装后无法安装Dell I6400 BIOS A17驱动,因为我的电池出问题了,但AC adapter能正常使用,所以我不想去买块新的电池了,请问高手如何跳过电池检测而顺利安装BIOS A17?我用BIOS A14或其他更老版本的BIOS都不行,都要经过电池检测 ...…

查看全部问答>

关于设计单片机程序的问题

刚刚接触单片机,选修课结课老师要求我做出一个单片机的程序。老师要求不要特别简单的。 我想不出做什么,所以请教大家,我应该做什么实验呢?不要太复杂的,比方说关于以太网口的实验,我可以做什么啊?请大家帮我想想,如果有代码参考更好了。我 ...…

查看全部问答>

如何让wince5.0的系统支持运行.net2.0下用VS2005开发的程序?(定制系统内核)

请问怎么解决让wince5.0的系统支持运行.net2.0下用VS2005开发的程序,是直接安装PB5.0后定制的系统内核就支持吗? 我开始开发时装了VS2003和PB4.2,是支持.net1.0的程序在wince4.2上面运行的,但是装了VS2005和PB5.0后程序就不能支持运行了(vs200 ...…

查看全部问答>

一个简单电子钟调试

#include #define uchar unsigned char #define uint  unsigned int uchar code table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};   //位选,控制那个数码管亮。 uchar code table1[12]={0x03, 0x9f, 0x25, 0x0d, 0x ...…

查看全部问答>

初学者急问,怎么使STM32产生1μs的延时

                                 怎么使STM32产生1μs的延时?非常急!!!!…

查看全部问答>

WEBENCH培训资料

由TI大学计划工程师精心撰写的WEBENCH培训资料第一部分已经新鲜出炉,包括:WEBENCH 电源设计工具;电源选型;单电源设计;电源架构设计;FPGA/处理器电源设计 …

查看全部问答>