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学习笔记-关于时钟安全系统
下一篇:STM8S学习笔记-时钟控制1
推荐阅读
史海拾趣
Eastron Corp成立于电子产业的起步阶段,凭借创始人在半导体领域的深厚技术背景,公司迅速开发出了一系列高性能、低成本的半导体芯片。这些产品迅速占领了市场,为公司带来了可观的利润。随着技术的不断进步,Eastron不断推出新的产品,逐渐在电子行业中确立了其技术领先者的地位。
随着电子行业的快速发展和市场竞争的加剧,Dolphin Interconnect Solutions ASA面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加大在人工智能、物联网等新兴领域的投入。同时,Dolphin还加强了与产业链上下游企业的合作,共同推动产业链的转型升级。这些努力使得Dolphin在激烈的市场竞争中保持了稳健的发展态势。
AK-Nord_GmbH公司自成立之初,便以技术创新为核心竞争力。在公司发展的早期阶段,团队研发出了一款具有革命性的电源管理芯片,该芯片以其高效能和稳定性迅速赢得了市场的认可。随着技术的不断完善和迭代,公司逐渐在电源管理领域树立了领先地位。随后,AK-Nord_GmbH又投入大量资源进行无线通信技术的研发,成功推出了一系列高性能的无线通信模块,进一步巩固了其在电子行业中的地位。
随着公司的不断发展和壮大,Advanced Analog开始积极拓展国际市场。公司在全球范围内设立了多个分支机构和销售网络,与众多国际知名企业和品牌建立了长期稳定的合作关系。通过参与国际电子展会和交流活动,Advanced Analog的产品和技术得到了更广泛的认可和赞誉,进一步提升了公司在国际市场的知名度和影响力。
作为一家技术驱动的公司,Baumer Electric Ag始终注重研发投入和技术升级。公司不断引进先进的生产设备和技术手段,提高生产效率和产品质量。同时,Baumer还积极与高校、科研机构等合作,开展前沿技术研究和新产品开发。这些举措为公司的持续发展提供了强大的技术支持和创新动力。
这五个故事展示了Baumer Electric Ag公司在电子行业中的发展历程。从创业初期的坚持与突破,到关键人才的引入与领导层的更迭,再到股份制改革与产品创新的结合,以及国际化战略与出口业务的拓展和持续投资与技术升级,Baumer Electric Ag凭借其卓越的技术实力和创新精神,逐步在电子行业中树立起了自己的品牌形象和市场地位。
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 每周一轮的京城彩电价格战打到上周末打出一个拐点:40英寸液晶跌破1万元大关,首次低于42英寸等离子价格线。失去价格优势的等离子阵营正面对液晶阵营的步步逼宫,“生存还是毁灭?”这已是等离 ...… 查看全部问答∨ |
|
为广大读者奉献了众多内容翔实,且各具特色的智能家居案例及解决方案,在此我们为大家精挑细选出其中最具代表性的十篇案例。 一;视得安罗格朗Axolute智能家居案例 二;Axolute智能家居DIY方案 Axolute智能家居 ...… 查看全部问答∨ |
|
关于wince5 串口中断服务函数SerialDispatchThread的疑问 在SerialDispatchThread函数中有下面语句,请问: /* Wait for the event that any serial port action creates. */ while ( !pSerialHead->KillRxThread ) { DEB ...… 查看全部问答∨ |
|
用wince下的串口驱动移植的。 写完测试的时候都是在16字节以内进行的,收发正常。现在PC端每次发送超过16字节的数据,我的WINCE设备这边只能收到16字节,每次发送超过16字节的就丢失了。 芯片用得是16554. 这个可能是什么原因啊? 很奇怪我把FIFO ...… 查看全部问答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 04:05 编辑 欢迎各位在本贴讨论msp430f149使用的相关经验,需要149的相关资料,可以留言。LCD1602,1CD12864,ADC12,DAC7512,TTF2.4,PID,资料很多, … 查看全部问答∨ |
UART1串口只能接收16个字节的数据,超过16个字节的数据全部丢失 void uart1IsrInit(void) { INT16U usFdiv; U1LCR = 0x87; & ...… 查看全部问答∨ |