×
嵌入式 > 技术百科 > 详情

STM8 HSI与HSE自动切换时钟源

发布时间:2020-06-03 发布时间:
|

实验平台:思修电子工作室"祥云小王子"开发版


int main( void )

{

  PI_DDR_DDR0=1;//配置PI0端口为输出模式

  PI_CR1_C10=1; //配置PI0端口为推挽输出模式

  PI_CR2_C20=0; //配置PI0端口低速率输出

  led1=1; //PI0输出为高电平,D1熄灭

  while(1)

  {

    //************HSI->HSE时钟自动切换流程及注释说明************

    //如果CLK_CMSR中的主时钟源为HSI,则CLK_CMSR=0xE1

    //如果CLK_CMSR中的主时钟源为LSI,则CLK_CMSR=0xD2

    //如果CLK_CMSR中的主时钟源为HSE,则CLK_CMSR=0xB4

    if(CLK_CMSR!=0xB4)

    //判断主时钟状态寄存器CLK_CMSR中的主时钟源是否是HSE

    //若不是则进入if程序段

    {

      //1.首先要配置时钟切换使能位SWEN=1,使能切换过程

      CLK_SWCR|=0x02;//展开为二进制0000 0010 SWEN位=1

      //2.选择主时钟源,对主时钟切换寄存器CLK_SWR写入欲切换时钟

      CLK_SWR=0xB4;//配置CLK_CMSR中的主时钟源为HSE

      //3.等待时钟切换控制寄存器CLK_SWCR中的切换中断标志位SWIF=1

      while((CLK_SWCR & 0x08)==0);

      //4.清除相关标志位

      CLK_SWCR=0;

    }

    //************************************************************

    led();//图10.9所示【A】区域电平状态

    //************************************************************

    //************HSE->HSI时钟自动切换流程及注释说明************

    //如果CLK_CMSR中的主时钟源为HSI,则CLK_CMSR=0xE1

    //如果CLK_CMSR中的主时钟源为LSI,则CLK_CMSR=0xD2

    //如果CLK_CMSR中的主时钟源为HSE,则CLK_CMSR=0xB4

    if(CLK_CMSR!=0xE1)

    //判断主时钟状态寄存器CLK_CMSR中的主时钟源是否是HSI

    //若不是则进入if程序段

    {

      //1.首先要配置时钟切换使能位SWEN=1,使能切换过程

      CLK_SWCR|=0x02;//展开为二进制0000 0010 SWEN位=1

      //2.选择主时钟源,对主时钟切换寄存器CLK_SWR写入欲切换时钟

      CLK_SWR=0xE1;//配置CLK_CMSR中的主时钟源为HSI

      //3.等待时钟切换控制寄存器CLK_SWCR中的切换中断标志位SWIF=1

      while((CLK_SWCR & 0x08)==0);

      //4.清除相关标志位

      CLK_SWCR=0;

    }

    //************************************************************

    led();//图10.9所示【B】区域电平状态

    //************************************************************

  }

}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
分拣机器人的工作原理是什么