STM8 HSI与HSE自动切换时钟源

发布者:机械梦想家最新更新时间:2019-08-24 来源: eefocus关键字:STM8  HSI  HSE  自动切换  时钟源 手机看文章 扫描二维码
随时随地手机看文章

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


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】区域电平状态

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

  }

}

关键字:STM8  HSI  HSE  自动切换  时钟源 引用地址:STM8 HSI与HSE自动切换时钟源

上一篇:STM8L在使用模拟IIC编程时遇到__iar_unhandled_exception的问题
下一篇:HR202湿敏电阻总结与程序整理

推荐阅读最新更新时间:2024-11-02 13:12

用IAR编译STM8单片机报警告
警告图片: 由警告提示可知,有一个编译选项执行失败了,但是我们仍然可以继续去执行代码 【 就像是你点了一份盖浇饭,和服务员说你要微辣,结果上来后你发现你的盖浇饭是不辣的,而这并不影响你继续享受盖浇饭,你同样可以吃的饱! 但是对于我这样的强迫症来说,这样吃起来就不香了,所以我还是得手动去加点辣椒才行。】 怎样才能吃的香呢? 第一步: 第二步: 第三步:重新编译- 下载,你会发现没有了警告! 到此,就是我的解决办法! 希望你也能早点解决
[单片机]
用IAR编译<font color='red'>STM8</font>单片机报警告
STM8 4线驱动1602乱码
近段时间用STM8驱动1602,采用4线方式,首次上电出现乱码,现在网上找到解决方法,做此总结。 网上大佬分析,出现乱码原因是在单片机发送0x28初始化时,高4位发送就已经完成初始化,低4位发送导致出现乱码,需要延时后再初始化可解决。这位大佬提供的方法确实可以解决问题,但感觉问题应该不在这,具体原因还没得出。 #include iostm8s105k4.h #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef
[单片机]
自动量程切换电压测量系统设计
自动量程切换电压测量系统设计 在电子系统设计调试过程中,电压测量往往是一个测控或测量系统中不可缺的项目。对于电压测量,若其在一个小动态范围内变化,则无论电平高低,要做到精确测量并不困难。但当被测量在宽动态范围内变化时,例如从mV级甚至μV级到V级,做到测量误差均匀的控制在一定范围之内,常用的方式是切换量程,即指定测量范围,例如常用的数字电压表等仪器。然而在许多情况下为了保证测量的实时性,测量时不可能变换测量通道的量程,因此要在整个电压变化范围内做到精确测量就凸显出其重要性。本文基于MCU AT89C51控制,实现了一种自动量程切换的电压测试系统。 1 电压测量原理及系统组成 为了对不同量级的电压信号进行测量,对输入信号
[模拟电子]
<font color='red'>自动</font>量程<font color='red'>切换</font>电压测量系统设计
IAR STM8工程中断的使用
IAR的工程建立比较简单,直接先建立工作区然后保存,不保存无法调试。把官方的INC放到工程目录下,在C/C++编辑连接包含这个文件的绝对路径(最简单的搞法)。把c文件添加进去就可以了,它的中断很简单你只要写一个如下的.c文件就能用了: #pragma vector=1 __interrupt void TRAP_IRQHandler(void) { } #pragma vector=2 __interrupt void TLI_IRQHandler(void) { } #pragma vector=3 __interrupt void AWU_IRQHandler(void) { } #pragma vector=
[单片机]
STM8 寄存器操作GPIO
硬件平台:stm8s103 编译环境:IAR for stm8 #include iostm8s103f3.h #include intrinsics.h int main(void) { // 初始化端口D. PD_ODR_ODR4 = 0; //PD4输出低电平 PD_DDR_DDR4 = 1; //设置D端口,位4输出 PD_CR1_C14 = 1; //引脚设置为上拉输出 PD_CR2_C24 = 1; //设置10MHz输出(翻转速度) while (1) { PD_ODR_ODR4 = 1; // PD4输出高电平 // PD_O
[单片机]
STM32F30X时钟初始化为HSI 64Mhz,并使用PLLCLK作为系统时钟
void SYSCLK_Config_HSI_64Mhz(void) { __IO uint32_t StartUpCounter = 0, HSIStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* Enable HSI */ RCC- CR |= ((uint32_t)RCC_CR_HSION); /* Wait till HSI is ready and if Time out is reached exit */ do {
[单片机]
STM8学习-内部时钟切换
在STM8内部有时钟切换功能,可以在需要时变换时钟的频率。板子为STM8_Discovery,LED为PD0。 程序如下: //软件环境:IAR FOR STM8 V1.0 //作者:Nicole //功能:STM8的内部时钟分频切换 //日期:2010.11.04 #include iostm8s105c6.h // 函数功能:延时函数 // 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ void DelayMS(unsigned int ms) { unsigned char i; while(ms != 0) { for(i=0;i 250;i++) { }
[单片机]
STM32高级定时器之时钟源
1、定时器时钟源框图 从图片中可以看到定时器有4个时钟源, (1)内部时钟 ;(2) 外部时钟模式1,定时器的通道1、2 ; (3) 外部时钟模式模式2 ,ETR脚 ; (4)内部触发输入 下面分别介绍这几种时钟源的详细配置 2、内部时钟 寄存器SMCR的SMS选择000 3、外部时钟模式1 中文手册已经有以通道2为例子详细说明,这里我以通道1来说明,算是对它的温故和补充 3.1 滤波器设置,我的理解这里的滤波,比如我这里配置为0001,不是说通道来了N=2个脉冲才算这个输入有效,而是脉冲到来后,延时N/Fsampling的时间,还是高电平,就认为这个脉冲有效 类似按键检测的延时去抖动,如果理解
[单片机]
STM32高级定时器之<font color='red'>时钟源</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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