stm8s开发(四) CLOCK的使用:时钟控制!
来源:互联网 发布:护肤品使用手法 知乎 编辑:程序博客网 时间:2024/05/23 02:06
STM8S具有一个强大的时钟系统,内部提供一个高速16M的RC振荡器,和一个低速128K的RC振荡器。
时钟控制器功能强大而且灵活易用。其目的在于使用户在获得最好性能的同时,亦能保证消耗的功率最低。用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。
一般来说,时钟树是配置时钟、控制时钟的依据,所以需要掌握,以下是STM8S时钟树图:
从图中看出,一共有3个时钟源,分别是HSE(高速外部时钟)、HSI(高速内部时钟)、LSI(低速内部时钟)。
HSE(高速外部时钟)可通过外部晶振提供,HSI(高速内部时钟)为16M的RC振荡器,LSI(低速内部时钟)为128K的RC振荡器。
高速时钟(HSE和HSI)可以通过分频器进行降频。降频过后的时钟和原本的时钟都可以通过Master Clock Switch进行选择,
以下是初始化系统时钟的函数(默认使用16M内部RC):
void Set_HSISpeed(void){ //启用内部高速晶振且无分频16MHz CLK_ICKR|=0x01; //开启内部HSI while(!(CLK_ICKR&0x02));//HSI准备就绪 CLK_SWR=0xe1; //HSI为主时钟源 CLK_CKDIVR=0x00; //HSI不分频}
void Switch_LSISpeed(void){ CLK_SWCR|=0x02; //开启切换 CLK_ICKR|=0x08; //开启LSI while(!(CLK_ICKR&0x10));//HSI准备就绪 CLK_SWR=0xd2; //LSR为主时钟源 while((CLK_SWCR & 0x01)==0x01);//等待切换完成 CLK_CKDIVR=0x00; //LSI不分频 CLK_SWCR&=(~0x02); //关闭切换}void Switch_HSISpeed(void){ CLK_SWCR|=0x02; //开启切换 CLK_ICKR|=0x01; //开启内部HSI while(!(CLK_ICKR&0x02));//HSI准备就绪 CLK_SWR=0xe1; //HSI为主时钟源 while((CLK_SWCR & 0x01)==0x01);//等待切换完成 CLK_CKDIVR=0x00; //HSI不分频 CLK_SWCR&=(~0x02); //关闭切换}
如果想直接降频,只需要设置始终分频:
void Set_CPU_Full_Speed(void){ CLK_CKDIVR=0x00; //HSI不分频}void Set_CPU_Low_Speed(void){ CLK_CKDIVR=0x07; //HSI 128分频}
以上就是初始化时钟的代码,一般用于mian函数的第一句话,方便以后计算其他外设的时钟频率。
附上stm8s在IAR环境下的项目工程,包括了SPI、IIC、PWM、AWU、USART、EEPROM等片上硬件的初始化代码。
http://download.csdn.net/detail/devintt/9454188
0 0
- stm8s开发(四) CLOCK的使用:时钟控制!
- stm8s开发(二) GPIO的使用:点亮LED!
- stm8s开发(三) UART的使用:串口通信!
- stm8s开发(五) TIMER的使用:定时!
- stm8s开发(七) SPI的使用:SPI主机通信!
- stm8s开发(八) IIC的使用:IIC主机通信!
- 基于TI-RTOS的CC2650DK开发(15)---Clock(时钟)
- STM8S 定时器的使用
- STM8S 定时器的使用
- STM8S 定时器的使用
- STM8S 定时器的使用
- 一个使用svg做的动态时钟--svg clock
- PCF8563 时钟芯片驱动程序 (STM8S/STM8L)
- stm8s开发(九) EEPROM的使用:使用EEPROM存储数据!
- stm8s开发(六) EXIT的使用:做一个外部中断的按钮!
- stm8s中UART的用法(四种UART中断)
- 时钟滴答(clock tick)
- stm8s开发(一) 使用IAR新建工程
- Activity之间传递参数
- POJ 1442 Black Box [Treap]
- gethostbyname函数用域名或主机名获取IP地址
- 自定义ImageView实现图片的拖动、缩放和边界回弹
- Nodejs定时器
- stm8s开发(四) CLOCK的使用:时钟控制!
- 离线记录+树状数组(hdu 5869 统计任意区间的不同gcd值)
- Struts2自学入门(一)
- js计时器
- Winform中来自web接口的Json解析——反序列化
- 2016ACM-ICPC大连网络预选赛1001 Different Circle Permutation
- Postgresql 常见数据库操作命令记录
- linux学习-编译内核
- Android中的Adapter 详解(二)