历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2021年10月09日 | 【STM8单片机】---时钟配置小感悟

发布者:genius5 来源: eefocus关键字:STM8  单片机  时钟配置 手机看文章 扫描二维码
随时随地手机看文章

今天闲着没事,在博客中想总结一下之前工作时用到的STM8时钟代码,本来觉的很简单,随便写写就完事了。这一细看让我慌了一下,还是有没有搞懂的地方。经过一个下午的努力,并且在好朋友的帮助下,终于稍微理清了一些头绪,且记下来,不对了日后再做补充。


首先上STM8单片机的时钟树图片。

这个图是时钟树的上半部分截图。从图中可以清楚的看到STM8的时钟树相对比STM32还是简单了很多。时钟来源有3种,外部晶振、内部RC 16MHz、内部RC 128KHz。CPU的运行CLK来自Fmaster,可以进行128/64/32/16/8/4/2/1分频,也就是最快等于Fmaster。如果是来自内部RC的16MHz则可以首先进行一次预分频HSIDIV,分频系数有8/4/2/1。


这里详细说一下外部时钟的问题。看一下20X系列的数据手册


从数据手册中可以看出,外部晶振的大小最高可以达到24MHz。STM8一些产品最高可以到16MHz,可以从库函数文件stm8s.h文中看到,截图如下:


假如需要外部晶振16MHz,则只需要进行修改如下所示即可。否则在进行使用串口等外设的时候会系统会错误的时间基准,导致无法正常运行。

代码的配置对库例程进行简单的修改,将内部RC和外部的合并了,使用的时候注释即可。

   CLK_DeInit();


    /*Configure the Fcpu to DIV1*/  //内部和外部都可以进行分频的地方

   CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);


    /*Configure the HSI prescaler to the optimal value */  //内部16MHz独有的预分频

   CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);


    /*Configure the system clock to use HSE clock source and to run at 24Mhz */

    status =CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);

   if(status== SUCCESS)

    {}

   

    /*Configure the system clock to use HSI clock source and to run at 16Mhz */

    status =CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);

   if(status== SUCCESS)


{}


其中CLK_ClockSwitchConfig库函数遵循上图流程,手动模式暂且不管。配置到这里,其实时钟的配置基本已经OK了,但是仔细阅读库例程的readme.txt和数据手册可以发现在使用外部大于16Mhz情况下的这么一句话

这句话是啥意思呢?经过查阅手册发现


在0个等待周期时速度24MHz。也就是其实需要一些等待时间的,具体是多少呢?

在时钟稳定时需要一个HSECNT的时间延迟稳定;另外一个是当Fcpu>16MHz的时候,需要1 wait state。这2个都是“Option bytes”里可以进行预先配置的。他们的地址和默认配置如下图所示。

 也就是说,在使用外部24Mhz一定要“Before using the HSE clock make sure that the "Flash_Wait_States"is set to 1.”确保这个选项字节被配置成当需要读取Flash和EEPROM的时候等待一个周期。并且还要保证在开始启动时有足够的稳定时间来确保时钟脉冲稳定,即HSECNT。配置方法可以使用ST-LINK在软件中进行配置,网上教程一堆。也可以在程序中对该地址进行读写操作,可以参考风驰STM8的方法。风驰大哥也有时钟配置的教程很详细,但是对那个等待一个周期解释的不够详细,让我这种小白很是头疼。经过一下午的奋斗,在好哥们的教导下我略微明白了一些,下面就将自己浅显的理解暂且记下,不对的地方日后更正。


在数据手册的首页上面刚开始就说了,STM采用的是哈佛结构3级流水线,也就是同时进行着3个步骤的操作,具体百度,我怕吹牛逼说错了误导别人。其中第一步骤是对Flash进行取指令,当速度大于16MHz的时候STM8要求加入1个等待周期,我的理解就是由于硬件技术的限制,当读取速度过高的时候不能保证数据的准确性,所以需要降速读取。那24Mhz的速度岂不是很垃圾,会不会比16MHz还慢呢?其实不会的,其余的操作,只要不涉及Flash的操作,时序都是在CLK=24Mhz的速度下进行的,非常快。哥们给我举例,假如一个乘法指令3个周期,读取Flash一个周期,他们同时进行的时候,即使读取Flash结束了还是要再等2个周期,等乘法指令结束了才能下一步,并不是24MHz全速运行一个周期不浪费,需要从汇编角度进行时序的严格分析才是最标准的。可以肯定,最终的速度低于24MHz,但并不能说明什么。其性能也可以用MIPS(Million Instructions Per Second)这个指标来说明它的速度,STM8的数据手册这样写“Max 20 MIPS @ 24 MHz”。

关键字:STM8  单片机  时钟配置 引用地址:【STM8单片机】---时钟配置小感悟

上一篇:STM8S学习笔记-时钟控制1
下一篇:STM8S学习笔记-时钟控制2

