STM8S学习笔记-时钟控制1

发布者:MysticJourney最新更新时间:2021-10-09 来源: eefocus关键字:STM8S  时钟源 手机看文章 扫描二维码
随时随地手机看文章

1.图13可见,STM8S单片机主要有四种时钟源可供选择:

1).1-24MHz外部晶体振荡器(HSE).

2).最大24MHz外部时钟(HSE ext).

3).16MHz高速内部RC振荡器(HSI).

4).128KHz低速内部RC振荡器(LSI).


2.主时钟可以从这四种时钟源中任意切换,切换过程可通过自动切换和手动切换。

自动切换过程:使能相应的时钟源,使能切换,等待切换完成。

例如:从HSI切换到外部HSE,子程序如下:

void CLKToHSE(void)

{

    while(!(CLK_ECKR&0x02));  //等待HSE就绪

    CLK_ECKR  |= 0x01;   //使能HSE

    CLK_SWCR |= 0x20;    //使能切换

    CLK_SWR = 0xB4; //  (0xE1----HSI )

                               // (0xD2 ----LSI)

                             //(0xB4----HSE)

    while(!(CLK_SWCR&0x01));  //等待时钟切换完成

    CLK_ICKR &= ~0x01;     //关闭HSI

}

手动切换:

手动切换和自动切换差不多,只是要等待时钟稳定后进行切换。

例如,HSI切换至内部LSI,子程序如下:

void CLKToLSI(void)

{

    while(!(CLK_ICKR&0x10));  //等待LSI就绪

    CLK_ICKR |= 0x08;   //使能LSI

     CLK_SWR = 0xD2; //  (0xE1----HSI)

                                // (0xD2 ----LSI)

                               //  (0xB4----HSE)

     while(!(CLK_SWCR&0x08));

    CLK_SWCR |= 0x20;    //使能切换

    CLK_ICKR &= ~0x01;     //关闭HSI

}


3.时钟分频

HSI可通过CLK_CKDIVR的HSIDIV[1:0]分频。可选择分频因子1,2,4,8。

CPU时钟又可以通过CLK_CKDIVR的CPUDIV[2:0]分频。可选择分频比1,2,4,8,16,32,64,128。


外设时钟可通过CLK_PCKENR1,CLK_PCKENR2选择使能或关闭,复位情况下默认外设时钟全部打开,不熟悉的情况下,可以选择默认,以防没有配置时钟而无法使用外设。关闭不必要的外设可以降低系统功耗。


另外还有时钟安全系统CSS,时钟输出,时钟中断,SWIM时钟控制,HSI时钟校准等,下次再讨论吧。

关键字:STM8S  时钟源 引用地址:STM8S学习笔记-时钟控制1

上一篇:STM8L时钟切换详解
下一篇:【STM8单片机】---时钟配置小感悟

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

STM8S TIM4 初始化设置
#define TIM4_DIV1 (unsigned char)0 #define TIM4_DIV2 (unsigned char)1 #define TIM4_DIV4 (unsigned char)2 #define TIM4_DIV8 (unsigned char)3 #define TIM4_DIV16 (unsigned char)4 #define TIM4_DIV32 (unsigned char)5 #define TIM4_DIV64 (unsigned char)6 #define TIM4_DIV128 (unsigned char)7 #define TIM4_C
[单片机]
STM8S内部时钟切换问题解决
/* ********************************************************************************************************************************** * Name : STM8S内部时钟切换问题解决 * Author : MingMing * Release : 2013/12/28 * Update : 2013/12/29 * E-mail : clint.wang@foxmail.com ************************************************************
[单片机]
<font color='red'>STM8S</font>内部时钟切换问题解决
STM8S---IO复用配置(STVP方式)
1 说明 STM8S的IO复用用程序代码配置起来比较麻烦,一般是操作flash来操作option byte字节,配置寄存器更加麻烦,可以使用STM 标准外设驱动库来设置。本文使用一种界面配置的方式来配置IO复用管脚,即使用STVP来配置。 因为FLASH保存的数据是掉电不丢失的,先用STVP把Option Bytes擦写好后,再用STVD仿真器烧写程序就可实现IO复用了。    程序方式配置IO复用见这里 2 配置流程 【step1】打开STVP软件 【step2】打开我们需要下载的xxx.s19文件,CTRL+F5(File- Ram Exec) 【step3】配置需要复用的引脚 IO口的复用功能主要配置
[单片机]
STM8S_002_TIM精确延时 (阻塞式)
建议下载PDF和Demo软件工程学习 写在前面 Ⅰ 在某些特定场合,需要精确的延时(us级),特别是底层驱动。如果使用软件延时,延时会随系统时钟改变及各种因素影响而改变。因此,就需要使用TIM精确延时。 阻塞式延时:从延时开始至结束,程序一直阻塞在那里,不会跳转到其他地方(除中断)执行程序。不理解的朋友可以自己网上搜索答案。 TIM的种类和功能很多,本文是基础的知识,讲的比较简单,关于定时器更加强大和实用的功能可以关注我后面的文章。 为方便大家阅读,本文内容已经整理成PDF文件: http://pan.baidu.com/s/1i5uWhJR TIM基础知识 Ⅱ STM8S的定时器(TIMER)类型有三类:
[单片机]
STM8S_002_TIM精确延时 (阻塞式)
STM8S学习03——寄存器版本的一些程序
/* 一、空程序 */ #include stm8s208rb.h void delay(unsigned int t) { while(t--); } main() { PG_ODR = 0xff; PG_DDR = 0xff; PG_CR1 = 0xff; PG_CR2 = 0x00; while(1) { PG_ODR = 0x00; delay(50000); PG_ODR = oxff; delay(50000); } } /* 二、LED灯闪烁 */ #include stm8s208r.h void delay(unsigned int time); void main(void) { PB_DD
[单片机]
STM8S单片机GPIO.C的理解
一、STM8S单片机GPIO.C的组成 实际上,STM8S 系列单片机需要使用的stm8s_gpio.c由以下几个部分组成: void GPIO_DeInit(GPIO_TypeDef* GPIOx) void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode) void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal) void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)
[单片机]
STM8S---定时器产生PWM(TIM2)
1 说明 采用STM8S内部时钟(HSI); PWM模式2; 占空比为50%,频率为2Hz(方便测试LED灯); PD2口外接LED灯,PD2口输出PWM波; 系统时钟初始化很重要:CLK_CKDIVR |= 0x08; 2 代码 /* TIM2_CH3 PWM PD2 output */ #include STM8S003F3P.h void CLK_init(void) { CLK_ICKR |= 0X01; //使能内部高速时钟 HSI CLK_CKDIVR |= 0x08; //16M内部RC经2分频后系统时钟为8M while(!(CLK_ICKR&0x02)); /
[单片机]
基于STM8S的Atomthreads低功耗的深度思考
Atomthreads像众多操作系统一样,在没有任务调度是会调用idle。(by cpuwolf) static void atomIdleThread (uint32_t param) { /* Compiler warning */ param = param; /* Loop forever */ while (1) { /** \todo Provide user idle hooks*/ } } atomthreads中atomIdleThread()是以线程的形式存在,也就是最低优先级线程。作者默认没有填写这个函数。 uint8_t
[单片机]
基于<font color='red'>STM8S</font>的Atomthreads低功耗的深度思考
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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