历史上的今天
今天是:2024年10月09日(星期三)
2021年10月09日 | STM8L时钟切换详解
2021-10-09 来源:eefocus
SMT8L的四大时钟源LSE,LSI,HSE,HSI,都可以作为系统时钟。
系统上电后,HSI/8作为默认系统时钟,启动完成后,用户可以切换系统时钟源。
切换分为自动切换和手动切换,没有太大的区别。
下面是自动切换的流程图,按照此流程图,编写程序,即可实现时钟切换。
只需要三步即可实现系统时钟切换:
①置位CLK_SWCR寄存器中的SWEN位,允许时钟切换
②向CLK_SWR中写数据,选择目标时钟源
③等待SWBSY清零,即等待时钟切换完成
时钟切换完成后,在主循环中翻转IO电平,通过测量IO口的输出频率,可以直观的看到切换时钟,系统时钟频率发生了变化。
本程序选择LSE(32.768KHz)作为系统时钟,时钟切换完成后,PC7翻转电平,使用逻辑分析可以测量到此时PC7的输出频率。如下图:
可以看到PC7输出频率为2.73KHz,并不是32.768KHz。这是因为,STM8L一个指令周期为二个时钟周期,同时翻转电平的程序,高电平时间需要3个指令周期,低电平时间同样为3个指令周期。所以最终测量到的IO输出频率为32.768KHz/2/6=2.730667KHz。如果选择的时钟源为16M(HSI),则最终测得的IO输出频率为16M/2/6=1.33M。要注意,系统时钟的分频器默认8分频,需要清零分频器,才满足此计算方式。
#include"iostm8l152c6.h"
/****************************************************************************************
*开发环境:IAR for stm8v6.5
*硬件平台:STM8L-DISCOVERY
*功能说明:本程序选择LSE(32.768KHz)作为系统时钟,时钟切换完成后,PC7翻转电平,使用逻辑分析可以测量到此时PC7的输出频率,最终测量到的IO输出频率为32.768KHz/2/6=2.730667KHz。
*作 者:茗风
****************************************************************************************/
/******************************************************************************************************
* 名 称:voidGPIO_Init(void)
* 功 能:初始化PC7为高速推挽输出
* 入口参数:无
* 出口参数:无
* 说 明:测量系统时钟频率的IO,测量到的频率是:目标时钟源/2/6
* 范 例:无
******************************************************************************************************/
void GPIO_Init(void)
{
PC_CR1_C17 =1;//推挽输出
PC_CR2_C27 =1;//高速输出
PC_DDR_DDR7 =1;//PC4输出
// PC_ODR_ODR7 =0;//输出低电平
}
/******************************************************************************************************
* 名 称:voidCLOCK_Init(void)
* 功 能:系统时钟切换为LSE,32.768KHz
* 入口参数:无
* 出口参数:无
* 说 明:
* 范 例:无
******************************************************************************************************/
void CLOCK_Init(void)
{
CLK_CKDIVR =0x00;//CLK_CKDI,VR寄存器默认0x03分频值为8
//自动切换
CLK_SWCR_SWEN =1;//允许切换时钟
CLK_SWR =0x08;//写入一个八位的值,用于选择目标时钟源
while(CLK_SWCR_SWBSY);//等待时钟切换完成
//手动切换
// CLK_SWR =0x08;//写入一个八位的值,用于选择目标时钟源
// while(!CLK_ECKR_LSERDY);//等待目标时钟源稳定
// CLK_SWCR_SWEN =1;//允许切换时钟
/*
*0x01:HSI selected as system clock source
*0x02:LSI selected as system clock source
*0x04:HSE selected as system clock source
*0x08:LSE selected as system clock source
*/
}
/******************************************************************************************************
* 名 称:int main(void)
* 功 能:通过PC4输出选择的时钟
* 入口参数:无
* 出口参数:无
* 说 明:因为STM8l discovery没有接外部高速晶振,所以没办法输出HSE,不要
* 范 例:无
******************************************************************************************************/
void main( void )
{
GPIO_Init();
CLOCK_Init();
while(1)
{
PC_ODR_ODR7 ^=1;
}
}
下一篇:STM8S学习笔记-时钟控制1
史海拾趣
|
Create a flexible EDGE data receiver(Part 1) Today\'\'s integrated solutions don\'\'t necessarily have to result in a high level of complexity. The introduction of new wireless standards often places tremendous pressure on the underlying t ...… 查看全部问答> |
|
第1 章 C 语言概述及其开发环境的建立学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好。Keil 软件是目前最流行开发80C51 系列单片机的软件,Keil 提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的 ...… 查看全部问答> |
|
晾晒ARM9 S3C2416 做的 PDA,嘿嘿,真的比S3C2440 好很多。 去年,发现这个 ARM9 S3C2416 非常适合做低端的PDA,很适合代替2440 ,成本比2440 低几十块的核心板。不过发现国内中小企业很少人用这个高性价比的处理器,总是还继续用很挫的2440 ,嘿嘿,我们就来玩玩吧。经过测试效果,2416 跑400M主频 ,64M的D ...… 查看全部问答> |
|
android系统架构图 android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 1.应用程序 Android会同一系列核心 ...… 查看全部问答> |
|
为支持LaunchPad活动,我这个万年潜水者也来发帖了。MSP-EXP430G2 LaunchPad features: • USB debugging and programming interface featuring a driverless installation and application UART serial communica ...… 查看全部问答> |