推荐阅读

        之前有消息称,三星可能会在今年11月份发布折叠屏手机,但现在来看这个计划要跳票了。  据外媒报道称,三星首款折叠手机将不会在今年11月份亮相,但是官方会在他们的开发者大会上公布一些跟折叠屏手机有关的消息,而这款手机真正推出的时间是2019年第一季度。  11月7日三星全球开发者大会将在旧金山拉开序幕,届时他们会公布一些新的...
据了解,厦门科技局启动“未来产业培育工程”,对第三代半导体、高端装备、先进材料等十大未来产业进行抢先布局。 半导体产业是实体经济尤其是现代工业的核心和基础,同时为新一代信息技术、高端装备制造、绿色低碳、数字经济、新材料等战略性新兴产业发展提供重要的战略支撑。 为发展高质量、高水平的未来产业,厦门科技局将推出系列“组合拳”:编制产业...
福建晋华事件,开启了美国制裁中国半导体的序幕,中国半导体产业逐渐成为普通群众也争相探讨的话题,中芯国际一台迟迟不能“到账”的当下最先进的EUV光刻机,更是成为全民关心的大事。几个月前朋友圈疯转的一则新闻旧话,掀起更大的波澜:原来中国这么早就开始光刻机研发了,那为何现在还是沦落到受制于人的局面?三次全国大规模集成电路会议,引发国产光...
以往,在数以亿计的电子元器件中快速找到想要的型号,如同大海捞针一般。直到一款B2B交易型SaaS(Software-as-a-Service)产品问世,整体交易效率和上下游工序匹配效率得到倍数提升……9月28日,OFweek 2021中国智能制造数字化转型峰会盛大开幕,大会期间,腾采通电子总经理何伟接受了维科网记者的采访,为我们展示了公司对工业B2B行业的深刻理解和布局,...

史海拾趣

问答坊 | AI 解惑

寻求高频(50M或以上的)整流二极管!!很急

大家好,能帮我推荐一款高频(50M或以上的)整流二极管吗???!!…

查看全部问答∨

C# + Symbol MC1000 程序实现 调整 对比度 ,或者是自己写个注册表文件 来调整MC1000对比度 ?

如题,最近搞个MC1000上面小程序,做过之后感觉屏幕太暗,所以想修改一下对比度,想自己做个注册表文件,但是不知道 对比度 对应注册表里面哪一项。 还有没有其它的方法来实现??求大侠帮忙。。…

查看全部问答∨

中兴通讯内部推荐

本科工作三年,研究生工作一年,你在网上搜索中兴通讯在哪里有研究所,都可以给你投递,精通C、C++即可,当然最好了解些嵌入式知识,通信相关,开发测试都可推荐,如有意向发简历到qian.fangzheng@zte.com.cn,或加QQ191489901(近几天重点大学的应 ...…

查看全部问答∨

ASM 函数调用问题

我在一个文件里定义了两个汇编函数,但编译的时候提示说不认识第一个InvalidateTLBs();这是为什么呢? asm void InvalidateTLBs() {    addi     r5,0,32    mtspr    CTR,r5   &nb ...…

查看全部问答∨

2410 wince添加三串口驱动,红外是否该去掉?

我按照网上的方法为2410wince添加了三个串口驱动,并且将红外部分的注册表注释,改成串口三,使用和串口1、2相同的驱动 现在又出现问题,串口1、2能正常打开读写,在打开串口3时,getlasterro,返回设备不存在的错误 难道我不能去掉红外驱动?? ...…

查看全部问答∨

中断的检测问题

我现在在做一耳机和喇叭切换的程序,操作系统是linux,cpu是我们公司产的基于arm9的芯片,耳机的插入检测和喇叭的打开关闭由两个gpio控制,假设是pa1和pa2,pa1检测耳机输入,如果耳机插入,pa1为高电平, 否则为低电平。如果采取中断的方式处理的话, ...…

查看全部问答∨

准备学习嵌入式,大家提点建议,谢谢

  曾经搞过oi,对算法和数据结构有一定了解。对c和x86asm很熟悉。后来对hacking skills,linux,network很感兴趣,并学习了一些相关知识。   这就是我大概的情况,现在我想学嵌入式开发,最好是最适合我现在基础的那一方面, ...…

查看全部问答∨

学驱动编程得懂哪些东西啊!

小弟正在看linux设备驱动程序发现看不懂,不知道该有什么知识,请高手指点,写驱动程序该看什么书啊!…

查看全部问答∨

DM9000硬件问题怎么检测

各位谁用过DM9000,现在我的BSP在开发板上能ping通,在我的板子上不行,DM9000一块电路是完全一样的,怎么快速定位硬件错误,请用过的朋友指点下,谢谢先…

查看全部问答∨

M16配套的USBASP下载线调试报告。

活动刚开始时,小志让看一看那个图是否有问题,然后我粗略地看了一下,感觉没会问题。 然后回了小志说板子没问题,可以打样。可今天焊接时发现有点小问题。在此跟大家说对不起了~~~ 下面就上我制作过程的一些图: 刚发现这原来用的是USB A型的母 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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